【发布时间】:2013-09-13 09:04:06
【问题描述】:
我在 Android 上使用 opengl es2.0 进行离屏处理。
我创建了一个渲染缓冲区,并将其附加到帧缓冲区 FBO,在渲染到 FBO 后,我尝试通过 getReadPixels() 方法从该 FBO 获取像素。但我一无所获。
代码如下:
GLuint resultFBO;// FBO
GLuint rboId; //render buffer id
glGenRenderbuffers(1, &rboId);
glBindRenderbuffer(GL_RENDERBUFFER, rboId);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, image_width, image_height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
glGenFramebuffers(1, &resultFBO);
glBindFramebuffer(GL_FRAMEBUFFER, resultFBO);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER, rboId);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (status == GL_FRAMEBUFFER_COMPLETE) {
//LOGH("Single FBO setup successfully.");
} else {
LOGH("Problem in setup FBO texture: %d .", status);
}
//After render to the FBO
glBindFramebuffer(GL_FRAMEBUFFER, resultFBO);
glReadPixels(0, 0, w, h, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, imageSetData);
【问题讨论】:
-
有什么理由将 16 位深度缓冲区读入 ubyte 数组?
-
@ChristianRau 我在调用 glRenderbufferStorage 时尝试使用 GL_DEPTH_COMPONENT,但这会因错误而失败。
-
好吧,那又怎样?
GL_DEPTH_COMPONENT16可能是个好主意,但为什么要将它读入 ubyte 数组呢? -
顺便问一下,"nothing"到底是什么?您如何检查
imageSetData的内容以及它实际包含的内容(因为它不能包含“nothing”)? -
@ChristianRau 实际上在我将数据传输到 imageSetData 之后,我会在屏幕上显示它。以前我渲染到纹理,并使用 getReadPixels(),我可以获取并查看图像。现在我要渲染到渲染缓冲区,getReadPixels() 方法不会将任何数据传输到我的 imageSetData。
标签: android opengl-es-2.0