@@ -1621,12 +1621,12 @@ void RB_FXAA()
16211621 // set the shader parameters
16221622 gl_fxaaShader->BindProgram ();
16231623
1624- // Swap main FBOs
16251624 gl_fxaaShader->SetUniform_ColorMapBindless (
16261625 GL_BindToTMU ( 0 , tr.currentRenderImage [backEnd.currentMainFBO ] )
16271626 );
1628- backEnd.currentMainFBO = 1 - backEnd.currentMainFBO ;
1629- R_BindFBO ( tr.mainFBO [ backEnd.currentMainFBO ] );
1627+
1628+ // This shader is run last, so let it render to screen.
1629+ R_BindNullFBO ();
16301630
16311631 Tess_InstantScreenSpaceQuad ();
16321632
@@ -1693,13 +1693,22 @@ void RB_CameraPostFX() {
16931693 }
16941694 gl_cameraEffectsShader->SetUniform_Tonemap ( tonemap );
16951695
1696- // This shader is run last, so let it render to screen instead of
1697- // tr.mainFBO
1698- R_BindNullFBO ();
16991696 gl_cameraEffectsShader->SetUniform_CurrentMapBindless (
17001697 GL_BindToTMU ( 0 , tr.currentRenderImage [backEnd.currentMainFBO ] )
17011698 );
17021699
1700+ if ( r_FXAA.Get () && gl_fxaaShader )
1701+ {
1702+ // Swap main FBOs.
1703+ backEnd.currentMainFBO = 1 - backEnd.currentMainFBO ;
1704+ R_BindFBO ( tr.mainFBO [ backEnd.currentMainFBO ] );
1705+ }
1706+ else
1707+ {
1708+ // Without FXAA this shader is run last, so let it render to screen.
1709+ R_BindNullFBO ();
1710+ }
1711+
17031712 if ( glConfig.colorGrading ) {
17041713 gl_cameraEffectsShader->SetUniform_ColorMap3DBindless ( GL_BindToTMU ( 3 , tr.colorGradeImage ) );
17051714 }
@@ -2810,11 +2819,11 @@ static void RB_RenderPostProcess()
28102819
28112820 TransitionMSAAToMain ( GL_COLOR_BUFFER_BIT );
28122821
2813- RB_FXAA ();
2814-
28152822 // render chromatic aberration
28162823 RB_CameraPostFX ();
28172824
2825+ RB_FXAA ();
2826+
28182827 // copy to given byte buffer that is NOT a FBO
28192828 if ( tr.refdef .pixelTarget != nullptr ) {
28202829 glReadPixels ( 0 , 0 , tr.refdef .pixelTargetWidth , tr.refdef .pixelTargetHeight , GL_RGBA,
0 commit comments