2016-10-18 12 views
1

electronmmapの(少し修正されたバージョン)を使用して、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テクスチャをバッファデータで更新する方法はありますか?毎回その内容を新しい配列にコピーしないでください。

+0

gl.texImage2Dにnode :: Bufferを渡すことができませんでした。しかし、それが初めての場合は、Uint8Arrayにコピーする必要があるのはなぜですか? – pleup

+0

私は初めて動作しますが、バッファ内の新しい情報では更新されません。基本的に共有メモリなので、バッファに格納されている情報は変更されますが、何とかtexImage2Dはそれを認識しません。 –

答えて

0

データをコピーしていません。new Uint8Array(buffer)で、同じデータへの新しい参照を作成しています。

Here DataViewについて詳しく知ることができます。

+0

[それ以外のノードのドキュメントでは](https://nodejs.org/api/buffer.html#buffer_buffers_and_typedarray): 'Bufferオブジェクトのメモリは、共有されていないTypedArrayにコピーされます.' –

関連する問題