我在electron中使用mmap(稍微修改後的版本)來在兩個不同的進程之間共享內存。然後,我使用這塊內存,在buffer的形式上傳WebGL的質地和我用它來畫的東西:強制從緩衝區重新加載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紋理,而不是每次都將其內容複製到新數組?
我不知道你可以傳遞一個node :: Buffer到gl.texImage2D。但是如果它第一次工作,爲什麼你需要將它複製到Uint8Array進行更新? – pleup
我第一次工作,但不會使用緩衝區中的新信息進行更新。存儲在緩衝區中的信息因爲基本上是共享內存而發生變化,但不知何故,texImage2D並沒有意識到這一點。 –