GLuint fbo,texture;
BOOL fbGenerated = false;
LLRenderTarget target;
void render_offscreen_fbo(){
if(!fbGenerated){
fbGenerated = TRUE;
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, 256, 256, 0, GL_RGB, GL_UNSIGNED_INT, NULL);
//glGenerateMipmapEXT(GL_TEXTURE_2D);
glGenFramebuffersEXT(1, &fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texture, 0);
if(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)!=GL_FRAMEBUFFER_COMPLETE_EXT)
{
cout<<"The fbo is not complete"<<endl;
cout<<"Error: "<<glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT)<<endl;
}
}
//bind the FBO, and the associated texture.
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glClearColor(0.0, 0.0, 1.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glDisable(GL_TEXTURE_2D);
glPushAttrib(GL_VIEWPORT_BIT);
glViewport(0, 0, 256, 256);
glColor4f(1.0, 1.0, 0.0, 0.0);
glBegin(GL_QUADS);
glVertex2f(0.5, 0.5);
glVertex2f(0.5, -0.5);
glVertex2f(-0.5, -0.5);
glVertex2f(-0.5, 0.5);
glEnd();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glClearColor(0.0, 1.0, 0.0, 0.0);
glEnable(GL_SCISSOR_TEST);
glScissor(0,0,256,256);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glColor4f(1.0, 1.0, 1.0, 0.0);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex2f(1.0, 1.0);
glTexCoord2f(0.0, 1.0); glVertex2f(1.0, -1.0);
glTexCoord2f(1.0, 1.0); glVertex2f(-1.0, -1.0);
glTexCoord2f(1.0, 0.0); glVertex2f(-1.0, 1.0);
glEnd();
glPopAttrib();
glDisable(GL_SCISSOR_TEST);
}
I am expecting a texture to be rendered with yellow quads.
But what I am getting is a green screen?
Any help?