electronにmmapの(少し修正されたバージョン)を使用して、2つの異なるプロセス間でメモリを共有しています。それから私は、WebGLのテクスチャをアップロードするbufferの形で、このメモリを使用して、私はものを描くためにそれを使用します。バッファからWebGLテクスチャを強制的にリロードする
buffer = mmap(196608,mmap.PROT_READ,mmap.MAP_SHARED,"shared_mmap",0)
f = function(){
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, 256, 256, 0, gl.RGB, gl.UNSIGNED_BYTE, buffer);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.bindTexture(gl.TEXTURE_2D, null)
}
これは、完全に最初の時間を動作します。データが他のプロセスによって変更されているのがわかりますが(コンソールでbuffer[100]
を評価すると)、WebGLシーンではテクスチャは同じままです。私はTypedArrayにバッファをコピーする場合
しかし、それは完璧に動作します:
arr = new Uint8Array(buffer)
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, 256, 256, 0, gl.RGB, gl.UNSIGNED_BYTE, arr);
問題があるということに、私は繰り返し、すべてのデータの種類の目的に反しすべてのフレームを、コピーしています。この方法をやってmmapを使用しています。
WebGLテクスチャをバッファデータで更新する方法はありますか?毎回その内容を新しい配列にコピーしないでください。
gl.texImage2Dにnode :: Bufferを渡すことができませんでした。しかし、それが初めての場合は、Uint8Arrayにコピーする必要があるのはなぜですか? – pleup
私は初めて動作しますが、バッファ内の新しい情報では更新されません。基本的に共有メモリなので、バッファに格納されている情報は変更されますが、何とかtexImage2Dはそれを認識しません。 –