Чтение пикселей из текстуры WebGL

У меня есть объект WebGLTexture. Как получить пиксели этой текстуры (похожие на readPixels WebGL, но для текстуры)?

одна из моих идей-создать холст и контекст WebGL с preserveDrawingBuffer=true и отобразить мою текстуру на этом холсте, чтобы она показывала 2D flat, а затем использовать readPixels. Разумен ли такой подход? У кого-нибудь есть пример кода для этого?

1 ответов


Вы можете попробовать прикреплять текстуру к фреймбуферу и затем вызывая readPixels на буфере.

во время init

// make a framebuffer
fb = gl.createFramebuffer();

// make this the current frame buffer
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);

// attach the texture to the framebuffer.
gl.framebufferTexture2D(
    gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0,
    gl.TEXTURE_2D, texture, 0);

// check if you can read from this type of texture.
bool canRead = (gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE);

// Unbind the framebuffer
gl.bindFramebuffer(gl.FRAMEBUFFER, null);

во время

if (canRead) {
   // bind the framebuffer
   gl.bindFramebuffer(gl.FRAMEBUFFER, fb);

   // read the pixels
   gl.readPixels(......);

   // Unbind the framebuffer
   gl.bindFramebuffer(gl.FRAMEBUFFER, null);
}

для текстур формата = gl.RGBA, type = gl.UNSIGNED_BYTE canRead всегда должен быть true. Для других форматов и типов canRead может быть false.