Hi, there.
attached is my code for FBO.
[b]
// declare fbo
static GLuint PP_FBO = 0;
static GLuint PP_PING_TEX = 0;
static int currentShaderProgram = 0;
// init fbo
if( 0 == PP_PING_TEX)
{
glGenTextures(1, & PP_PING_TEX);
glBindTexture(GL_TEXTURE_2D, PP_PING_TEX);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
//glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
//glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
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_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, 256, 256, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, NULL);
}
if( 0 == PP_FBO)
{
glGenFramebuffersEXT(1, & PP_FBO);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, PP_FBO);
// Attach Texture to Framebuffer Color Buffer
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT , GL_TEXTURE_2D, PP_PING_TEX, 0);
GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
assert(status == GL_FRAMEBUFFER_COMPLETE_EXT);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}
//use fbo
glUseProgramObjectARB(0);
// render to buffer
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, PP_FBO);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, PP_PING_TEX, 0);
glDrawBuffer( GL_COLOR_ATTACHMENT0_EXT);
// save current attribute
glPushAttrib(GL_VIEWPORT_BIT);
// set for fbo rendering
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(0.0, 256.0, 0.0, 256.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glViewport(0, 0, 256, 256 );
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, myTextureName);
// first pass
//glClearColor(1.0,0.0,0.0,0.0);
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f( 0.0, 0.0);
glTexCoord2f(1.0f, 0.0f); glVertex2f( 256.0, 0.0);
glTexCoord2f(1.0f, 1.0f); glVertex2f( 256.0 , 256.0);
glTexCoord2f(0.0f, 1.0f); glVertex2f( 0.0, 256.0);
glEnd();
unsigned char result[256*256];
glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
glReadPixels(0, 0, 256,256,GL_LUMINANCE,GL_UNSIGNED_BYTE,result);
for( int i = 0; i < 256; i++)
{
for( int j = 0; j < 256; j++)
{
int value = (int) result[i*256+j];
if( value )
{
cout<< (int) result[i*256+j]<<"|";
}
}
}
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopAttrib();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
[/b]
[/b][/QUOTE]
Please take a look. The problem is, seems nothing is wrote to attachment( nothing printed out). And if I enable the two line after "//first pass", I got all 255s.
really out of my mind. can you please give a clue?
tks