Hi, Guys.
thanks first!
I want to use FBO to do some texture smoothing( ping-pong). The unit test is OK. But when I integrated the part to my app. I got something unexpected. please help! following are my code pieces:
int texW = myMaxTextureSize[0], texH = myMaxTextureSize[1];
// Initialize texture 1, bind to fbo
glGenTextures(1, & my_pp_tex[0]);
glBindTexture(GL_TEXTURE_2D, my_pp_tex[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
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_RGBA, texW, texH, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);
glBindTexture(GL_TEXTURE_2D, 0);
// Initialize texture 2, bind to fbo
glGenFramebuffersEXT(1, & my_fbo_tex);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, my_fbo_tex);
// Attach Texture to Framebuffer Color Buffer
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT , GL_TEXTURE_2D, my_pp_tex[0], 0);
// Attach Texture to Framebuffer Color Buffer
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT , GL_TEXTURE_2D, my_pp_tex[1], 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
// later..........::
// Using FBO
// render to buffer
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, my_fbo_tex);
glPushAttrib(GL_VIEWPORT_BIT);
glDisable(GL_DEPTH_TEST);
// draw, render myTextureName texture to FBO
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(-myMaxTextureSize[0]/2.0, myMaxTextureSize[0]/2.0,- myMaxTextureSize[1]/2.0, myMaxTextureSize[1]/2.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glViewport(0, 0, myMaxTextureSize[0],myMaxTextureSize[1]);
glEnable(GL_TEXTURE_2D);
glActiveTextureARB(GL_TEXTURE5_ARB);
glBindTexture(GL_TEXTURE_2D, myTextureName);
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
// do some fragment operation
//glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT);
// I don't think above line is needed, but without this line,I dot nothing. use it, I got something strange( not something like the input image)
glBegin(GL_QUADS );
glTexCoord2f(0.0f, 0.0f);
glVertex2f(-myMaxTextureSize[0]/2.0,-myMaxTextureSize[0]/2.0 );
glTexCoord2f(1.0f, 0.0f);
glVertex2f(myMaxTextureSize[0]/2.0 , 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex2f( myMaxTextureSize[0]/2.0, myMaxTextureSize[1]/2.0 );
glTexCoord2f(0.0f, 1.0f);
glVertex2f(0.0f, myMaxTextureSize[1]/2.0);
glEnd();
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glPopAttrib();
glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glActiveTextureARB(GL_TEXTURE0_ARB);
//BindTexture(GL_TEXTURE_2D, myTextureName); // use this line will give me correct result,
glBindTexture(GL_TEXTURE_2D, my_pp_tex[1]); // But I want to use this line for FBO, texture smoothing use shaders,