WebAssemblyのテストプログラム
GitHubの使い方を学ぶためにWebAssemblyのテストプログラムを置きましたが、WebAssembly StudioのHello in Cをそのまま転用しているのでたいしたことはしてません。
四角をランダムに書くだけなので、素直にfillRectで描いた方が早いと思います。Webネイティブでない画像フォーマット(例えばtiffとか)をデコードして描画するプログラムに気が向いたら書き換えるつもりですが、あくまで気が向いたらです。
サンプルは、JavaScriptとWebAssembly間のデータのやりとりのテストをしているだけで、さらに、色の挿入をリトルエディアンで決め打ちして32bit unsigned long(ulong)で挿入しています。良くないので直さないと行けないのですが面倒なのでやっておりません。
WebAssembly Studio上で、mallocコマンドを素直に使用するとエラーになります。これは、systemコールを叩いている所為です。そのためJavaScript上で実装する必要があります。mallocは、mmap2(192)のsystemコールを叩きますが、WebAssembly Studioのサンプルにある"Hello World in C"は、これが実装されているので転用するのに便利な訳です。
WebAssemlyとJavaScriptの共有メモリは、wallocとwfreeと言う二つの関数をJavaScript側から呼び出し確保します。
WASM_EXPORT
void * walloc(int size) {
return malloc(size);
}
WASM_EXPORT
void wfree(void *p) {
free(p);
}
上の関数を利用して、WebAssemblyとJavaScriptで共有する方法は以下の通りです。
var p = instance.exports.walloc(buffersize);
var array = new Uint8ClampedArray(instance.exports.memory.buffer,p,buffersize);
これでbuffersizeの配列変数がJavaScriptとWebAssemblyの間でバッファの受け渡しが出来る訳です。これで、JavaScript側で読み込んだデータ、WebAssemblyでデコードして表示させる事が可能になるはずです。
と言う事はこれで画像デコーダが書けるはずと。後は気が向いたらやります。