Hi all,
I'm working with OpenGL ES 3.0 on the imx6q sabreSD.
Here is my problem : I would like to render 2 images offscreen (which come from previous rendering) and then blend them together with a special algorithm. My first image/texture is RGB and the second one is in grayscale, so I only got the luminance.
I think the best way to achieve my goal is to use Frame Buffer Object. So I create one FBO for the first image, then I associate to that FBO a new texture which will received the rendering output. The texture's format is GL_RGB and it works fine, my first FBO contains the rendering in its texture.
Then I do the same with the second image which its format is GL_LUMINANCE. But in the draw function, when I bind to this FrameBuffer and check the Status I got the error GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT. And if I change the texture to RGB it works.
But for the blending I need to access to the luminance and not the rgb component of my image.
Do you have any solutions?
Here is my code :
1 - Creation of the Frame Buffer Object and texture
glGenFramebuffers(1, &m_uiFrameBufferObject); glBindFramebuffer(GL_FRAMEBUFFER, m_uiFrameBufferObject); glGenTextures(1, &m_uiTextureId[1]); glBindTexture(GL_TEXTURE_2D, m_uiTextureId[1]); glTexImage2D( GL_TEXTURE_2D, 0, GL_LUMINANCE, 1280, 960, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, nullptr); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_uiTextureId[1], 0); glDrawBuffers(1, attachments); //GL_COLOR_ATTACHMENT0
Then in the draw function :
glBindFramebuffer(GL_FRAMEBUFFER, m_uiFrameBufferObject); if( glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT ) { // I go there } glViewport(0, 0, 1280, 960); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(m_ProgCamera.GetHandle()); glVertexAttribPointer(0, 3, GL_FLOAT, 0, 0, vVertices); glEnableVertexAttribArray(0); // Bind the color attributes glVertexAttribPointer(1, 3, GL_FLOAT, 0, 0, g_vertexColors); glEnableVertexAttribArray(1); glVertexAttribPointer(2, 2, GL_FLOAT, 0, 0, g_vertexTexCoords); glEnableVertexAttribArray(2); // Select Our Texture glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, m_textureCamera.GetHandle()); glDrawArrays( GL_TRIANGLES, 0, 6 ); // Cleanup glDisableVertexAttribArray(0); glDisableVertexAttribArray(1); glDisableVertexAttribArray(2);
Thanks for your time.
Solved! Go to Solution.
GL_LUMINANCE is not a color renderable format in OpenGL ES 3.0. The specification states in Section 4.4.4 (Framebuffer Completeness):
Since GL_LUMINANCE is not included in this list, it is impossible to render to such a texture. I use GL_R8 instead.
GL_LUMINANCE is not a color renderable format in OpenGL ES 3.0. The specification states in Section 4.4.4 (Framebuffer Completeness):
Since GL_LUMINANCE is not included in this list, it is impossible to render to such a texture. I use GL_R8 instead.