2014-02-17 3 views
0

В OpenGL ES можно ли звонить один за другим glReadPixels и glDrawArrays на FBO? Проблема, с которой я сталкиваюсь, заключается в том, что я получаю изображение искаженным.Вызов нескольких glReadPixels & glDrawArrays на FBO, в Opengl ES

Пример кода:

// 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); 

ответ

0

Вызов eglSwapBuffers() требуется от рендеринга с glDrawArrays() и чтение с glReadPixels(). Это связано с тем, что большинство графических процессоров OpenGL ES выполняют отложенную рендеринг на основе плитки. Эта статья должна помочь:

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