assemblyscript/tests/compiler/game-of-life.html

38 lines
1.2 KiB
HTML
Raw Normal View History

<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>