Sign in to follow this  
easyBob0101

FBO problem.

Recommended Posts

easyBob0101    122
I'm trying to get FBOs setup and display a simple example of them. I'm trying to render a simple scene to a texture, and then render that texture onto a square. FBO setup:
//
	// set up FBO
	//
	// FBO
	glGenFramebuffersEXT(1, &FramebufferObject);
	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FramebufferObject);

	//glEnable (GL_TEXTURE_2D);
	// texture
	glGenTextures(1, &FramebufferImage);
	glBindTexture(GL_TEXTURE_2D, FramebufferImage);
	glTexImage2D(GL_TEXTURE_2D, 0, 3,  512, 512, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	//glDisable(GL_TEXTURE_2D);

	// render buffer
	glGenRenderbuffersEXT(1, &FramebufferRender);
	glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, FramebufferRender);
	glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, 512, 512);
	
	glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, FramebufferRender);
	glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, FramebufferImage, 0);
CheckFBOStatus ();


The CheckFBOStatus returns ok. Rendering:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear Screen And Depth Buffer
	glLoadIdentity();

	GLfloat r = SoundInfo->waveform [0][1] / 255.0;
	GLfloat g = SoundInfo->waveform [0][151] / 255.0;
	GLfloat b = SoundInfo->waveform [0][301] / 255.0;

	//
	// renders this to a texture (FBO)
	//
	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FramebufferObject);
	glPushAttrib(GL_VIEWPORT_BIT);
	glViewport(0,0,512, 512);

	glTranslatef(0.0f,0.0f,-6.0f);

	glBegin(GL_TRIANGLES);
		glColor3f(r,0.0f,0.0f);			// Set The Color To Red
		glVertex3f( 0.0f, 1.0f, 0.0f);			// Move Up One Unit From Center (Top Point

		glColor3f(0.0f,g,0.0f);			// Set The Color To Green
		glVertex3f(-1.0f,-1.0f, 0.0f);			// Left And Down One Unit (Bottom Left)

		glColor3f(0.0f,0,b);			// Set The Color To Blue
		glVertex3f( 1.0f,-1.0f, 0.0f);			// Right And Down One Unit (Bottom Right)
	glEnd();

	glPopAttrib();
	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
	//
	// end rendering to texture
	//

	// now render the texture
//	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear Screen And Depth Buffer
//	glLoadIdentity();

	glClearColor(0.5f, 0.5f, 0.5f, 0.5f);

	
	glTranslatef(0.0f,0.0f,-6.0f);
	glRotatef (rY,0,1,0);
	rY++;

	glEnable(GL_TEXTURE_2D);
	glBindTexture (GL_TEXTURE_2D, FramebufferImage);

	glBegin(GL_QUADS);
		glTexCoord2f(0.0f, 0.0f);
		glVertex3f(-3.0f, -3.0f,  0.0f);

		glTexCoord2f(1.0f, 0.0f);
		glVertex3f( 3.0f, -3.0f,  0.0f);

		glTexCoord2f(1.0f, 1.0f);
		glVertex3f( 3.0f,  3.0f,  0.0f);

		glTexCoord2f(0.0f, 1.0f);
		glVertex3f(-3.0f,  3.0f,  0.0f);
	glEnd();						// Done Drawing A Quad
	glDisable(GL_TEXTURE_2D);


It does render to a texture, and the texture does get rendered onto the square... But for some odd reason, it only renders the last color used to the FBO. So in this example, you only see a little bit of blue, when each corner of the triangle should have a different color. It's hard to find examples of how to get this working right. Anyone know why it's only rendering the last color used to the FBO? Shoot, I guess I should also ask if I'm even using FBOs correctly. -Chris

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this