Hi people. I've had a tumultuous time with framebuffers in open gl 3.3. Once, in a n engine i managed to get them to work but alas I'm having problems again.
My Initialisation code is as follows, pretty standard stuff:
bool Framebuffer::InitFramebuffer(int height,int width,GLfloat magFilter,GLfloat minFilter,bool depth)
{
m_height = height;
m_width = width;
glGenTextures(1,&m_texHandle);
glBindTexture(GL_TEXTURE_2D,m_texHandle);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,minFilter);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,magFilter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
if(!depth)
{
glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,m_width,m_height,0,GL_RGB,GL_UNSIGNED_BYTE,NULL);
}
else
{
glTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT24,m_width,m_height,0,GL_DEPTH_COMPONENT,GL_UNSIGNED_BYTE,NULL);
}
glGenFramebuffers(1,&m_FBOhandle);
glBindFramebuffer(GL_FRAMEBUFFER,m_FBOhandle);
glGenRenderbuffers(1,&m_depthHandle);
glBindRenderbuffer(GL_RENDERBUFFER,m_depthHandle);
glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT24,m_width,m_height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,m_depthHandle);
if(!depth)
{
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,fbo->GetTextureHandle(),0);
GLenum drawBufs[] = {GL_COLOR_ATTACHMENT0};
glDrawBuffers(1,drawBufs);
}
else
{
glFramebufferTexture(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,m_texHandle,0);
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
}
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
{
std::cout<<"problem with framebuffer!";
return false;
}
else
{
std::cout<<"framebuffer ok! :)";
}
glBindFramebuffer(GL_FRAMEBUFFER,0);
return true;
}
The status check at the end is always ok. In the calling code I render a texture to a full screen quad and consequently to the framebuffer, and then try and render this stored texture to a full screen quad again, just a simple test. I've even run the code in gDebugger gl and checked the texture contents at runtime - the fb texture is a solid black. Please help me!
glBindFramebuffer(GL_FRAMEBUFFER,fbo->GetFrameBufferHandle());
glViewport(0,0,512,512);
glUseProgram(test->GetHandle());
glBindTexture(GL_TEXTURE_2D,myTex->m_handle);
test->SetUniform("tex",0);
quad->Draw();
//render text
glBindFramebuffer(GL_FRAMEBUFFER,0);
//glUseProgram(test->GetHandle());
glBindTexture(GL_TEXTURE_2D,fbo->GetTextureHandle());
test->SetUniform("tex",0);
quad->Draw();
glfwSwapBuffers();