I am trying to use FBO but i am living some problems. I will show you my steps but first i will show my running screen ,so we can compare them. Like before fbo after fbo.
My running screen and Draw() function code:
glClearColor(0.5,0.5,0.5,1.0);
glLoadIdentity();
glTranslatef(0.0,0.0,-3.0);
glRotatef(0,0.0,1.0,0.0);
glUniform3f(glGetUniformLocation(mainShader->getProgramId(),"lightPos"),0,1,2);
mainShader->useShader();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
scene->draw(mainShader->getProgramId());
mainShader->delShader();
After I tried to add FBO :
Create FBO texture function:
unsigned int createTexture(int w,int h,bool isDepth=false)
{
unsigned int textureId;
glGenTextures(1,&textureId);
glBindTexture(GL_TEXTURE_2D,textureId);
glTexImage2D(GL_TEXTURE_2D,0,(!isDepth ? GL_RGBA8 : GL_DEPTH_COMPONENT),w,h,0,isDepth ? GL_DEPTH_COMPONENT : GL_RGBA,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);
int i;
i=glGetError();
if(i!=0)
{
std::cout << "Error happened while loading the texture: " << i << std::endl;
}
glBindTexture(GL_TEXTURE_2D,0);
return textureId;
}
Init() function :
void init()
{
glClearColor(0,0,0,1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(50,640.0/480.0,1,1000);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_DEPTH_TEST);
mainShader=new shader("vertex.vs","fragment.frag");
quadRenderShader=new shader("quadRender.vs","quadRender.frag");
scene=new meshLoader("test.blend");
renderTexture=createTexture(640,480);
depthTexture=createTexture(640,480,true);
glGenFramebuffers(1,&FBO);
glBindFramebuffer(GL_FRAMEBUFFER,FBO);
//GL_COLOR_ATTACHMENT0
//GL_DEPTH_ATTACHMENT
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,renderTexture,0);
glFramebufferTexture2D(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_TEXTURE_2D,depthTexture,0);
int i=glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(i!=GL_FRAMEBUFFER_COMPLETE)
{
std::cout << "Framebuffer is not OK, status=" << i << std::endl;
}
glBindFramebuffer(GL_FRAMEBUFFER,0);
}
And Draw() function:
void display()
{
//rendering to texture...
glClearColor(0.5,0.5,0.5,1.0);
glLoadIdentity();
glTranslatef(0.0,0.0,-3.0);
glRotatef(0,0.0,1.0,0.0);
glUniform3f(glGetUniformLocation(mainShader->getProgramId(),"lightPos"),0,1,2);
mainShader->useShader();
glBindFramebuffer(GL_FRAMEBUFFER,FBO);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
scene->draw(mainShader->getProgramId());
glBindFramebuffer(GL_FRAMEBUFFER,0);
mainShader->delShader();
glClearColor(0.0,0.0,0.0,1.0);
//render texture to screen
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
quadRenderShader->useShader();
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,depthTexture);
glUniform1i(glGetUniformLocation(quadRenderShader->getProgramId(),"texture"),0);
quad->draw(quadRenderShader->getProgramId());
quadRenderShader->delShader();
}
and Result only drawing last setup color (glClearColor) so black :
Result should be like in tutorial :
Note: I know tutorial monkey is purple but it is not problem.