From c158a16a93b049da002d2f4a28be78af9f1c0311 Mon Sep 17 00:00:00 2001 From: Robert Beckebans Date: Mon, 18 Jan 2016 23:21:53 +0100 Subject: [PATCH] Fixed rendering of mirrors --- neo/renderer/Framebuffer.cpp | 27 ++++++++++++--- neo/renderer/Framebuffer.h | 1 + neo/renderer/Image_intrinsic.cpp | 3 +- neo/renderer/tr_backend_draw.cpp | 57 ++++++++++++++++++++++---------- 4 files changed, 65 insertions(+), 23 deletions(-) diff --git a/neo/renderer/Framebuffer.cpp b/neo/renderer/Framebuffer.cpp index bb6bb690..a2877302 100644 --- a/neo/renderer/Framebuffer.cpp +++ b/neo/renderer/Framebuffer.cpp @@ -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 ); diff --git a/neo/renderer/Framebuffer.h b/neo/renderer/Framebuffer.h index 0ef432d5..4cf40807 100644 --- a/neo/renderer/Framebuffer.h +++ b/neo/renderer/Framebuffer.h @@ -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; }; diff --git a/neo/renderer/Image_intrinsic.cpp b/neo/renderer/Image_intrinsic.cpp index abd6f7b1..b6695429 100644 --- a/neo/renderer/Image_intrinsic.cpp +++ b/neo/renderer/Image_intrinsic.cpp @@ -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 ); diff --git a/neo/renderer/tr_backend_draw.cpp b/neo/renderer/tr_backend_draw.cpp index f684d1f8..5e015778 100644 --- a/neo/renderer/tr_backend_draw.cpp +++ b/neo/renderer/tr_backend_draw.cpp @@ -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