Merge pull request #356 from Codes4Fun/StereoscopicFix

Fix for Stereoscopic 3D modes with HDR and SMAA.
This commit is contained in:
Robert Beckebans 2017-04-20 15:26:01 +02:00 committed by GitHub
commit bc8d5f1995
6 changed files with 90 additions and 70 deletions

View file

@ -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 );

View file

@ -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

View file

@ -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();

View file

@ -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

View file

@ -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();

View file

@ -851,6 +851,8 @@ public:
// internal functions
idRenderSystemLocal();
~idRenderSystemLocal();
void UpdateStereo3DMode();
void Clear();
void GetCroppedViewport( idScreenRect* viewport );