我有一个 WebGLTexture 对象。如何获取该纹理的像素(类似于 WebGL 的 readPixels,但用于纹理)?
我的一个想法是使用preserveDrawingBuffer=true 创建一个画布和一个WebGL 上下文,并在此画布上渲染我的纹理,使其显示2D 平面,然后使用readPixels。这种方法合理吗?有没有人有这个示例代码?
您可以尝试将纹理附加到帧缓冲区,然后在帧缓冲区上调用 readPixels。
在初始化时
// 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);
}
对于 format = gl.RGBA 的纹理,type = gl.UNSIGNED_BYTE canRead 应该始终为 true。对于其他格式和类型,canRead 可能是错误的。