[OpenGL ES 3.0] Frame Buffer Object with Texture format set to GL_LUMINANCE issues

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

[OpenGL ES 3.0] Frame Buffer Object with Texture format set to GL_LUMINANCE issues

Jump to solution
1,400 Views
anthonygonin
Contributor II

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

Code :
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 :

Code :
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.

0 Kudos
1 Solution
1,066 Views
anthonygonin
Contributor II

GL_LUMINANCE is not a color renderable format in OpenGL ES 3.0. The specification states in Section 4.4.4 (Framebuffer Completeness):

An internal format is color-renderable if it is one of the formats from table 3.12 noted as color-renderable or if it is unsized format RGBA or RGB. No other formats, including compressed internal formats, are color-renderable.

Since GL_LUMINANCE is not included in this list, it is impossible to render to such a texture. I use GL_R8 instead.

View solution in original post

0 Kudos
1 Reply
1,067 Views
anthonygonin
Contributor II

GL_LUMINANCE is not a color renderable format in OpenGL ES 3.0. The specification states in Section 4.4.4 (Framebuffer Completeness):

An internal format is color-renderable if it is one of the formats from table 3.12 noted as color-renderable or if it is unsized format RGBA or RGB. No other formats, including compressed internal formats, are color-renderable.

Since GL_LUMINANCE is not included in this list, it is impossible to render to such a texture. I use GL_R8 instead.

0 Kudos