mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-25 23:12:19 +00:00
38 lines
1.2 KiB
HTML
38 lines
1.2 KiB
HTML
|
<canvas id="canvas" width="640" height="480"></canvas>
|
||
|
<script src="../../node_modules/binaryen/index.js"></script>
|
||
|
<script>
|
||
|
fetch("game-of-life.optimized.wast").then(response =>
|
||
|
response.text()
|
||
|
).then(text => {
|
||
|
let buffer = Binaryen.parseText(text).emitBinary();
|
||
|
return WebAssembly.instantiate(buffer, {});
|
||
|
}).then(result => {
|
||
|
let cnv = document.getElementById("canvas");
|
||
|
let ctx = cnv.getContext("2d");
|
||
|
let w = cnv.width, h = cnv.height, s = w * h, S = s + s;
|
||
|
if (result.instance.exports.memory.buffer.byteLength < S)
|
||
|
result.instance.exports.memory.grow(Math.ceil(S / 65536) - 1);
|
||
|
let mem = new Uint8Array(result.instance.exports.memory.buffer);
|
||
|
for (let y = 0; y < h; ++y)
|
||
|
for (let x = 0; x < w; ++x)
|
||
|
mem[y * w + x] = Math.random() > 0.1 ? 0 : 1;
|
||
|
result.instance.exports.init(w, h);
|
||
|
setInterval(function() {
|
||
|
result.instance.exports.step();
|
||
|
mem.set(mem.subarray(s, S), 0);
|
||
|
}, 33);
|
||
|
function render() {
|
||
|
requestAnimationFrame(render);
|
||
|
ctx.clearRect(0, 0, w, h);
|
||
|
ctx.fillStyle = "#333";
|
||
|
for (let y = 0; y < h; ++y)
|
||
|
for (let x = 0; x < w; ++x)
|
||
|
if (mem[s + y * w + x])
|
||
|
ctx.fillRect(x, y, 1, 1);
|
||
|
}
|
||
|
render();
|
||
|
}).catch(err => {
|
||
|
throw err;
|
||
|
});
|
||
|
</script>
|