From e83aa52d4f1ba778f90ebea986169b0559a4e731 Mon Sep 17 00:00:00 2001 From: Codes4Fun Date: Sun, 23 Oct 2016 18:55:16 -0700 Subject: [PATCH 1/2] Fix for Stereoscopic 3D modes. A lot of places using glConfig.nativeScreenWidth, when they should be calling renderSystem->GetWidth() (and height equivalent) which take into account stereoscopic 3d modes. --- neo/renderer/Framebuffer.cpp | 76 +++++++++++++++++--------------- neo/renderer/tr_backend_draw.cpp | 38 ++++++++-------- 2 files changed, 60 insertions(+), 54 deletions(-) diff --git a/neo/renderer/Framebuffer.cpp b/neo/renderer/Framebuffer.cpp index a2877302..4ccb430e 100644 --- a/neo/renderer/Framebuffer.cpp +++ b/neo/renderer/Framebuffer.cpp @@ -96,8 +96,11 @@ void Framebuffer::Init() } // HDR + + int screenWidth = renderSystem->GetWidth(); + int screenHeight = renderSystem->GetHeight(); - globalFramebuffers.hdrFBO = new Framebuffer( "_hdr", glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalFramebuffers.hdrFBO = new Framebuffer( "_hdr", screenWidth, screenHeight ); globalFramebuffers.hdrFBO->Bind(); #if defined(USE_HDR_MSAA) @@ -123,7 +126,7 @@ void Framebuffer::Init() // HDR no MSAA #if defined(USE_HDR_MSAA) - globalFramebuffers.hdrNonMSAAFBO = new Framebuffer( "_hdrNoMSAA", glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalFramebuffers.hdrNonMSAAFBO = new Framebuffer( "_hdrNoMSAA", screenWidth, screenHeight ); globalFramebuffers.hdrNonMSAAFBO->Bind(); globalFramebuffers.hdrNonMSAAFBO->AddColorBuffer( GL_RGBA16F, 0 ); @@ -146,7 +149,7 @@ void Framebuffer::Init() for( int i = 0; i < MAX_BLOOM_BUFFERS; i++ ) { - globalFramebuffers.bloomRenderFBO[i] = new Framebuffer( va( "_bloomRender%i", i ), glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalFramebuffers.bloomRenderFBO[i] = new Framebuffer( va( "_bloomRender%i", i ), screenWidth, screenHeight ); globalFramebuffers.bloomRenderFBO[i]->Bind(); globalFramebuffers.bloomRenderFBO[i]->AddColorBuffer( GL_RGBA8, 0 ); globalFramebuffers.bloomRenderFBO[i]->AttachImage2D( GL_TEXTURE_2D, globalImages->bloomRenderImage[i], 0 ); @@ -157,7 +160,7 @@ void Framebuffer::Init() for( int i = 0; i < MAX_SSAO_BUFFERS; i++ ) { - globalFramebuffers.ambientOcclusionFBO[i] = new Framebuffer( va( "_aoRender%i", i ), glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalFramebuffers.ambientOcclusionFBO[i] = new Framebuffer( va( "_aoRender%i", i ), screenWidth, screenHeight ); globalFramebuffers.ambientOcclusionFBO[i]->Bind(); globalFramebuffers.ambientOcclusionFBO[i]->AddColorBuffer( GL_RGBA8, 0 ); globalFramebuffers.ambientOcclusionFBO[i]->AttachImage2D( GL_TEXTURE_2D, globalImages->ambientOcclusionImage[i], 0 ); @@ -168,7 +171,7 @@ void Framebuffer::Init() for( int i = 0; i < MAX_HIERARCHICAL_ZBUFFERS; i++ ) { - globalFramebuffers.csDepthFBO[i] = new Framebuffer( va( "_csz%i", i ), glConfig.nativeScreenWidth / ( 1 << i ), glConfig.nativeScreenHeight / ( 1 << i ) ); + globalFramebuffers.csDepthFBO[i] = new Framebuffer( va( "_csz%i", i ), screenWidth / ( 1 << i ), screenHeight / ( 1 << i ) ); globalFramebuffers.csDepthFBO[i]->Bind(); globalFramebuffers.csDepthFBO[i]->AddColorBuffer( GL_R32F, 0 ); globalFramebuffers.csDepthFBO[i]->AttachImage2D( GL_TEXTURE_2D, globalImages->hierarchicalZbufferImage, 0, i ); @@ -177,7 +180,7 @@ void Framebuffer::Init() // GEOMETRY BUFFER - //globalFramebuffers.geometryBufferFBO = new Framebuffer( "_gbuffer", glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + //globalFramebuffers.geometryBufferFBO = new Framebuffer( "_gbuffer", screenWidth, screenHeight ); //globalFramebuffers.geometryBufferFBO->Bind(); //globalFramebuffers.geometryBufferFBO->AddColorBuffer( GL_RGBA8, 0 ); //globalFramebuffers.geometryBufferFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->currentNormalsImage, 0 ); @@ -185,13 +188,13 @@ void Framebuffer::Init() // SMAA - globalFramebuffers.smaaEdgesFBO = new Framebuffer( "_smaaEdges", glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalFramebuffers.smaaEdgesFBO = new Framebuffer( "_smaaEdges", screenWidth, screenHeight ); globalFramebuffers.smaaEdgesFBO->Bind(); globalFramebuffers.smaaEdgesFBO->AddColorBuffer( GL_RGBA8, 0 ); globalFramebuffers.smaaEdgesFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->smaaEdgesImage, 0 ); globalFramebuffers.smaaEdgesFBO->Check(); - globalFramebuffers.smaaBlendFBO = new Framebuffer( "_smaaBlend", glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalFramebuffers.smaaBlendFBO = new Framebuffer( "_smaaBlend", screenWidth, screenHeight ); globalFramebuffers.smaaBlendFBO->Bind(); globalFramebuffers.smaaBlendFBO->AddColorBuffer( GL_RGBA8, 0 ); globalFramebuffers.smaaBlendFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->smaaBlendImage, 0 ); @@ -202,26 +205,29 @@ void Framebuffer::Init() void Framebuffer::CheckFramebuffers() { - if( globalFramebuffers.hdrFBO->GetWidth() != glConfig.nativeScreenWidth || globalFramebuffers.hdrFBO->GetHeight() != glConfig.nativeScreenHeight ) + int screenWidth = renderSystem->GetWidth(); + int screenHeight = renderSystem->GetHeight(); + + if( globalFramebuffers.hdrFBO->GetWidth() != screenWidth || globalFramebuffers.hdrFBO->GetHeight() != screenHeight ) { Unbind(); // HDR - globalImages->currentRenderHDRImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); - globalImages->currentDepthImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalImages->currentRenderHDRImage->Resize( screenWidth, screenHeight ); + globalImages->currentDepthImage->Resize( screenWidth, screenHeight ); #if defined(USE_HDR_MSAA) if( r_multiSamples.GetBool() ) { - globalImages->currentRenderHDRImageNoMSAA->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalImages->currentRenderHDRImageNoMSAA->Resize( screenWidth, screenHeight ); globalFramebuffers.hdrFBO->Bind(); globalFramebuffers.hdrFBO->AttachImage2D( GL_TEXTURE_2D_MULTISAMPLE, globalImages->currentRenderHDRImage, 0 ); globalFramebuffers.hdrFBO->AttachImageDepth( GL_TEXTURE_2D_MULTISAMPLE, globalImages->currentDepthImage ); globalFramebuffers.hdrFBO->Check(); - globalFramebuffers.hdrNonMSAAFBO->width = glConfig.nativeScreenWidth; - globalFramebuffers.hdrNonMSAAFBO->height = glConfig.nativeScreenHeight; + globalFramebuffers.hdrNonMSAAFBO->width = screenWidth; + globalFramebuffers.hdrNonMSAAFBO->height = screenHeight; } else #endif @@ -232,12 +238,12 @@ void Framebuffer::CheckFramebuffers() globalFramebuffers.hdrFBO->Check(); } - globalFramebuffers.hdrFBO->width = glConfig.nativeScreenWidth; - globalFramebuffers.hdrFBO->height = glConfig.nativeScreenHeight; + globalFramebuffers.hdrFBO->width = screenWidth; + globalFramebuffers.hdrFBO->height = screenHeight; // HDR quarter /* - globalImages->currentRenderHDRImageQuarter->Resize( glConfig.nativeScreenWidth / 4, glConfig.nativeScreenHeight / 4 ); + globalImages->currentRenderHDRImageQuarter->Resize( screenWidth / 4, screenHeight / 4 ); globalFramebuffers.hdrQuarterFBO->Bind(); globalFramebuffers.hdrQuarterFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->currentRenderHDRImageQuarter, 0 ); @@ -248,10 +254,10 @@ void Framebuffer::CheckFramebuffers() for( int i = 0; i < MAX_BLOOM_BUFFERS; i++ ) { - globalImages->bloomRenderImage[i]->Resize( glConfig.nativeScreenWidth / 4, glConfig.nativeScreenHeight / 4 ); + globalImages->bloomRenderImage[i]->Resize( screenWidth / 4, screenHeight / 4 ); - globalFramebuffers.bloomRenderFBO[i]->width = glConfig.nativeScreenWidth / 4; - globalFramebuffers.bloomRenderFBO[i]->height = glConfig.nativeScreenHeight / 4; + globalFramebuffers.bloomRenderFBO[i]->width = screenWidth / 4; + globalFramebuffers.bloomRenderFBO[i]->height = screenHeight / 4; globalFramebuffers.bloomRenderFBO[i]->Bind(); globalFramebuffers.bloomRenderFBO[i]->AttachImage2D( GL_TEXTURE_2D, globalImages->bloomRenderImage[i], 0 ); @@ -262,10 +268,10 @@ void Framebuffer::CheckFramebuffers() for( int i = 0; i < MAX_SSAO_BUFFERS; i++ ) { - globalImages->ambientOcclusionImage[i]->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalImages->ambientOcclusionImage[i]->Resize( screenWidth, screenHeight ); - globalFramebuffers.ambientOcclusionFBO[i]->width = glConfig.nativeScreenWidth; - globalFramebuffers.ambientOcclusionFBO[i]->height = glConfig.nativeScreenHeight; + globalFramebuffers.ambientOcclusionFBO[i]->width = screenWidth; + globalFramebuffers.ambientOcclusionFBO[i]->height = screenHeight; globalFramebuffers.ambientOcclusionFBO[i]->Bind(); globalFramebuffers.ambientOcclusionFBO[i]->AttachImage2D( GL_TEXTURE_2D, globalImages->ambientOcclusionImage[i], 0 ); @@ -274,12 +280,12 @@ void Framebuffer::CheckFramebuffers() // HIERARCHICAL Z BUFFER - globalImages->hierarchicalZbufferImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalImages->hierarchicalZbufferImage->Resize( screenWidth, screenHeight ); for( int i = 0; i < MAX_HIERARCHICAL_ZBUFFERS; i++ ) { - globalFramebuffers.csDepthFBO[i]->width = glConfig.nativeScreenWidth / ( 1 << i ); - globalFramebuffers.csDepthFBO[i]->height = glConfig.nativeScreenHeight / ( 1 << i ); + globalFramebuffers.csDepthFBO[i]->width = screenWidth / ( 1 << i ); + globalFramebuffers.csDepthFBO[i]->height = screenHeight / ( 1 << i ); globalFramebuffers.csDepthFBO[i]->Bind(); globalFramebuffers.csDepthFBO[i]->AttachImage2D( GL_TEXTURE_2D, globalImages->hierarchicalZbufferImage, 0, i ); @@ -288,10 +294,10 @@ void Framebuffer::CheckFramebuffers() // GEOMETRY BUFFER - //globalImages->currentNormalsImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + //globalImages->currentNormalsImage->Resize( screenWidth, screenHeight ); - //globalFramebuffers.geometryBufferFBO->width = glConfig.nativeScreenWidth; - //globalFramebuffers.geometryBufferFBO->height = glConfig.nativeScreenHeight; + //globalFramebuffers.geometryBufferFBO->width = screenWidth; + //globalFramebuffers.geometryBufferFBO->height = screenHeight; //globalFramebuffers.geometryBufferFBO->Bind(); //globalFramebuffers.geometryBufferFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->currentNormalsImage, 0 ); @@ -299,19 +305,19 @@ void Framebuffer::CheckFramebuffers() // SMAA - globalImages->smaaEdgesImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalImages->smaaEdgesImage->Resize( screenWidth, screenHeight ); - globalFramebuffers.smaaEdgesFBO->width = glConfig.nativeScreenWidth; - globalFramebuffers.smaaEdgesFBO->height = glConfig.nativeScreenHeight; + globalFramebuffers.smaaEdgesFBO->width = screenWidth; + globalFramebuffers.smaaEdgesFBO->height = screenHeight; globalFramebuffers.smaaEdgesFBO->Bind(); globalFramebuffers.smaaEdgesFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->smaaEdgesImage, 0 ); globalFramebuffers.smaaEdgesFBO->Check(); - globalImages->smaaBlendImage->Resize( glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalImages->smaaBlendImage->Resize( screenWidth, screenHeight ); - globalFramebuffers.smaaBlendFBO->width = glConfig.nativeScreenWidth; - globalFramebuffers.smaaBlendFBO->height = glConfig.nativeScreenHeight; + globalFramebuffers.smaaBlendFBO->width = screenWidth; + globalFramebuffers.smaaBlendFBO->height = screenHeight; globalFramebuffers.smaaBlendFBO->Bind(); globalFramebuffers.smaaBlendFBO->AttachImage2D( GL_TEXTURE_2D, globalImages->smaaBlendImage, 0 ); diff --git a/neo/renderer/tr_backend_draw.cpp b/neo/renderer/tr_backend_draw.cpp index 1487acff..f6c2a6d8 100644 --- a/neo/renderer/tr_backend_draw.cpp +++ b/neo/renderer/tr_backend_draw.cpp @@ -4804,10 +4804,10 @@ static void RB_SSAO( const viewDef_t* viewDef ) } float screenCorrectionParm[4]; - screenCorrectionParm[0] = 1.0f / glConfig.nativeScreenWidth; - screenCorrectionParm[1] = 1.0f / glConfig.nativeScreenHeight; - screenCorrectionParm[2] = glConfig.nativeScreenWidth; - screenCorrectionParm[3] = glConfig.nativeScreenHeight; + screenCorrectionParm[0] = 1.0f / screenWidth; + screenCorrectionParm[1] = 1.0f / screenHeight; + screenCorrectionParm[2] = screenWidth; + screenCorrectionParm[3] = screenHeight; SetFragmentParm( RENDERPARM_SCREENCORRECTIONFACTOR, screenCorrectionParm ); // rpScreenCorrectionFactor #if 0 @@ -5054,10 +5054,10 @@ static void RB_SSGI( const viewDef_t* viewDef ) } float screenCorrectionParm[4]; - screenCorrectionParm[0] = 1.0f / glConfig.nativeScreenWidth; - screenCorrectionParm[1] = 1.0f / glConfig.nativeScreenHeight; - screenCorrectionParm[2] = glConfig.nativeScreenWidth; - screenCorrectionParm[3] = glConfig.nativeScreenHeight; + screenCorrectionParm[0] = 1.0f / screenWidth; + screenCorrectionParm[1] = 1.0f / screenHeight; + screenCorrectionParm[2] = screenWidth; + screenCorrectionParm[3] = screenHeight; SetFragmentParm( RENDERPARM_SCREENCORRECTIONFACTOR, screenCorrectionParm ); // rpScreenCorrectionFactor #if 0 @@ -5429,8 +5429,8 @@ void RB_DrawViewInternal( const viewDef_t* viewDef, const int stereoEye ) /* glBindFramebuffer( GL_READ_FRAMEBUFFER, globalFramebuffers.hdrFBO->GetFramebuffer() ); glBindFramebuffer( GL_DRAW_FRAMEBUFFER, globalFramebuffers.hdrQuarterFBO->GetFramebuffer() ); - glBlitFramebuffer( 0, 0, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, - 0, 0, glConfig.nativeScreenWidth * 0.25f, glConfig.nativeScreenHeight * 0.25f, + glBlitFramebuffer( 0, 0, renderSystem->GetWidth(), renderSystem->GetHeight(), + 0, 0, renderSystem->GetWidth() * 0.25f, renderSystem->GetHeight() * 0.25f, GL_COLOR_BUFFER_BIT, GL_LINEAR ); */ @@ -5440,15 +5440,15 @@ void RB_DrawViewInternal( const viewDef_t* viewDef, const int stereoEye ) { glBindFramebuffer( GL_READ_FRAMEBUFFER, globalFramebuffers.hdrFBO->GetFramebuffer() ); glBindFramebuffer( GL_DRAW_FRAMEBUFFER, globalFramebuffers.hdrNonMSAAFBO->GetFramebuffer() ); - glBlitFramebuffer( 0, 0, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, - 0, 0, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, + glBlitFramebuffer( 0, 0, renderSystem->GetWidth(), renderSystem->GetHeight(), + 0, 0, renderSystem->GetWidth(), renderSystem->GetHeight(), GL_COLOR_BUFFER_BIT, GL_LINEAR ); // TODO resolve to 1x1 glBindFramebuffer( GL_READ_FRAMEBUFFER_EXT, globalFramebuffers.hdrNonMSAAFBO->GetFramebuffer() ); glBindFramebuffer( GL_DRAW_FRAMEBUFFER_EXT, globalFramebuffers.hdr64FBO->GetFramebuffer() ); - glBlitFramebuffer( 0, 0, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, + glBlitFramebuffer( 0, 0, renderSystem->GetWidth(), renderSystem->GetHeight(), 0, 0, 64, 64, GL_COLOR_BUFFER_BIT, GL_LINEAR ); @@ -5458,7 +5458,7 @@ void RB_DrawViewInternal( const viewDef_t* viewDef, const int stereoEye ) { glBindFramebuffer( GL_READ_FRAMEBUFFER_EXT, globalFramebuffers.hdrFBO->GetFramebuffer() ); glBindFramebuffer( GL_DRAW_FRAMEBUFFER_EXT, globalFramebuffers.hdr64FBO->GetFramebuffer() ); - glBlitFramebuffer( 0, 0, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, + glBlitFramebuffer( 0, 0, renderSystem->GetWidth(), renderSystem->GetHeight(), 0, 0, 64, 64, GL_COLOR_BUFFER_BIT, GL_LINEAR ); @@ -5757,14 +5757,14 @@ void RB_PostProcess( const void* data ) * |output| */ - globalImages->smaaInputImage->CopyFramebuffer( 0, 0, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight ); + globalImages->smaaInputImage->CopyFramebuffer( 0, 0, screenWidth, screenHeight ); // set SMAA_RT_METRICS = rpScreenCorrectionFactor float screenCorrectionParm[4]; - screenCorrectionParm[0] = 1.0f / glConfig.nativeScreenWidth; - screenCorrectionParm[1] = 1.0f / glConfig.nativeScreenHeight; - screenCorrectionParm[2] = glConfig.nativeScreenWidth; - screenCorrectionParm[3] = glConfig.nativeScreenHeight; + screenCorrectionParm[0] = 1.0f / screenWidth; + screenCorrectionParm[1] = 1.0f / screenHeight; + screenCorrectionParm[2] = screenWidth; + screenCorrectionParm[3] = screenHeight; SetFragmentParm( RENDERPARM_SCREENCORRECTIONFACTOR, screenCorrectionParm ); // rpScreenCorrectionFactor globalFramebuffers.smaaEdgesFBO->Bind(); From 3241d087401861816a3a57abad2265a72457c2d2 Mon Sep 17 00:00:00 2001 From: Codes4Fun Date: Mon, 24 Oct 2016 15:58:43 -0700 Subject: [PATCH 2/2] Added UpdateStereo3DMode function. This is to consolidate how we update the glConfig.stereo3Dmode, and to update it before initializing the framebuffers so that they are initially allocated correctly and avoid framebuffers getting reallocated later. --- neo/renderer/Image_intrinsic.cpp | 14 +++++++------- neo/renderer/RenderSystem.cpp | 9 +-------- neo/renderer/RenderSystem_init.cpp | 21 ++++++++++++++++++++- neo/renderer/tr_local.h | 2 ++ 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/neo/renderer/Image_intrinsic.cpp b/neo/renderer/Image_intrinsic.cpp index b6695429..84bcb2b6 100644 --- a/neo/renderer/Image_intrinsic.cpp +++ b/neo/renderer/Image_intrinsic.cpp @@ -168,7 +168,7 @@ static void R_DepthImage( idImage* image ) #else int msaaSamples = 0; #endif - image->GenerateImage( NULL, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, TF_NEAREST, TR_CLAMP, TD_DEPTH, msaaSamples ); + image->GenerateImage( NULL, renderSystem->GetWidth(), renderSystem->GetHeight(), TF_NEAREST, TR_CLAMP, TD_DEPTH, msaaSamples ); // RB end } @@ -180,22 +180,22 @@ static void R_HDR_RGBA16FImage_ResNative( idImage* image ) #else int msaaSamples = 0; #endif - image->GenerateImage( NULL, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, TF_NEAREST, TR_CLAMP, TD_RGBA16F, msaaSamples ); + image->GenerateImage( NULL, renderSystem->GetWidth(), renderSystem->GetHeight(), TF_NEAREST, TR_CLAMP, TD_RGBA16F, msaaSamples ); } static void R_HDR_RGBA16FImage_ResNative_NoMSAA( idImage* image ) { - image->GenerateImage( NULL, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, TF_NEAREST, TR_CLAMP, TD_RGBA16F ); + image->GenerateImage( NULL, renderSystem->GetWidth(), renderSystem->GetHeight(), TF_NEAREST, TR_CLAMP, TD_RGBA16F ); } static void R_HDR_RGBA16FImage_ResQuarter( idImage* image ) { - image->GenerateImage( NULL, glConfig.nativeScreenWidth / 4, glConfig.nativeScreenHeight / 4, TF_NEAREST, TR_CLAMP, TD_RGBA16F ); + image->GenerateImage( NULL, renderSystem->GetWidth() / 4, renderSystem->GetHeight() / 4, TF_NEAREST, TR_CLAMP, TD_RGBA16F ); } static void R_HDR_RGBA16FImage_ResQuarter_Linear( idImage* image ) { - image->GenerateImage( NULL, glConfig.nativeScreenWidth / 4, glConfig.nativeScreenHeight / 4, TF_LINEAR, TR_CLAMP, TD_LOOKUP_TABLE_RGBA ); + image->GenerateImage( NULL, renderSystem->GetWidth() / 4, renderSystem->GetHeight() / 4, TF_LINEAR, TR_CLAMP, TD_LOOKUP_TABLE_RGBA ); } static void R_HDR_RGBA16FImage_Res64( idImage* image ) @@ -205,12 +205,12 @@ static void R_HDR_RGBA16FImage_Res64( idImage* image ) static void R_SMAAImage_ResNative( idImage* image ) { - image->GenerateImage( NULL, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, TF_LINEAR, TR_CLAMP, TD_LOOKUP_TABLE_RGBA ); + image->GenerateImage( NULL, renderSystem->GetWidth(), renderSystem->GetHeight(), TF_LINEAR, TR_CLAMP, TD_LOOKUP_TABLE_RGBA ); } static void R_HierarchicalZBufferImage_ResNative( idImage* image ) { - image->GenerateImage( NULL, glConfig.nativeScreenWidth, glConfig.nativeScreenHeight, TF_NEAREST_MIPMAP, TR_CLAMP, TD_R32F ); + image->GenerateImage( NULL, renderSystem->GetWidth(), renderSystem->GetHeight(), TF_NEAREST_MIPMAP, TR_CLAMP, TD_R32F ); } // RB end diff --git a/neo/renderer/RenderSystem.cpp b/neo/renderer/RenderSystem.cpp index 4fe75496..631db2fd 100644 --- a/neo/renderer/RenderSystem.cpp +++ b/neo/renderer/RenderSystem.cpp @@ -831,14 +831,7 @@ const emptyCommand_t* idRenderSystemLocal::SwapCommandBuffers_FinishCommandBuffe // possibly change the stereo3D mode // PC - if( glConfig.nativeScreenWidth == 1280 && glConfig.nativeScreenHeight == 1470 ) - { - glConfig.stereo3Dmode = STEREO3D_HDMI_720; - } - else - { - glConfig.stereo3Dmode = GetStereoScopicRenderingMode(); - } + UpdateStereo3DMode(); // prepare the new command buffer guiModel->BeginFrame(); diff --git a/neo/renderer/RenderSystem_init.cpp b/neo/renderer/RenderSystem_init.cpp index 7a572f79..d7ff7e19 100644 --- a/neo/renderer/RenderSystem_init.cpp +++ b/neo/renderer/RenderSystem_init.cpp @@ -2790,7 +2790,9 @@ void idRenderSystemLocal::Init() guiModel = new( TAG_RENDER ) idGuiModel; guiModel->Clear(); tr_guiModel = guiModel; // for DeviceContext fast path - + + UpdateStereo3DMode(); + globalImages->Init(); // RB begin @@ -3154,6 +3156,23 @@ bool idRenderSystemLocal::HasQuadBufferSupport() const return glConfig.stereoPixelFormatAvailable; } +/* +======================== +idRenderSystemLocal::UpdateStereo3DMode +======================== +*/ +void idRenderSystemLocal::UpdateStereo3DMode() +{ + if( glConfig.nativeScreenWidth == 1280 && glConfig.nativeScreenHeight == 1470 ) + { + glConfig.stereo3Dmode = STEREO3D_HDMI_720; + } + else + { + glConfig.stereo3Dmode = GetStereoScopicRenderingMode(); + } +} + /* ======================== idRenderSystemLocal::GetStereoScopicRenderingMode diff --git a/neo/renderer/tr_local.h b/neo/renderer/tr_local.h index 0a08f9e0..44183538 100644 --- a/neo/renderer/tr_local.h +++ b/neo/renderer/tr_local.h @@ -851,6 +851,8 @@ public: // internal functions idRenderSystemLocal(); ~idRenderSystemLocal(); + + void UpdateStereo3DMode(); void Clear(); void GetCroppedViewport( idScreenRect* viewport );