Я использую (слегка измененную версию) mmap в electron для обмена памятью между двумя различными процессами. Затем я использую эту память в виде 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 с данными буфера без необходимости копировать его содержимое в новый массив?
Я не знал, что вы можете передать узел :: Buffer to gl.texImage2D. Но если это первая работа, зачем вам ее копировать в Uint8Array для обновления? – pleup
Я работаю в первый раз, но он не обновляется с новой информацией в буфере. Информация, хранящаяся в буфере, изменяется, потому что это в основном разделяемая память, но почему-то texImage2D этого не понимает. –