Jump to content
  • Advertisement
Sign in to follow this  
carmellose

FBO and Render To Texture = no alpha ?

This topic is 3543 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

hi guys, i'm trying to do a simple RTT - render to texture - with a FBO - frame buffer object -. I can manage to do it, but it does not work whenever the texture has alpha : e.g. it seems the alpha is not copyed into the FBO. So the RTT works but wihtout the "alpha channel". Could you guys tell me how do i do an RTT with an FBO when my texture has alpha ? many thanks in advance.

Share this post


Link to post
Share on other sites
Advertisement
up

i've been trying to do the following, but no effect at all (i use a shader so that's why the scene rendering contains "passes") :


void DrawObject(void) {

glClear(GL_COLOR_BUFFER_BIT);

glLoadIdentity();

/* draw a simple triangle and bind texture coordinates */
glPushMatrix();

glBegin(GL_TRIANGLES);
glTexCoord3f(0, 0, -1);
glVertex3f(-0.8, 0.8, -1);

glTexCoord3f(1, 0, -1);
glVertex3f(0.8, 0.8, -1);

glTexCoord3f(0.5, 1, -1);
glVertex3f(0.0, -0.8, -1);
glEnd();

glPopMatrix();
}

void RenderToTexture (void) {

// create objects
glGenFramebuffersEXT(1, &myFBO);// frame buffer
glGenRenderbuffersEXT(1, &myRBF);// frame buffer
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, myFBO);

// initialize texture
glBindTexture(GL_TEXTURE_2D, TEX_SCENE_SOURCE_IMAGE );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8,
sourceW, sourceH, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

// attach texture to framebuffercolor buffer
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, TEX_SCENE_SOURCE_IMAGE, 0);

// initialize depth renderbuffer
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, myRBF);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA ,sourceW ,sourceH);

// attach renderbuffer to framebufferdepth buffer
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, myRBF);
CHECK_FRAMEBUFFER_STATUS();

//render to the FBO
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, myFBO);

// (draw something here, rendering to texture)
glPushAttrib(GL_VIEWPORT_BIT);
glViewport(0,0,sourceW,sourceH );
DrawObject();
glPopAttrib();

// render to the window, using the texture
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glBindTexture(GL_TEXTURE_2D, TEX_SCENE_SOURCE_IMAGE );


}
/*
* main routine to display openGL scene
* */

void DrawGLScene(void) {

CGpass pass;

if ( t++ == 0) {
printf("[+] Render To Texture ...\n");
RenderToTexture();
}

pass = cgGetFirstPass(cgTechnique);
while(pass) {
cgSetPassState(pass);

/* Draw the scene as a texture */
glBegin(GL_QUADS);
glTexCoord3f(0, 0, -1);
glVertex3f (-1,1 , -1);

glTexCoord3f(1, 0, -1);
glVertex3f (1, 1, -1);

glTexCoord3f(1, 1, -1);
glVertex3f (1, -1, -1);

glTexCoord3f(0, 1, -1);
glVertex3f (-1, -1, -1);
glEnd();

cgResetPassState(pass);
pass = cgGetNextPass(pass);
}

glPopMatrix();

glutSwapBuffers();
return;
}





any advice on that ?

thank you ...

[Edited by - carmellose on October 11, 2008 4:42:06 AM]

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!