@@ -3045,9 +3045,6 @@ void RB_RenderGlobalFog()
30453045
30463046void RB_RenderBloom ()
30473047{
3048- int i, j, flip = 0 ;
3049- matrix_t ortho;
3050-
30513048 GLimp_LogComment ( " --- RB_RenderBloom ---\n " );
30523049
30533050 if ( ( backEnd.refdef .rdflags & ( RDF_NOWORLDMODEL | RDF_NOBLOOM ) )
@@ -3058,6 +3055,7 @@ void RB_RenderBloom()
30583055
30593056 // set 2D virtual screen size
30603057 GL_PushMatrix ();
3058+ matrix_t ortho;
30613059 MatrixOrthogonalProjection ( ortho, backEnd.viewParms .viewportX ,
30623060 backEnd.viewParms .viewportX + backEnd.viewParms .viewportWidth ,
30633061 backEnd.viewParms .viewportY , backEnd.viewParms .viewportY + backEnd.viewParms .viewportHeight ,
@@ -3092,73 +3090,72 @@ void RB_RenderBloom()
30923090 backEnd.viewParms .viewportWidth , backEnd.viewParms .viewportHeight );
30933091
30943092 // render bloom in multiple passes
3095- gl_contrastShader->SetUniform_ColorMapBindless (
3096- GL_BindToTMU ( 0 , tr.contrastRenderFBOImage )
3097- );
3098- for ( i = 0 ; i < 2 ; i++ )
3099- {
3100- for ( j = 0 ; j < r_bloomPasses->integer ; j++ )
3101- {
3102- vec2_t texScale;
3093+ GL_ClearColor ( 0 .0f , 0 .0f , 0 .0f , 1 .0f );
3094+ GL_State ( GLS_DEPTHTEST_DISABLE );
31033095
3104- texScale[ 0 ] = 1 .0f / tr.bloomRenderFBO [ flip ]->width ;
3105- texScale[ 1 ] = 1 .0f / tr.bloomRenderFBO [ flip ]->height ;
3096+ GL_PushMatrix ();
31063097
3107- R_BindFBO ( tr.bloomRenderFBO [ flip ] );
3098+ MatrixOrthogonalProjection ( ortho, 0 , tr.bloomRenderFBO [0 ]->width , 0 , tr.bloomRenderFBO [0 ]->height , -99999 , 99999 );
3099+ GL_LoadProjectionMatrix ( ortho );
31083100
3109- GL_ClearColor ( 0 .0f , 0 .0f , 0 .0f , 1 .0f );
3110- glClear ( GL_COLOR_BUFFER_BIT );
3101+ vec2_t texScale;
3102+ texScale[0 ] = 1 .0f / tr.bloomRenderFBO [0 ]->width ;
3103+ texScale[1 ] = 1 .0f / tr.bloomRenderFBO [0 ]->height ;
31113104
3112- GL_State ( GLS_DEPTHTEST_DISABLE );
3105+ gl_blurXShader-> BindProgram ( 0 );
31133106
3114- GL_PushMatrix ();
3107+ gl_blurXShader->SetUniform_DeformMagnitude ( r_bloomBlur->value );
3108+ gl_blurXShader->SetUniform_TexScale ( texScale );
31153109
3116- MatrixOrthogonalProjection ( ortho, 0 , tr.bloomRenderFBO [ 0 ]->width , 0 , tr.bloomRenderFBO [ 0 ]->height , -99999 , 99999 );
3117- GL_LoadProjectionMatrix ( ortho );
3110+ gl_blurXShader->SetUniform_ColorMapBindless (
3111+ GL_BindToTMU ( 0 , tr.contrastRenderFBOImage )
3112+ );
31183113
3119- if ( i == 0 )
3120- {
3121- gl_blurXShader->BindProgram ( 0 );
3114+ int flip = 0 ;
3115+ for ( int i = 0 ; i < r_bloomPasses->integer ; i++ ) {
3116+ R_BindFBO ( tr.bloomRenderFBO [flip] );
3117+ glClear ( GL_COLOR_BUFFER_BIT );
3118+ Tess_InstantQuad ( *gl_blurXShader,
3119+ backEnd.viewParms .viewportX , backEnd.viewParms .viewportY ,
3120+ backEnd.viewParms .viewportWidth , backEnd.viewParms .viewportHeight );
31223121
3123- gl_blurXShader->SetUniform_DeformMagnitude ( r_bloomBlur->value );
3124- gl_blurXShader->SetUniform_TexScale ( texScale );
3125- gl_blurXShader->SetUniform_ColorMapBindless (
3126- GL_BindToTMU ( 0 , tr.bloomRenderFBOImage [flip] )
3127- );
3128- Tess_InstantQuad ( *gl_blurXShader,
3129- backEnd.viewParms .viewportX , backEnd.viewParms .viewportY ,
3130- backEnd.viewParms .viewportWidth , backEnd.viewParms .viewportHeight );
3131- }
3132- else
3133- {
3134- gl_blurYShader->BindProgram ( 0 );
3122+ gl_blurXShader->SetUniform_ColorMapBindless (
3123+ GL_BindToTMU ( 0 , tr.bloomRenderFBOImage [flip] )
3124+ );
3125+ flip ^= 1 ;
3126+ }
31353127
3136- gl_blurYShader->SetUniform_DeformMagnitude ( r_bloomBlur->value );
3137- gl_blurYShader->SetUniform_TexScale ( texScale );
3138- gl_blurYShader->SetUniform_ColorMapBindless (
3139- GL_BindToTMU ( 0 , tr.bloomRenderFBOImage [flip] )
3140- );
3141- Tess_InstantQuad ( *gl_blurYShader,
3142- backEnd.viewParms .viewportX , backEnd.viewParms .viewportY ,
3143- backEnd.viewParms .viewportWidth , backEnd.viewParms .viewportHeight );
3144- }
3128+ gl_blurYShader->BindProgram ( 0 );
31453129
3146- GL_BindToTMU ( 0 , tr.bloomRenderFBOImage [ flip ] );
3130+ gl_blurYShader->SetUniform_DeformMagnitude ( r_bloomBlur->value );
3131+ gl_blurYShader->SetUniform_TexScale ( texScale );
31473132
3148- GL_PopMatrix ();
3149- flip ^= 1 ;
3150- }
3133+ gl_blurYShader->SetUniform_ColorMapBindless (
3134+ GL_BindToTMU ( 0 , tr.bloomRenderFBOImage [flip ^ 1 ] )
3135+ );
3136+
3137+ for ( int i = 0 ; i < r_bloomPasses->integer ; i++ ) {
3138+ R_BindFBO ( tr.bloomRenderFBO [flip] );
3139+ glClear ( GL_COLOR_BUFFER_BIT );
3140+ Tess_InstantQuad ( *gl_blurYShader,
3141+ backEnd.viewParms .viewportX , backEnd.viewParms .viewportY ,
3142+ backEnd.viewParms .viewportWidth , backEnd.viewParms .viewportHeight );
3143+
3144+ gl_blurYShader->SetUniform_ColorMapBindless (
3145+ GL_BindToTMU ( 0 , tr.bloomRenderFBOImage [flip] )
3146+ );
3147+ flip ^= 1 ;
31513148 }
31523149
3153- R_BindFBO ( tr.mainFBO [ backEnd.currentMainFBO ] );
3150+ GL_PopMatrix ();
3151+
3152+ R_BindFBO ( tr.mainFBO [backEnd.currentMainFBO ] );
31543153
31553154 gl_screenShader->BindProgram ( 0 );
31563155 GL_State ( GLS_DEPTHTEST_DISABLE | GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE );
31573156 glVertexAttrib4fv ( ATTR_INDEX_COLOR, Color::White.ToArray () );
31583157
3159- GL_BindToTMU ( 0 , tr.blackImage );
3160-
3161- gl_screenShader->SetUniform_CurrentMapBindless ( GL_BindToTMU ( 0 , tr.blackImage ) );
3158+ gl_screenShader->SetUniform_CurrentMapBindless ( GL_BindToTMU ( 0 , tr.bloomRenderFBOImage [flip ^ 1 ] ) );
31623159 Tess_InstantQuad ( *gl_screenShader,
31633160 backEnd.viewParms .viewportX , backEnd.viewParms .viewportY ,
31643161 backEnd.viewParms .viewportWidth , backEnd.viewParms .viewportHeight );
0 commit comments