Skip to main content
gamedev.net
🔒 Locked

Problem using render target with GL_FLOAT

Started by Alundra Sep 8, 2011 at 10:38 PM 0 replies 1.5k views
Original Post
Alundra
Alundra
Hi,
i'm trying to make a MRT who use 3 outputs.
I don't have any problem when i work with GL_RGBA but when i use one GL_FLOAT, i don't have good result.

R32F :
http://uppix.net/d/f/f/9f20fab6fe978b4044aad9bed68c1.jpg


CRenderTargetDeferred* CRenderer::CreateRenderTargetDeferred( const UInt32 Width, const UInt32 Height ) const
{
// Frame buffer object.
GLuint FrameBufferObject;
glGenFramebuffersEXT( 1, &FrameBufferObject );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, FrameBufferObject );

// Depth buffer.
GLuint DepthBuffer;
glGenRenderbuffersEXT( 1, &DepthBuffer );
glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, DepthBuffer );
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, Width, Height );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, DepthBuffer );

// Color render buffer.
GLuint ColorRB;
glGenFramebuffersEXT( 1, &ColorRB );
glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, ColorRB );
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_RGBA, Width, Height );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, ColorRB );

// Normals render buffer.
GLuint NormalsRB;
glGenRenderbuffersEXT( 1, &NormalsRB );
glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, NormalsRB );
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_RG16F, Width, Height );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_RENDERBUFFER_EXT, NormalsRB );

// Depth render buffer.
GLuint DepthRB;
glGenRenderbuffersEXT( 1, &DepthRB );
glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, DepthRB );
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_R32F, Width, Height );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_RENDERBUFFER_EXT, DepthRB );

// Texture array.
CArray< GLuint > Textures;

// Color texture.
GLuint ColorTexture;
glGenTextures( 1, &ColorTexture );
glBindTexture( GL_TEXTURE_2D, ColorTexture );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL );
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, ColorTexture, 0 );
Textures.Add( ColorTexture );

// Normals texture.
GLuint NormalsTexture;
glGenTextures( 1, &NormalsTexture );
glBindTexture( GL_TEXTURE_2D, NormalsTexture );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RG16F, Width, Height, 0, GL_RG, GL_FLOAT, NULL );
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, NormalsTexture, 0 );
Textures.Add( NormalsTexture );

// Depth texture.
GLuint DepthTexture;
glGenTextures( 1, &DepthTexture );
glBindTexture( GL_TEXTURE_2D, DepthTexture );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
glTexImage2D( GL_TEXTURE_2D, 0, GL_R32F, Width, Height, 0, GL_RED, GL_FLOAT, NULL );
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_TEXTURE_2D, DepthTexture, 0 );
Textures.Add( DepthTexture );

// Unbind frame buffer object.
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );

// Check if frame buffer object is correct.
if( glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT ) == GL_FRAMEBUFFER_COMPLETE_EXT )
return new CRenderTargetDeferred( Width, Height, FrameBufferObject, DepthBuffer, Textures, ColorRB, NormalsRB, DepthRB );
else
return NULL;
}


Thanks to help to find the bug.
Alundra
Alundra
UP

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.