From 08f28edfb0566f5ef6a97c4650d5361c766dfb79 Mon Sep 17 00:00:00 2001 From: Robert Beckebans Date: Mon, 28 Dec 2015 23:44:22 +0100 Subject: [PATCH] Disabled HDR MSAA support in favor of SMAA --- neo/renderer/Framebuffer.cpp | 21 +++++++++++++-------- neo/renderer/Framebuffer.h | 2 ++ neo/renderer/Image.h | 2 ++ neo/renderer/Image_intrinsic.cpp | 10 ++++++++++ neo/renderer/Image_load.cpp | 2 ++ neo/renderer/tr_backend_draw.cpp | 4 ++++ 6 files changed, 33 insertions(+), 8 deletions(-) diff --git a/neo/renderer/Framebuffer.cpp b/neo/renderer/Framebuffer.cpp index 0e1b5246..9e35686b 100644 --- a/neo/renderer/Framebuffer.cpp +++ b/neo/renderer/Framebuffer.cpp @@ -100,6 +100,7 @@ void Framebuffer::Init() globalFramebuffers.hdrFBO = new Framebuffer( "_hdr", glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); globalFramebuffers.hdrFBO->Bind(); +#if defined(USE_HDR_MSAA) if( r_multiSamples.GetBool() ) { globalFramebuffers.hdrFBO->AddColorBuffer( GL_RGBA16F, 0, r_multiSamples.GetInteger() ); @@ -109,6 +110,7 @@ void Framebuffer::Init() globalFramebuffers.hdrFBO->AttachImageDepth( GL_TEXTURE_2D_MULTISAMPLE, globalImages->currentDepthImage ); } else +#endif { globalFramebuffers.hdrFBO->AddColorBuffer( GL_RGBA16F, 0 ); globalFramebuffers.hdrFBO->AddDepthBuffer( GL_DEPTH24_STENCIL8 ); @@ -120,7 +122,7 @@ void Framebuffer::Init() globalFramebuffers.hdrFBO->Check(); // HDR no MSAA - +#if defined(USE_HDR_MSAA) globalFramebuffers.hdrNonMSAAFBO = new Framebuffer( "_hdrNoMSAA", glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); globalFramebuffers.hdrNonMSAAFBO->Bind(); @@ -128,6 +130,7 @@ void Framebuffer::Init() globalFramebuffers.hdrNonMSAAFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->currentRenderHDRImageNoMSAA, 0 ); globalFramebuffers.hdrNonMSAAFBO->Check(); +#endif // HDR DOWNSCALE @@ -176,6 +179,7 @@ void Framebuffer::CheckFramebuffers() globalImages->currentRenderHDRImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); globalImages->currentDepthImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); +#if defined(USE_HDR_MSAA) if( r_multiSamples.GetBool() ) { globalImages->currentRenderHDRImageNoMSAA->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); @@ -189,6 +193,7 @@ void Framebuffer::CheckFramebuffers() globalFramebuffers.hdrNonMSAAFBO->height = glConfig.nativeScreenHeight; } else +#endif { globalFramebuffers.hdrFBO->Bind(); globalFramebuffers.hdrFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->currentRenderHDRImage, 0 ); @@ -222,25 +227,25 @@ void Framebuffer::CheckFramebuffers() } // SMAA - + globalImages->smaaEdgesImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); - + globalFramebuffers.smaaEdgesFBO->width = glConfig.nativeScreenWidth / 4; globalFramebuffers.smaaEdgesFBO->height = glConfig.nativeScreenHeight / 4; - + globalFramebuffers.smaaEdgesFBO->Bind(); globalFramebuffers.smaaEdgesFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->smaaEdgesImage, 0 ); globalFramebuffers.smaaEdgesFBO->Check(); - + globalImages->smaaBlendImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); - + globalFramebuffers.smaaBlendFBO->width = glConfig.nativeScreenWidth / 4; globalFramebuffers.smaaBlendFBO->height = glConfig.nativeScreenHeight / 4; - + globalFramebuffers.smaaBlendFBO->Bind(); globalFramebuffers.smaaBlendFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->smaaBlendImage, 0 ); globalFramebuffers.smaaBlendFBO->Check(); - + Unbind(); } } diff --git a/neo/renderer/Framebuffer.h b/neo/renderer/Framebuffer.h index 8e1f19f0..257b0c10 100644 --- a/neo/renderer/Framebuffer.h +++ b/neo/renderer/Framebuffer.h @@ -121,7 +121,9 @@ struct globalFramebuffers_t { Framebuffer* shadowFBO[MAX_SHADOWMAP_RESOLUTIONS]; Framebuffer* hdrFBO; +#if defined(USE_HDR_MSAA) Framebuffer* hdrNonMSAAFBO; +#endif // Framebuffer* hdrQuarterFBO; Framebuffer* hdr64FBO; Framebuffer* bloomRenderFBO[MAX_BLOOM_BUFFERS]; diff --git a/neo/renderer/Image.h b/neo/renderer/Image.h index aea69567..1f0d22b2 100644 --- a/neo/renderer/Image.h +++ b/neo/renderer/Image.h @@ -352,7 +352,9 @@ public: idImage* grainImage1; idImage* randomImage256; idImage* currentRenderHDRImage; +#if defined(USE_HDR_MSAA) idImage* currentRenderHDRImageNoMSAA; +#endif idImage* currentRenderHDRImageQuarter; idImage* currentRenderHDRImage64; idImage* bloomRender[2]; diff --git a/neo/renderer/Image_intrinsic.cpp b/neo/renderer/Image_intrinsic.cpp index a9c9ccdd..bd0e21b7 100644 --- a/neo/renderer/Image_intrinsic.cpp +++ b/neo/renderer/Image_intrinsic.cpp @@ -163,7 +163,11 @@ static void R_RGBA8LinearImage( idImage* image ) static void R_DepthImage( idImage* image ) { // RB: NULL data and MSAA support +#if defined(USE_HDR_MSAA) int msaaSamples = r_multiSamples.GetInteger(); +#else + int msaaSamples = 0; +#endif image->GenerateImage( NULL, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, TF_NEAREST, TR_CLAMP, TD_DEPTH, msaaSamples ); // RB end } @@ -171,7 +175,11 @@ static void R_DepthImage( idImage* image ) // RB begin static void R_HDR_RGBA16FImage_ResNative( idImage* image ) { +#if defined(USE_HDR_MSAA) int msaaSamples = r_multiSamples.GetInteger(); +#else + int msaaSamples = 0; +#endif image->GenerateImage( NULL, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, TF_NEAREST, TR_CLAMP, TD_RGBA16F, msaaSamples ); } @@ -833,7 +841,9 @@ void idImageManager::CreateIntrinsicImages() randomImage256 = globalImages->ImageFromFunction( "_random256", R_CreateRandom256Image ); currentRenderHDRImage = globalImages->ImageFromFunction( "_currentRenderHDR", R_HDR_RGBA16FImage_ResNative ); +#if defined(USE_HDR_MSAA) currentRenderHDRImageNoMSAA = globalImages->ImageFromFunction( "_currentRenderHDRNoMSAA", R_HDR_RGBA16FImage_ResNative_NoMSAA ); +#endif currentRenderHDRImageQuarter = globalImages->ImageFromFunction( "_currentRenderHDRQuarter", R_HDR_RGBA16FImage_ResQuarter ); currentRenderHDRImage64 = globalImages->ImageFromFunction( "_currentRenderHDR64", R_HDR_RGBA16FImage_Res64 ); diff --git a/neo/renderer/Image_load.cpp b/neo/renderer/Image_load.cpp index 0fbbde1a..19620d88 100644 --- a/neo/renderer/Image_load.cpp +++ b/neo/renderer/Image_load.cpp @@ -729,6 +729,7 @@ void idImage::CopyFramebuffer( int x, int y, int imageWidth, int imageHeight ) //if( backEnd.glState.currentFramebuffer != NULL && backEnd.glState.currentFramebuffer->IsMultiSampled() ) +#if defined(USE_HDR_MSAA) if( globalFramebuffers.hdrFBO->IsMultiSampled() ) { glBindFramebuffer( GL_READ_FRAMEBUFFER, globalFramebuffers.hdrFBO->GetFramebuffer() ); @@ -745,6 +746,7 @@ void idImage::CopyFramebuffer( int x, int y, int imageWidth, int imageHeight ) globalFramebuffers.hdrFBO->Bind(); } else +#endif { glCopyTexImage2D( target, 0, GL_RGBA16F, x, y, imageWidth, imageHeight, 0 ); } diff --git a/neo/renderer/tr_backend_draw.cpp b/neo/renderer/tr_backend_draw.cpp index 95340563..9f056a3a 100644 --- a/neo/renderer/tr_backend_draw.cpp +++ b/neo/renderer/tr_backend_draw.cpp @@ -4267,11 +4267,13 @@ static void RB_Tonemap( const viewDef_t* viewDef ) GL_SelectTexture( 0 ); +#if defined(USE_HDR_MSAA) if( r_multiSamples.GetInteger() > 0 ) { globalImages->currentRenderHDRImageNoMSAA->Bind(); } else +#endif { globalImages->currentRenderHDRImage->Bind(); } @@ -4672,6 +4674,7 @@ void RB_DrawViewInternal( const viewDef_t* viewDef, const int stereoEye ) GL_LINEAR ); */ +#if defined(USE_HDR_MSAA) if( r_multiSamples.GetInteger() > 0 ) { glBindFramebuffer( GL_READ_FRAMEBUFFER, globalFramebuffers.hdrFBO->GetFramebuffer() ); @@ -4690,6 +4693,7 @@ void RB_DrawViewInternal( const viewDef_t* viewDef, const int stereoEye ) GL_LINEAR ); } else +#endif { glBindFramebuffer( GL_READ_FRAMEBUFFER_EXT, globalFramebuffers.hdrFBO->GetFramebuffer() ); glBindFramebuffer( GL_DRAW_FRAMEBUFFER_EXT, globalFramebuffers.hdr64FBO->GetFramebuffer() );