FBO - Frame Buffer Object

Create a framebuffer texture

GLuint fb;
glGenFramebuffersEXT( 1, &fb );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fb );

glGenTextures( 1, &texId );
glBindTexture( GL_TEXTURE_2D, texId );
// glTexImage2D( GL_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_FLOAT, NULL );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL );

glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texId, 0 );

GLuint depth_rb;
glGenRenderbuffersEXT( 1, &depth_rb );
glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, depth_rb );
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, 256, 256 );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth_rb );

Output the rendering in a texture

glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fb );

Output the rendering back to the backbuffer

glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );

Rendering in several targets at the same time

void Init()
{
	...
	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_NV, texId0, 0 );
	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_RECTANGLE_NV, texId1, 0 );
	...
}

void Render()
{
	...
	const GLenum buffers[] =
	{
		GL_COLOR_ATTACHMENT0_EXT,
		GL_COLOR_ATTACHMENT1_EXT
	};
	glDrawBuffers( 2, buffers );
}

Main page

email : Sly