Fixed rendering of mirrors

This commit is contained in:
Robert Beckebans 2016-01-18 23:21:53 +01:00
parent fb618feeca
commit c158a16a93
4 changed files with 65 additions and 23 deletions

View file

@ -175,6 +175,14 @@ void Framebuffer::Init()
globalFramebuffers.csDepthFBO[i]->Check();
}
// GEOMETRY BUFFER
//globalFramebuffers.geometryBufferFBO = new Framebuffer( "_gbuffer", glConfig.nativeScreenWidth, glConfig.nativeScreenHeight );
//globalFramebuffers.geometryBufferFBO->Bind();
//globalFramebuffers.geometryBufferFBO->AddColorBuffer( GL_RGBA8, 0 );
//globalFramebuffers.geometryBufferFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->currentNormalsImage, 0 );
//globalFramebuffers.geometryBufferFBO->Check();
// SMAA
globalFramebuffers.smaaEdgesFBO = new Framebuffer( "_smaaEdges", glConfig.nativeScreenWidth, glConfig.nativeScreenHeight );
@ -278,12 +286,23 @@ void Framebuffer::CheckFramebuffers()
globalFramebuffers.csDepthFBO[i]->Check();
}
// GEOMETRY BUFFER
//globalImages->currentNormalsImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight );
//globalFramebuffers.geometryBufferFBO->width = glConfig.nativeScreenWidth;
//globalFramebuffers.geometryBufferFBO->height = glConfig.nativeScreenHeight;
//globalFramebuffers.geometryBufferFBO->Bind();
//globalFramebuffers.geometryBufferFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->currentNormalsImage, 0 );
//globalFramebuffers.geometryBufferFBO->Check();
// SMAA
globalImages->smaaEdgesImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight );
globalFramebuffers.smaaEdgesFBO->width = glConfig.nativeScreenWidth / 4;
globalFramebuffers.smaaEdgesFBO->height = glConfig.nativeScreenHeight / 4;
globalFramebuffers.smaaEdgesFBO->width = glConfig.nativeScreenWidth;
globalFramebuffers.smaaEdgesFBO->height = glConfig.nativeScreenHeight;
globalFramebuffers.smaaEdgesFBO->Bind();
globalFramebuffers.smaaEdgesFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->smaaEdgesImage, 0 );
@ -291,8 +310,8 @@ void Framebuffer::CheckFramebuffers()
globalImages->smaaBlendImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight );
globalFramebuffers.smaaBlendFBO->width = glConfig.nativeScreenWidth / 4;
globalFramebuffers.smaaBlendFBO->height = glConfig.nativeScreenHeight / 4;
globalFramebuffers.smaaBlendFBO->width = glConfig.nativeScreenWidth;
globalFramebuffers.smaaBlendFBO->height = glConfig.nativeScreenHeight;
globalFramebuffers.smaaBlendFBO->Bind();
globalFramebuffers.smaaBlendFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->smaaBlendImage, 0 );

View file

@ -131,6 +131,7 @@ struct globalFramebuffers_t
Framebuffer* bloomRenderFBO[MAX_BLOOM_BUFFERS];
Framebuffer* ambientOcclusionFBO[MAX_SSAO_BUFFERS];
Framebuffer* csDepthFBO[MAX_HIERARCHICAL_ZBUFFERS];
// Framebuffer* geometryBufferFBO;
Framebuffer* smaaEdgesFBO;
Framebuffer* smaaBlendFBO;
};

View file

@ -868,7 +868,8 @@ void idImageManager::CreateIntrinsicImages()
smaaEdgesImage = globalImages->ImageFromFunction( "_smaaEdges", R_SMAAImage_ResNative );
smaaBlendImage = globalImages->ImageFromFunction( "_smaaBlend", R_SMAAImage_ResNative );
currentNormalsImage = ImageFromFunction( "_currentNormals", R_RGBA8Image );
currentNormalsImage = ImageFromFunction( "_currentNormals", R_SMAAImage_ResNative );
ambientOcclusionImage[0] = ImageFromFunction( "_ao0", R_SMAAImage_ResNative );
ambientOcclusionImage[1] = ImageFromFunction( "_ao1", R_SMAAImage_ResNative );

View file

@ -1793,10 +1793,15 @@ static void RB_AmbientPass( const drawSurf_t* const* drawSurfs, int numDrawSurfs
const bool hdrIsActive = ( r_useHDR.GetBool() && globalFramebuffers.hdrFBO != NULL && globalFramebuffers.hdrFBO->IsBound() );
//if( hdrIsActive && r_useSSLR.GetBool() )
//{
// Framebuffer::Unbind();
//}
/*
if( fillGbuffer )
{
globalFramebuffers.geometryBufferFBO->Bind();
glClearColor( 0, 0, 0, 0 );
glClear( GL_COLOR_BUFFER_BIT );
}
*/
renderLog.OpenMainBlock( MRB_AMBIENT_PASS );
renderLog.OpenBlock( "RB_AmbientPass" );
@ -1810,7 +1815,15 @@ static void RB_AmbientPass( const drawSurf_t* const* drawSurfs, int numDrawSurfs
// draw all the subview surfaces, which will already be at the start of the sorted list,
// with the general purpose path
//GL_State( GLS_DEFAULT );
GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE | GLS_DEPTHMASK | GLS_DEPTHFUNC_EQUAL );
//if( fillGbuffer )
{
GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ZERO | GLS_DEPTHMASK | GLS_DEPTHFUNC_EQUAL );
}
//else
//{
// GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE | GLS_DEPTHMASK | GLS_DEPTHFUNC_EQUAL );
//}
GL_Color( colorWhite );
@ -1874,7 +1887,7 @@ static void RB_AmbientPass( const drawSurf_t* const* drawSurfs, int numDrawSurfs
//else
{
#if 1
if( ( r_useSSAO.GetBool() || r_useSSGI.GetBool() ) && fillGbuffer )
if( fillGbuffer )
{
// fill geometry buffer with normal/roughness information
if( drawSurf->jointCache )
@ -2126,29 +2139,37 @@ static void RB_AmbientPass( const drawSurf_t* const* drawSurfs, int numDrawSurfs
renderLog.CloseBlock();
renderLog.CloseMainBlock();
if( ( r_useSSAO.GetBool() || r_useSSGI.GetBool() ) && fillGbuffer )
if( fillGbuffer )
{
GL_SelectTexture( 0 );
globalImages->currentNormalsImage->Bind();
// FIXME: this copies RGBA16F into _currentNormals if HDR is enabled
const idScreenRect& viewport = backEnd.viewDef->viewport;
globalImages->currentNormalsImage->CopyFramebuffer( viewport.x1, viewport.y1, viewport.GetWidth(), viewport.GetHeight() );
//if( r_ssgiDebug.GetInteger() != 1 )
//GL_Clear( true, false, false, STENCIL_SHADOW_TEST_VALUE, 0.0f, 0.0f, 0.0f, 1.0f, false );
/*
if( hdrIsActive )
{
GL_Clear( true, false, false, STENCIL_SHADOW_TEST_VALUE, 0.0f, 0.0f, 0.0f, 1.0f, false );
globalFramebuffers.hdrFBO->Bind();
}
//if( hdrIsActive )
//{
// globalFramebuffers.hdrFBO->Bind();
//}
renderProgManager.Unbind();
else
{
Framebuffer::Unbind();
}
*/
}
// unbind texture units
for( int i = 0; i < 7; i++ )
{
GL_SelectTexture( i );
globalImages->BindNull();
}
renderProgManager.Unbind();
}
// RB end