调用多个glReadPixels&在Opengl ES中的FBO上的glDrawArrays

时间:2014-02-17 03:25:58

标签: opengl-es fbo glreadpixels gldrawarrays

在OpenGL ES中,是否可以一个接一个地在FBO上调用glReadPixelsglDrawArrays? 我面临的问题是我的图像都是乱码。

示例代码:

// Activate Off-Screen FBO
glBindFramebuffer(GL_FRAMEBUFFER, fboHandle);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, textureHandle);
glViewport(0, 0, 640, 480);

// 1st Render
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(filter_A);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 640, 480, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgb_pixels_A);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glReadPixels(0, 0, 640, 480, GL_RGBA, GL_UNSIGNED_BYTE, pixels_A);

// 2st Render
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(filter_B);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 640, 480, 0, GL_RGBA, GL_UNSIGNED_BYTE, rgb_pixels_B);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glReadPixels(0, 0, 640, 480, GL_RGBA, GL_UNSIGNED_BYTE, pixels_B);

// Back to the screen FB
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glActiveTexture(GL_TEXTURE0);

1 个答案:

答案 0 :(得分:0)

在使用glDrawArrays()进行渲染和使用glReadPixels()进行读取之间,需要调用eglSwapBuffers()。这是因为大多数OpenGL ES GPU都基于区块的延迟渲染。本文应该有所帮助:

http://processors.wiki.ti.com/index.php/Render_to_Texture_with_OpenGL_ES