add pages
This commit is contained in:
commit
397c849543
8 changed files with 527 additions and 0 deletions
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# kdevelop
|
||||||
|
.kde*
|
||||||
|
*.kdev4
|
||||||
|
# other
|
||||||
|
*.o
|
||||||
|
lib/libWASM.a
|
27
bin/index.html
Normal file
27
bin/index.html
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<title>Quantum</title>
|
||||||
|
<style>
|
||||||
|
.frame1 { width: 97%; margin: 0; padding: 10px; background-color: #FFFFC0; border: 10px solid #F0C0F0; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body><div class="frame1">
|
||||||
|
<h2>Kvantový vývoj.</h2>
|
||||||
|
<p><a href="oscilator.html">Harmonický oscilátor.</a>
|
||||||
|
</p>
|
||||||
|
<p><a href="well.html">Kvantová jáma.</a>
|
||||||
|
</p>
|
||||||
|
<p>Obojí je jen přepis apletu ze serveru Aldebaran, to už na novějších prohlížečích nefunguje,
|
||||||
|
je to jednoduše přepsáno jako bare-bone webassembly modul. Původně to bylo napsáno pro emscripten,
|
||||||
|
ale nakonec je to zoptimalizováno jen pro clang, nakonec není to nic složitého a těch pár knihovních
|
||||||
|
funkcí je dopsáno ručně, byť ne moc efektivně. A je to tak 10x menší (ne, že by na tom moc záleželo).
|
||||||
|
</p>
|
||||||
|
<p>Není to nijak učesané, nejsou ani ošetřeny všechny závislosti a tím méně chyby. Celkem to však
|
||||||
|
funguje, je např. vidět, že čistý bázový stav nemá časový vývoj. Samozřejmě chybí i jakékoli
|
||||||
|
komentáře, ale dělal jsem to abych se něco nového naučil, ne abych to prodal.´
|
||||||
|
</p>
|
||||||
|
</div></body>
|
||||||
|
</html>
|
131
bin/oscilator.html
Normal file
131
bin/oscilator.html
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<title>Oscilator</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table, th, td {
|
||||||
|
border: none;/*1px solid blue;*/
|
||||||
|
text-align : center;
|
||||||
|
background: #E0E0FF;
|
||||||
|
}
|
||||||
|
.mtab {
|
||||||
|
width: 100vw;
|
||||||
|
height: 85vh;
|
||||||
|
}
|
||||||
|
.canvas {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: #A0A0A0;
|
||||||
|
}
|
||||||
|
.slider {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
width: 100%;
|
||||||
|
height: 30px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #00FF00;
|
||||||
|
outline: none;
|
||||||
|
opacity: 0.7;
|
||||||
|
transition: opacity .2s;
|
||||||
|
}
|
||||||
|
.vslider {
|
||||||
|
-webkit-appearance: slider-vertical;
|
||||||
|
width: 20px;
|
||||||
|
height: 100%;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #00FF00;
|
||||||
|
outline: none;
|
||||||
|
opacity: 0.7;
|
||||||
|
transition: opacity .2s;
|
||||||
|
}
|
||||||
|
.slider::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
width: 25px;
|
||||||
|
height: 30px;
|
||||||
|
background: #A000A0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.slider::-moz-range-thumb {
|
||||||
|
width: 25px;
|
||||||
|
height: 30px;
|
||||||
|
background: #A000A0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.vslider::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
width: 25px;
|
||||||
|
height: 30px;
|
||||||
|
background: #A000A0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.vslider::-moz-range-thumb {
|
||||||
|
width: 25px;
|
||||||
|
height: 30px;
|
||||||
|
background: #A000A0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.button {
|
||||||
|
background-color: #00F0F0;
|
||||||
|
border: none;
|
||||||
|
color: black;
|
||||||
|
padding: 10px 64px;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 24px;
|
||||||
|
border: 2px solid #4CAF50;
|
||||||
|
}
|
||||||
|
.frame1 {
|
||||||
|
width: 90%;
|
||||||
|
margin: auto;
|
||||||
|
background-color: #FFFFC0;
|
||||||
|
border: 10px solid #F0C0F0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="WasmDomElements"></div>
|
||||||
|
<table class="mtab">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table width="100%" height="100%">
|
||||||
|
<tr><td colspan="10"><b>Váhy:</b></td></tr>
|
||||||
|
<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td></tr>
|
||||||
|
<tr>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight0" oninput="SetWeight(0);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight1" oninput="SetWeight(1);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight2" oninput="SetWeight(2);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight3" oninput="SetWeight(3);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight4" oninput="SetWeight(4);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight5" oninput="SetWeight(5);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight6" oninput="SetWeight(6);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight7" oninput="SetWeight(7);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight8" oninput="SetWeight(8);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight9" oninput="SetWeight(9);" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr><td colspan="10" id="weightText"> </td></tr>
|
||||||
|
<tr><td colspan="10"><button class="button" id="zerobut" onclick="ClearWeights();">Nuluj vše</button></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td width="90%"><canvas class="canvas" id="canvas"></canvas></td>
|
||||||
|
</tr>
|
||||||
|
<td id="showspeed">Rychlost</td><td> </td>
|
||||||
|
<tr>
|
||||||
|
</tr>
|
||||||
|
<td><input type="range" class="slider" min="1" max="10" id="speed" oninput="SetSpeed();" /></td>
|
||||||
|
<td><button class="button" id="animate" onclick="StartStop();">Vývoj</button></td>
|
||||||
|
<tr>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p id="debugText"></p>
|
||||||
|
<script src="oscilator.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
116
bin/oscilator.js
Normal file
116
bin/oscilator.js
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
var gWASM = null; // WASM -> global object
|
||||||
|
var Animate = 0;
|
||||||
|
var canvas = document.getElementById('canvas');
|
||||||
|
var context = canvas.getContext('2d');
|
||||||
|
var bgImage = new Image();
|
||||||
|
window.onload = async function() {
|
||||||
|
const memory = new WebAssembly.Memory({ initial: 128 });
|
||||||
|
if (!memory) {
|
||||||
|
console.log ('!!! WebAssembly not supported'); return;
|
||||||
|
}
|
||||||
|
const importObject = {
|
||||||
|
env: { memory },
|
||||||
|
imports: { // importované funkce do wasm
|
||||||
|
PrintOut : (ptr, len) => {
|
||||||
|
const view = new Uint8Array (memory.buffer, ptr, len);
|
||||||
|
const utf8decoder = new TextDecoder();
|
||||||
|
console.log (utf8decoder.decode(view));
|
||||||
|
},
|
||||||
|
memoryGrow : (len) => {
|
||||||
|
console.log ('Growing the memory by ' + len.toString() + '. 64K blocks');
|
||||||
|
importObject.env.memory.grow (len);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const response = await fetch('./oscilator.wasm');
|
||||||
|
const bytes = await response.arrayBuffer();
|
||||||
|
const module = await WebAssembly.instantiate(bytes, importObject);
|
||||||
|
gWASM = {
|
||||||
|
asm : module.instance.exports,
|
||||||
|
mem : memory,
|
||||||
|
};
|
||||||
|
gWASM.asm.Init(memory.buffer.byteLength);
|
||||||
|
|
||||||
|
window.addEventListener('resize', resizeCanvas, false);
|
||||||
|
resizeCanvas();
|
||||||
|
ClearWeights();
|
||||||
|
|
||||||
|
const id = document.getElementById ('speed');
|
||||||
|
id.value = 1;
|
||||||
|
}
|
||||||
|
function SetSpeed () {
|
||||||
|
const id = document.getElementById ('speed');
|
||||||
|
gWASM.asm.setSpeed (parseInt (id.value));
|
||||||
|
document.getElementById ('showspeed').innerHTML = 'Rychlost : ' + id.value;
|
||||||
|
}
|
||||||
|
function StartStop () {
|
||||||
|
Animate = gWASM.asm.gEnabled ();
|
||||||
|
const id = document.getElementById ('animate');
|
||||||
|
if (Animate) id.innerHTML = 'Stop';
|
||||||
|
else id.innerHTML = 'Vývoj';
|
||||||
|
}
|
||||||
|
function SetWeight (n) {
|
||||||
|
const sid = 'Weight' + n;
|
||||||
|
const val = document.getElementById (sid).value;
|
||||||
|
const m = n + 1;
|
||||||
|
const out = m.toString() + ' : ' + val.toString() + '%';
|
||||||
|
document.getElementById('weightText').innerHTML = out;
|
||||||
|
gWASM.asm.setWeight (n, parseInt (val));
|
||||||
|
drawPass ();
|
||||||
|
}
|
||||||
|
function ClearWeights () {
|
||||||
|
for (i=0; i<10; i++) {
|
||||||
|
const sid = 'Weight' + i;
|
||||||
|
document.getElementById (sid).value = 0;
|
||||||
|
document.getElementById('weightText').innerHTML = 'vynulováno';
|
||||||
|
gWASM.asm.setWeight (i,0);
|
||||||
|
}
|
||||||
|
gWASM.asm.Reset();
|
||||||
|
drawPass();
|
||||||
|
}
|
||||||
|
function resizeCanvas() {
|
||||||
|
const width = canvas.clientWidth;
|
||||||
|
const height = canvas.clientHeight;
|
||||||
|
canvas.width = width;
|
||||||
|
canvas.height = height;
|
||||||
|
gWASM.asm.graph (width, height);
|
||||||
|
drawStuff ();
|
||||||
|
window.setTimeout (ReplotPass, 50);
|
||||||
|
}
|
||||||
|
function drawStuff() {
|
||||||
|
context.clearRect(0, 0, canvas.widht, canvas.height);
|
||||||
|
delete bgImage;
|
||||||
|
bgImage = backup (gWASM.asm.bg_data());
|
||||||
|
context.drawImage (bgImage, 0, 0);
|
||||||
|
const fgImage = backup (gWASM.asm.fg_data());
|
||||||
|
context.drawImage (fgImage, 0, 0);
|
||||||
|
}
|
||||||
|
function drawPass() {
|
||||||
|
const fgImage = backup (gWASM.asm.fg_data());
|
||||||
|
context.clearRect(0, 0, canvas.widht, canvas.height);
|
||||||
|
context.drawImage (bgImage, 0, 0);
|
||||||
|
context.drawImage (fgImage, 0, 0);
|
||||||
|
}
|
||||||
|
function ReplotPass () {
|
||||||
|
if (Animate) {
|
||||||
|
// console.log ('Pass');
|
||||||
|
const fgImage = backup (gWASM.asm.gStep());
|
||||||
|
context.clearRect(0, 0, canvas.widht, canvas.height);
|
||||||
|
context.drawImage (bgImage, 0, 0);
|
||||||
|
context.drawImage (fgImage, 0, 0);
|
||||||
|
}
|
||||||
|
window.setTimeout (ReplotPass, 20);
|
||||||
|
}
|
||||||
|
function backup (m_Data) {
|
||||||
|
const buffer = gWASM.mem.buffer;
|
||||||
|
const memarr = new Uint32Array (buffer, m_Data, 2);
|
||||||
|
const canvas = document.getElementById('canvas');
|
||||||
|
const width = canvas.width;
|
||||||
|
const height = canvas.height;
|
||||||
|
const tmpcvs = new OffscreenCanvas(width, height);
|
||||||
|
const tmpctx = tmpcvs.getContext('2d');
|
||||||
|
const bytes = new ImageData (new Uint8ClampedArray (buffer, memarr[0], memarr[1]), width, height);
|
||||||
|
tmpctx.putImageData (bytes, 0, 0);
|
||||||
|
return tmpcvs; // vrati obrazek
|
||||||
|
}
|
||||||
|
|
BIN
bin/oscilator.wasm
Executable file
BIN
bin/oscilator.wasm
Executable file
Binary file not shown.
131
bin/well.html
Normal file
131
bin/well.html
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<title>Quantum_Well</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
table, th, td {
|
||||||
|
border: none;/*1px solid blue;*/
|
||||||
|
text-align : center;
|
||||||
|
background: #E0E0FF;
|
||||||
|
}
|
||||||
|
.mtab {
|
||||||
|
width: 100vw;
|
||||||
|
height: 85vh;
|
||||||
|
}
|
||||||
|
.canvas {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: #A0A0A0;
|
||||||
|
}
|
||||||
|
.slider {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
width: 100%;
|
||||||
|
height: 30px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #00FF00;
|
||||||
|
outline: none;
|
||||||
|
opacity: 0.7;
|
||||||
|
transition: opacity .2s;
|
||||||
|
}
|
||||||
|
.vslider {
|
||||||
|
-webkit-appearance: slider-vertical;
|
||||||
|
width: 20px;
|
||||||
|
height: 100%;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #00FF00;
|
||||||
|
outline: none;
|
||||||
|
opacity: 0.7;
|
||||||
|
transition: opacity .2s;
|
||||||
|
}
|
||||||
|
.slider::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
width: 25px;
|
||||||
|
height: 30px;
|
||||||
|
background: #A000A0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.slider::-moz-range-thumb {
|
||||||
|
width: 25px;
|
||||||
|
height: 30px;
|
||||||
|
background: #A000A0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.vslider::-webkit-slider-thumb {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
width: 25px;
|
||||||
|
height: 30px;
|
||||||
|
background: #A000A0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.vslider::-moz-range-thumb {
|
||||||
|
width: 25px;
|
||||||
|
height: 30px;
|
||||||
|
background: #A000A0;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.button {
|
||||||
|
background-color: #00F0F0;
|
||||||
|
border: none;
|
||||||
|
color: black;
|
||||||
|
padding: 10px 64px;
|
||||||
|
text-align: center;
|
||||||
|
text-decoration: none;
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 24px;
|
||||||
|
border: 2px solid #4CAF50;
|
||||||
|
}
|
||||||
|
.frame1 {
|
||||||
|
width: 90%;
|
||||||
|
margin: auto;
|
||||||
|
background-color: #FFFFC0;
|
||||||
|
border: 10px solid #F0C0F0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="WasmDomElements"></div>
|
||||||
|
<table class="mtab">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<table width="100%" height="100%">
|
||||||
|
<tr><td colspan="10"><b>Váhy:</b></td></tr>
|
||||||
|
<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td></tr>
|
||||||
|
<tr>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight0" oninput="SetWeight(0);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight1" oninput="SetWeight(1);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight2" oninput="SetWeight(2);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight3" oninput="SetWeight(3);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight4" oninput="SetWeight(4);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight5" oninput="SetWeight(5);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight6" oninput="SetWeight(6);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight7" oninput="SetWeight(7);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight8" oninput="SetWeight(8);" /></td>
|
||||||
|
<td height="90%"><input type="range" class="vslider" orient="vertical" min="0" max="100" id="Weight9" oninput="SetWeight(9);" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr><td colspan="10" id="weightText"> </td></tr>
|
||||||
|
<tr><td colspan="10"><button class="button" id="zerobut" onclick="ClearWeights();">Nuluj vše</button></td></tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td width="90%"><canvas class="canvas" id="canvas"></canvas></td>
|
||||||
|
</tr>
|
||||||
|
<td id="showspeed">Rychlost</td><td> </td>
|
||||||
|
<tr>
|
||||||
|
</tr>
|
||||||
|
<td><input type="range" class="slider" min="1" max="10" id="speed" oninput="SetSpeed();" /></td>
|
||||||
|
<td><button class="button" id="animate" onclick="StartStop();">Vývoj</button></td>
|
||||||
|
<tr>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<p id="debugText"></p>
|
||||||
|
<script src="well.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
116
bin/well.js
Normal file
116
bin/well.js
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
var gWASM = null; // WASM -> global object
|
||||||
|
var Animate = 0;
|
||||||
|
var canvas = document.getElementById('canvas');
|
||||||
|
var context = canvas.getContext('2d');
|
||||||
|
var bgImage = new Image();
|
||||||
|
window.onload = async function() {
|
||||||
|
const memory = new WebAssembly.Memory({ initial: 128 });
|
||||||
|
if (!memory) {
|
||||||
|
console.log ('!!! WebAssembly not supported'); return;
|
||||||
|
}
|
||||||
|
const importObject = {
|
||||||
|
env: { memory },
|
||||||
|
imports: { // importované funkce do wasm
|
||||||
|
PrintOut : (ptr, len) => {
|
||||||
|
const view = new Uint8Array (memory.buffer, ptr, len);
|
||||||
|
const utf8decoder = new TextDecoder();
|
||||||
|
console.log (utf8decoder.decode(view));
|
||||||
|
},
|
||||||
|
memoryGrow : (len) => {
|
||||||
|
console.log ('Growing the memory by ' + len.toString() + '. 64K blocks');
|
||||||
|
importObject.env.memory.grow (len);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const response = await fetch('./well.wasm');
|
||||||
|
const bytes = await response.arrayBuffer();
|
||||||
|
const module = await WebAssembly.instantiate(bytes, importObject);
|
||||||
|
gWASM = {
|
||||||
|
asm : module.instance.exports,
|
||||||
|
mem : memory,
|
||||||
|
};
|
||||||
|
gWASM.asm.Init(memory.buffer.byteLength);
|
||||||
|
|
||||||
|
window.addEventListener('resize', resizeCanvas, false);
|
||||||
|
resizeCanvas();
|
||||||
|
ClearWeights();
|
||||||
|
|
||||||
|
const id = document.getElementById ('speed');
|
||||||
|
id.value = 1;
|
||||||
|
}
|
||||||
|
function SetSpeed () {
|
||||||
|
const id = document.getElementById ('speed');
|
||||||
|
gWASM.asm.setSpeed (parseInt (id.value));
|
||||||
|
document.getElementById ('showspeed').innerHTML = 'Rychlost : ' + id.value;
|
||||||
|
}
|
||||||
|
function StartStop () {
|
||||||
|
Animate = gWASM.asm.gEnabled ();
|
||||||
|
const id = document.getElementById ('animate');
|
||||||
|
if (Animate) id.innerHTML = 'Stop';
|
||||||
|
else id.innerHTML = 'Vývoj';
|
||||||
|
}
|
||||||
|
function SetWeight (n) {
|
||||||
|
const sid = 'Weight' + n;
|
||||||
|
const val = document.getElementById (sid).value;
|
||||||
|
const m = n + 1;
|
||||||
|
const out = m.toString() + ' : ' + val.toString() + '%';
|
||||||
|
document.getElementById('weightText').innerHTML = out;
|
||||||
|
gWASM.asm.setWeight (n, parseInt (val));
|
||||||
|
drawPass ();
|
||||||
|
}
|
||||||
|
function ClearWeights () {
|
||||||
|
for (i=0; i<10; i++) {
|
||||||
|
const sid = 'Weight' + i;
|
||||||
|
document.getElementById (sid).value = 0;
|
||||||
|
document.getElementById('weightText').innerHTML = 'vynulováno';
|
||||||
|
gWASM.asm.setWeight (i,0);
|
||||||
|
}
|
||||||
|
gWASM.asm.Reset();
|
||||||
|
drawPass();
|
||||||
|
}
|
||||||
|
function resizeCanvas() {
|
||||||
|
const width = canvas.clientWidth;
|
||||||
|
const height = canvas.clientHeight;
|
||||||
|
canvas.width = width;
|
||||||
|
canvas.height = height;
|
||||||
|
gWASM.asm.graph (width, height);
|
||||||
|
drawStuff ();
|
||||||
|
window.setTimeout (ReplotPass, 50);
|
||||||
|
}
|
||||||
|
function drawStuff() {
|
||||||
|
context.clearRect(0, 0, canvas.widht, canvas.height);
|
||||||
|
delete bgImage;
|
||||||
|
bgImage = backup (gWASM.asm.bg_data());
|
||||||
|
context.drawImage (bgImage, 0, 0);
|
||||||
|
const fgImage = backup (gWASM.asm.fg_data());
|
||||||
|
context.drawImage (fgImage, 0, 0);
|
||||||
|
}
|
||||||
|
function drawPass() {
|
||||||
|
const fgImage = backup (gWASM.asm.fg_data());
|
||||||
|
context.clearRect(0, 0, canvas.widht, canvas.height);
|
||||||
|
context.drawImage (bgImage, 0, 0);
|
||||||
|
context.drawImage (fgImage, 0, 0);
|
||||||
|
}
|
||||||
|
function ReplotPass () {
|
||||||
|
if (Animate) {
|
||||||
|
// console.log ('Pass');
|
||||||
|
const fgImage = backup (gWASM.asm.gStep());
|
||||||
|
context.clearRect(0, 0, canvas.widht, canvas.height);
|
||||||
|
context.drawImage (bgImage, 0, 0);
|
||||||
|
context.drawImage (fgImage, 0, 0);
|
||||||
|
}
|
||||||
|
window.setTimeout (ReplotPass, 20);
|
||||||
|
}
|
||||||
|
function backup (m_Data) {
|
||||||
|
const buffer = gWASM.mem.buffer;
|
||||||
|
const memarr = new Uint32Array (buffer, m_Data, 2);
|
||||||
|
const canvas = document.getElementById('canvas');
|
||||||
|
const width = canvas.width;
|
||||||
|
const height = canvas.height;
|
||||||
|
const tmpcvs = new OffscreenCanvas(width, height);
|
||||||
|
const tmpctx = tmpcvs.getContext('2d');
|
||||||
|
const bytes = new ImageData (new Uint8ClampedArray (buffer, memarr[0], memarr[1]), width, height);
|
||||||
|
tmpctx.putImageData (bytes, 0, 0);
|
||||||
|
return tmpcvs; // vrati obrazek
|
||||||
|
}
|
||||||
|
|
BIN
bin/well.wasm
Executable file
BIN
bin/well.wasm
Executable file
Binary file not shown.
Loading…
Reference in a new issue