Hi,
I’m trying to create a renderable rectangular texture using FBO and GL_TEXTURE_RECTANGLE_NV extensions.
When I do that with regular GL_TEXTURE_2D target, all is OK, but in this case I have glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) != GL_FRAMEBUFFER_COMPLETE_EXT
If this can help, my source code is following:
// Create frame buffer
glGenFramebuffersEXT(1, &m_frameBuffer);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_frameBuffer);
CHECK_GL;
// Create texture
glGenTextures(1, &m_texture);
glEnable(GL_TEXTURE_RECTANGLE_NV);
glBindTexture(GL_TEXTURE_RECTANGLE_NV, m_texture);
glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB, TEX_SIZE, TEX_SIZE, 0, GL_RGB, GL_FLOAT, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// Create render buffer
glGenRenderbuffersEXT(1, &m_renderBuffer);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_renderBuffer);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, TEX_SIZE, TEX_SIZE);
// Attach render buffer and texture to fbo
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_TEXTURE_2D, m_texture, 0);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
GL_RENDERBUFFER_EXT, m_renderBuffer);
// Handle errors
GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
if (status != GL_FRAMEBUFFER_COMPLETE_EXT || glGetError() != GL_NO_ERROR)
{
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_TEXTURE_2D, 0, 0);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
GL_RENDERBUFFER_EXT, 0);
glBindTexture(GL_TEXTURE_RECTANGLE_NV, 0);
glDeleteTextures(1, &m_texture);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
glDeleteRenderbuffersEXT(1, &m_frameBuffer);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glDeleteFramebuffersEXT(1, &m_frameBuffer);
throw std::exception("Bad framebuffer.");
}
Thanks,
Peter