diff --git a/src.cmake b/src.cmake index bc1a1230b8..f157950f46 100644 --- a/src.cmake +++ b/src.cmake @@ -162,10 +162,8 @@ set(GLSLSOURCELIST ${ENGINE_DIR}/renderer/glsl_source/vertexAnimation_vp.glsl ${ENGINE_DIR}/renderer/glsl_source/vertexSimple_vp.glsl ${ENGINE_DIR}/renderer/glsl_source/vertexSkinning_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/blurX_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/blurX_vp.glsl - ${ENGINE_DIR}/renderer/glsl_source/blurY_fp.glsl - ${ENGINE_DIR}/renderer/glsl_source/blurY_vp.glsl + ${ENGINE_DIR}/renderer/glsl_source/blur_fp.glsl + ${ENGINE_DIR}/renderer/glsl_source/blur_vp.glsl ${ENGINE_DIR}/renderer/glsl_source/cameraEffects_fp.glsl ${ENGINE_DIR}/renderer/glsl_source/cameraEffects_vp.glsl ${ENGINE_DIR}/renderer/glsl_source/computeLight_fp.glsl diff --git a/src/engine/renderer/gl_shader.cpp b/src/engine/renderer/gl_shader.cpp index fda7b81446..2e12af82d7 100644 --- a/src/engine/renderer/gl_shader.cpp +++ b/src/engine/renderer/gl_shader.cpp @@ -70,8 +70,7 @@ GLShader_screenMaterial *gl_screenShaderMaterial = nullptr; GLShader_portal *gl_portalShader = nullptr; GLShader_contrast *gl_contrastShader = nullptr; GLShader_cameraEffects *gl_cameraEffectsShader = nullptr; -GLShader_blurX *gl_blurXShader = nullptr; -GLShader_blurY *gl_blurYShader = nullptr; +GLShader_blur *gl_blurShader = nullptr; GLShader_debugShadowMap *gl_debugShadowMapShader = nullptr; GLShader_liquid *gl_liquidShader = nullptr; GLShader_liquidMaterial *gl_liquidShaderMaterial = nullptr; @@ -2874,30 +2873,17 @@ void GLShader_cameraEffects::SetShaderProgramUniforms( shaderProgram_t *shaderPr glUniform1i( glGetUniformLocation( shaderProgram->program, "u_ColorMap3D" ), 3 ); } -GLShader_blurX::GLShader_blurX( GLShaderManager *manager ) : - GLShader( "blurX", ATTR_POSITION, manager ), +GLShader_blur::GLShader_blur( GLShaderManager *manager ) : + GLShader( "blur", ATTR_POSITION, manager ), u_ColorMap( this ), u_ModelViewProjectionMatrix( this ), u_DeformMagnitude( this ), - u_TexScale( this ) + u_TexScale( this ), + u_Horizontal( this ) { } -void GLShader_blurX::SetShaderProgramUniforms( shaderProgram_t *shaderProgram ) -{ - glUniform1i( glGetUniformLocation( shaderProgram->program, "u_ColorMap" ), 0 ); -} - -GLShader_blurY::GLShader_blurY( GLShaderManager *manager ) : - GLShader( "blurY", ATTR_POSITION, manager ), - u_ColorMap( this ), - u_ModelViewProjectionMatrix( this ), - u_DeformMagnitude( this ), - u_TexScale( this ) -{ -} - -void GLShader_blurY::SetShaderProgramUniforms( shaderProgram_t *shaderProgram ) +void GLShader_blur::SetShaderProgramUniforms( shaderProgram_t *shaderProgram ) { glUniform1i( glGetUniformLocation( shaderProgram->program, "u_ColorMap" ), 0 ); } diff --git a/src/engine/renderer/gl_shader.h b/src/engine/renderer/gl_shader.h index 687e57b3d2..c119c872a6 100644 --- a/src/engine/renderer/gl_shader.h +++ b/src/engine/renderer/gl_shader.h @@ -3754,6 +3754,18 @@ class u_blurVec : } }; +class u_Horizontal : + GLUniform1Bool { + public: + u_Horizontal( GLShader* shader ) : + GLUniform1Bool( shader, "u_Horizontal", true ) { + } + + void SetUniform_Horizontal( bool horizontal ) { + this->SetValue( horizontal ); + } +}; + class u_TexScale : GLUniform2f { @@ -4486,27 +4498,16 @@ class GLShader_cameraEffects : void SetShaderProgramUniforms( shaderProgram_t *shaderProgram ) override; }; -class GLShader_blurX : - public GLShader, - public u_ColorMap, - public u_ModelViewProjectionMatrix, - public u_DeformMagnitude, - public u_TexScale -{ -public: - GLShader_blurX( GLShaderManager *manager ); - void SetShaderProgramUniforms( shaderProgram_t *shaderProgram ) override; -}; - -class GLShader_blurY : +class GLShader_blur : public GLShader, public u_ColorMap, public u_ModelViewProjectionMatrix, public u_DeformMagnitude, - public u_TexScale + public u_TexScale, + public u_Horizontal { public: - GLShader_blurY( GLShaderManager *manager ); + GLShader_blur( GLShaderManager *manager ); void SetShaderProgramUniforms( shaderProgram_t *shaderProgram ) override; }; @@ -4740,8 +4741,7 @@ extern GLShader_screenMaterial *gl_screenShaderMaterial; extern GLShader_portal *gl_portalShader; extern GLShader_contrast *gl_contrastShader; extern GLShader_cameraEffects *gl_cameraEffectsShader; -extern GLShader_blurX *gl_blurXShader; -extern GLShader_blurY *gl_blurYShader; +extern GLShader_blur *gl_blurShader; extern GLShader_debugShadowMap *gl_debugShadowMapShader; extern GLShader_liquid *gl_liquidShader; extern GLShader_liquidMaterial *gl_liquidShaderMaterial; diff --git a/src/engine/renderer/glsl_source/blurY_fp.glsl b/src/engine/renderer/glsl_source/blurY_fp.glsl deleted file mode 100644 index 7a3df72a87..0000000000 --- a/src/engine/renderer/glsl_source/blurY_fp.glsl +++ /dev/null @@ -1,63 +0,0 @@ -/* -=========================================================================== -Copyright (C) 2006-2011 Robert Beckebans - -This file is part of XreaL source code. - -XreaL source code is free software; you can redistribute it -and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -XreaL source code is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with XreaL source code; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -=========================================================================== -*/ - -/* blurY_fp.glsl */ - -uniform sampler2D u_ColorMap; -uniform float u_DeformMagnitude; -uniform vec2 u_TexScale; - -#if __VERSION__ > 120 -out vec4 outputColor; -#else -#define outputColor gl_FragColor -#endif - -void main() -{ - vec2 st = gl_FragCoord.st * u_TexScale; - -#if 0 - float gaussFact[3] = float[3](1.0, 2.0, 1.0); - float gaussSum = 4; - const int tap = 1; -#elif 0 - float gaussFact[5] = float[5](1.0, 4.0, 6.0, 4.0, 1.0); - float gaussSum = 16.0; - const int tap = 2; -#elif 1 - float gaussFact[7] = float[7](1.0, 6.0, 15.0, 20.0, 15.0, 6.0, 1.0); - float gaussSum = 64.0; - const int tap = 3; -#endif - - // do a full gaussian blur - vec4 sumColors = vec4(0.0); - - for(int t = -tap; t <= tap; t++) - { - float weight = gaussFact[t + tap]; - sumColors += texture2D(u_ColorMap, st + vec2(0, t) * u_TexScale * u_DeformMagnitude) * weight; - } - - outputColor = sumColors * (1.0 / gaussSum); -} diff --git a/src/engine/renderer/glsl_source/blurY_vp.glsl b/src/engine/renderer/glsl_source/blurY_vp.glsl deleted file mode 100644 index 939b4859e5..0000000000 --- a/src/engine/renderer/glsl_source/blurY_vp.glsl +++ /dev/null @@ -1,33 +0,0 @@ -/* -=========================================================================== -Copyright (C) 2006-2008 Robert Beckebans - -This file is part of XreaL source code. - -XreaL source code is free software; you can redistribute it -and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -XreaL source code is distributed in the hope that it will be -useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with XreaL source code; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -=========================================================================== -*/ - -/* blurY_vp.glsl */ - -IN vec3 attr_Position; - -uniform mat4 u_ModelViewProjectionMatrix; - -void main() -{ - // transform vertex position into homogenous clip-space - gl_Position = u_ModelViewProjectionMatrix * vec4(attr_Position, 1.0); -} diff --git a/src/engine/renderer/glsl_source/blurX_fp.glsl b/src/engine/renderer/glsl_source/blur_fp.glsl similarity index 67% rename from src/engine/renderer/glsl_source/blurX_fp.glsl rename to src/engine/renderer/glsl_source/blur_fp.glsl index 23df65c584..b996dc740a 100644 --- a/src/engine/renderer/glsl_source/blurX_fp.glsl +++ b/src/engine/renderer/glsl_source/blur_fp.glsl @@ -20,44 +20,39 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ -/* blurX_fp.glsl */ +/* blur_fp.glsl */ -uniform sampler2D u_ColorMap; -uniform float u_DeformMagnitude; -uniform vec2 u_TexScale; +uniform sampler2D u_ColorMap; +uniform float u_DeformMagnitude; +uniform vec2 u_TexScale; +uniform bool u_Horizontal; -#if __VERSION__ > 120 -out vec4 outputColor; -#else -#define outputColor gl_FragColor -#endif +DECLARE_OUTPUT( vec4 ) -void main() -{ +void main() { vec2 st = gl_FragCoord.st * u_TexScale; #if 0 - float gaussFact[3] = float[3](1.0, 2.0, 1.0); + float gaussFact[3] = float[3] ( 1.0, 2.0, 1.0 ); float gaussSum = 4; const int tap = 1; #elif 0 - float gaussFact[5] = float[5](1.0, 4.0, 6.0, 4.0, 1.0); + float gaussFact[5] = float[5] ( 1.0, 4.0, 6.0, 4.0, 1.0 ); float gaussSum = 16.0; const int tap = 2; #elif 1 - float gaussFact[7] = float[7](1.0, 6.0, 15.0, 20.0, 15.0, 6.0, 1.0); + float gaussFact[7] = float[7] ( 1.0, 6.0, 15.0, 20.0, 15.0, 6.0, 1.0 ); float gaussSum = 64.0; const int tap = 3; #endif // do a full gaussian blur - vec4 sumColors = vec4(0.0); + vec4 sumColors = vec4( 0.0 ); - for(int t = -tap; t <= tap; t++) - { + for( int t = -tap; t <= tap; t++ ) { float weight = gaussFact[t + tap]; - sumColors += texture2D(u_ColorMap, st + vec2(t, 0) * u_TexScale * u_DeformMagnitude) * weight; + sumColors += texture2D( u_ColorMap, st + vec2( u_Horizontal ? t : 0, u_Horizontal ? 0 : t ) * u_TexScale * u_DeformMagnitude ) * weight; } - outputColor = sumColors * (1.0 / gaussSum); + outputColor = sumColors * ( 1.0 / gaussSum ); } diff --git a/src/engine/renderer/glsl_source/blurX_vp.glsl b/src/engine/renderer/glsl_source/blur_vp.glsl similarity index 85% rename from src/engine/renderer/glsl_source/blurX_vp.glsl rename to src/engine/renderer/glsl_source/blur_vp.glsl index c36656fd4f..2740ea962d 100644 --- a/src/engine/renderer/glsl_source/blurX_vp.glsl +++ b/src/engine/renderer/glsl_source/blur_vp.glsl @@ -20,14 +20,13 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA =========================================================================== */ -/* blurX_vp.glsl */ +/* blur_vp.glsl */ -IN vec3 attr_Position; +IN vec3 attr_Position; -uniform mat4 u_ModelViewProjectionMatrix; +uniform mat4 u_ModelViewProjectionMatrix; -void main() -{ +void main() { // transform vertex position into homogenous clip-space - gl_Position = u_ModelViewProjectionMatrix * vec4(attr_Position, 1.0); + gl_Position = u_ModelViewProjectionMatrix * vec4( attr_Position, 1.0 ); } diff --git a/src/engine/renderer/shaders.cpp b/src/engine/renderer/shaders.cpp index 829622915d..c70d1b2ea0 100644 --- a/src/engine/renderer/shaders.cpp +++ b/src/engine/renderer/shaders.cpp @@ -6,10 +6,8 @@ #include "vertexAnimation_vp.glsl.h" #include "vertexSimple_vp.glsl.h" #include "vertexSkinning_vp.glsl.h" -#include "blurX_fp.glsl.h" -#include "blurX_vp.glsl.h" -#include "blurY_fp.glsl.h" -#include "blurY_vp.glsl.h" +#include "blur_fp.glsl.h" +#include "blur_vp.glsl.h" #include "cameraEffects_fp.glsl.h" #include "cameraEffects_vp.glsl.h" #include "computeLight_fp.glsl.h" @@ -68,10 +66,8 @@ #include "processSurfaces_cp.glsl.h" std::unordered_map shadermap({ - { "blurX_fp.glsl", std::string(reinterpret_cast(blurX_fp_glsl), sizeof(blurX_fp_glsl)) }, - { "blurX_vp.glsl", std::string(reinterpret_cast(blurX_vp_glsl), sizeof(blurX_vp_glsl)) }, - { "blurY_fp.glsl", std::string(reinterpret_cast(blurY_fp_glsl), sizeof(blurY_fp_glsl)) }, - { "blurY_vp.glsl", std::string(reinterpret_cast(blurY_vp_glsl), sizeof(blurY_vp_glsl)) }, + { "blur_fp.glsl", std::string(reinterpret_cast(blur_fp_glsl), sizeof(blur_fp_glsl)) }, + { "blur_vp.glsl", std::string(reinterpret_cast(blur_vp_glsl), sizeof(blur_vp_glsl)) }, { "cameraEffects_fp.glsl", std::string(reinterpret_cast(cameraEffects_fp_glsl), sizeof(cameraEffects_fp_glsl)) }, { "cameraEffects_vp.glsl", std::string(reinterpret_cast(cameraEffects_vp_glsl), sizeof(cameraEffects_vp_glsl)) }, { "computeLight_fp.glsl", std::string(reinterpret_cast(computeLight_fp_glsl), sizeof(computeLight_fp_glsl)) }, diff --git a/src/engine/renderer/tr_backend.cpp b/src/engine/renderer/tr_backend.cpp index 4d8dac5445..3510cafe5f 100644 --- a/src/engine/renderer/tr_backend.cpp +++ b/src/engine/renderer/tr_backend.cpp @@ -2062,28 +2062,31 @@ static void RB_BlurShadowMap( const trRefLight_t *light, int i ) MatrixOrthogonalProjection( ortho, 0, fbos[index]->width, 0, fbos[index]->height, -99999, 99999 ); GL_LoadProjectionMatrix( ortho ); - gl_blurXShader->BindProgram( 0 ); - gl_blurXShader->SetUniform_DeformMagnitude( 1 ); - gl_blurXShader->SetUniform_TexScale( texScale ); + gl_blurShader->BindProgram( 0 ); + gl_blurShader->SetUniform_DeformMagnitude( 1 ); + gl_blurShader->SetUniform_TexScale( texScale ); + gl_blurShader->SetUniform_Horizontal( true ); - gl_blurXShader->SetUniform_ColorMapBindless( + gl_blurShader->SetUniform_ColorMapBindless( GL_BindToTMU( 0, images[index] ) ); - Tess_InstantQuad( *gl_blurXShader, 0, 0, fbos[ index ]->width, fbos[ index ]->height ); + Tess_InstantQuad( *gl_blurShader, 0, 0, fbos[ index ]->width, fbos[ index ]->height ); R_AttachFBOTexture2D( images[ index ]->type, images[ index ]->texnum, 0 ); glClear( GL_COLOR_BUFFER_BIT ); - gl_blurYShader->BindProgram( 0 ); - gl_blurYShader->SetUniform_DeformMagnitude( 1 ); - gl_blurYShader->SetUniform_TexScale( texScale ); - gl_blurYShader->SetUniform_ColorMapBindless( + gl_blurShader->BindProgram( 0 ); + gl_blurShader->SetUniform_DeformMagnitude( 1 ); + gl_blurShader->SetUniform_TexScale( texScale ); + gl_blurShader->SetUniform_Horizontal( false ); + + gl_blurShader->SetUniform_ColorMapBindless( GL_BindToTMU( 0, images[index + MAX_SHADOWMAPS] ) ); - Tess_InstantQuad( *gl_blurYShader, 0, 0, fbos[index]->width, fbos[index]->height ); + Tess_InstantQuad( *gl_blurShader, 0, 0, fbos[index]->width, fbos[index]->height ); GL_PopMatrix(); } @@ -3045,19 +3048,16 @@ void RB_RenderGlobalFog() void RB_RenderBloom() { - int i, j, flip = 0; - matrix_t ortho; - GLimp_LogComment( "--- RB_RenderBloom ---\n" ); if ( ( backEnd.refdef.rdflags & ( RDF_NOWORLDMODEL | RDF_NOBLOOM ) ) - || !glConfig2.bloom || backEnd.viewParms.portalLevel > 0 ) - { + || !glConfig2.bloom || backEnd.viewParms.portalLevel > 0 ) { return; } // set 2D virtual screen size GL_PushMatrix(); + matrix_t ortho; MatrixOrthogonalProjection( ortho, backEnd.viewParms.viewportX, backEnd.viewParms.viewportX + backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportY, backEnd.viewParms.viewportY + backEnd.viewParms.viewportHeight, @@ -3092,73 +3092,57 @@ void RB_RenderBloom() backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); // render bloom in multiple passes - gl_contrastShader->SetUniform_ColorMapBindless( - GL_BindToTMU( 0, tr.contrastRenderFBOImage ) - ); - for ( i = 0; i < 2; i++ ) - { - for ( j = 0; j < r_bloomPasses->integer; j++ ) - { - vec2_t texScale; + GL_ClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); + GL_State( GLS_DEPTHTEST_DISABLE ); - texScale[ 0 ] = 1.0f / tr.bloomRenderFBO[ flip ]->width; - texScale[ 1 ] = 1.0f / tr.bloomRenderFBO[ flip ]->height; + GL_PushMatrix(); - R_BindFBO( tr.bloomRenderFBO[ flip ] ); + MatrixOrthogonalProjection( ortho, 0, tr.bloomRenderFBO[0]->width, 0, tr.bloomRenderFBO[0]->height, -99999, 99999 ); + GL_LoadProjectionMatrix( ortho ); - GL_ClearColor( 0.0f, 0.0f, 0.0f, 1.0f ); - glClear( GL_COLOR_BUFFER_BIT ); + vec2_t texScale; + texScale[0] = 1.0f / tr.bloomRenderFBO[0]->width; + texScale[1] = 1.0f / tr.bloomRenderFBO[0]->height; - GL_State( GLS_DEPTHTEST_DISABLE ); + gl_blurShader->BindProgram( 0 ); - GL_PushMatrix(); + gl_blurShader->SetUniform_DeformMagnitude( r_bloomBlur.Get() ); + gl_blurShader->SetUniform_TexScale( texScale ); - MatrixOrthogonalProjection( ortho, 0, tr.bloomRenderFBO[ 0 ]->width, 0, tr.bloomRenderFBO[ 0 ]->height, -99999, 99999 ); - GL_LoadProjectionMatrix( ortho ); + gl_blurShader->SetUniform_ColorMapBindless( + GL_BindToTMU( 0, tr.contrastRenderFBOImage ) + ); - if ( i == 0 ) - { - gl_blurXShader->BindProgram( 0 ); + gl_blurShader->SetUniform_Horizontal( true ); - gl_blurXShader->SetUniform_DeformMagnitude( r_bloomBlur->value ); - gl_blurXShader->SetUniform_TexScale( texScale ); - gl_blurXShader->SetUniform_ColorMapBindless( - GL_BindToTMU( 0, tr.bloomRenderFBOImage[flip] ) - ); - Tess_InstantQuad( *gl_blurXShader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - } - else - { - gl_blurYShader->BindProgram( 0 ); - - gl_blurYShader->SetUniform_DeformMagnitude( r_bloomBlur->value ); - gl_blurYShader->SetUniform_TexScale( texScale ); - gl_blurYShader->SetUniform_ColorMapBindless( - GL_BindToTMU( 0, tr.bloomRenderFBOImage[flip] ) - ); - Tess_InstantQuad( *gl_blurYShader, - backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, - backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - } + int flip = 0; + for ( int i = 0; i < 2; i++ ) { + for ( int j = 0; j < r_bloomPasses.Get(); j++ ) { + R_BindFBO( tr.bloomRenderFBO[flip] ); + glClear( GL_COLOR_BUFFER_BIT ); + Tess_InstantQuad( *gl_blurShader, + backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, + backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); - GL_BindToTMU( 0, tr.bloomRenderFBOImage[ flip ] ); + gl_blurShader->SetUniform_ColorMapBindless( + GL_BindToTMU( 0, tr.bloomRenderFBOImage[flip] ) + ); - GL_PopMatrix(); flip ^= 1; } + + gl_blurShader->SetUniform_Horizontal( false ); } - R_BindFBO( tr.mainFBO[ backEnd.currentMainFBO ] ); + GL_PopMatrix(); + + R_BindFBO( tr.mainFBO[backEnd.currentMainFBO] ); gl_screenShader->BindProgram( 0 ); GL_State( GLS_DEPTHTEST_DISABLE | GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE ); glVertexAttrib4fv( ATTR_INDEX_COLOR, Color::White.ToArray() ); - GL_BindToTMU( 0, tr.blackImage ); - - gl_screenShader->SetUniform_CurrentMapBindless( GL_BindToTMU( 0, tr.blackImage ) ); + gl_screenShader->SetUniform_CurrentMapBindless( GL_BindToTMU( 0, tr.bloomRenderFBOImage[flip ^ 1] ) ); Tess_InstantQuad( *gl_screenShader, backEnd.viewParms.viewportX, backEnd.viewParms.viewportY, backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight ); diff --git a/src/engine/renderer/tr_image.cpp b/src/engine/renderer/tr_image.cpp index 7f7db93b3e..708dde8025 100644 --- a/src/engine/renderer/tr_image.cpp +++ b/src/engine/renderer/tr_image.cpp @@ -2538,14 +2538,12 @@ static void R_CreateContrastRenderFBOImage() return; } - int width, height; - - width = glConfig.vidWidth * 0.25f; - height = glConfig.vidHeight * 0.25f; + const int width = glConfig.vidWidth * 0.25f; + const int height = glConfig.vidHeight * 0.25f; imageParams_t imageParams = {}; imageParams.bits = IF_NOPICMIP; - imageParams.filterType = filterType_t::FT_DEFAULT; + imageParams.filterType = filterType_t::FT_LINEAR; imageParams.wrapType = wrapTypeEnum_t::WT_CLAMP; tr.contrastRenderFBOImage = R_CreateImage( "_contrastRenderFBO", nullptr, width, height, 1, imageParams ); @@ -2558,20 +2556,17 @@ static void R_CreateBloomRenderFBOImages() return; } - int i; - int width, height; - - width = glConfig.vidWidth * 0.25f; - height = glConfig.vidHeight * 0.25f; + const int width = glConfig.vidWidth * 0.25f; + const int height = glConfig.vidHeight * 0.25f; - for ( i = 0; i < 2; i++ ) + for ( int i = 0; i < 2; i++ ) { imageParams_t imageParams = {}; imageParams.bits = IF_NOPICMIP; - imageParams.filterType = filterType_t::FT_DEFAULT; + imageParams.filterType = filterType_t::FT_LINEAR; imageParams.wrapType = wrapTypeEnum_t::WT_CLAMP; - tr.bloomRenderFBOImage[ i ] = R_CreateImage( va( "_bloomRenderFBO%d", i ), nullptr, width, height, 1, imageParams ); + tr.bloomRenderFBOImage[i] = R_CreateImage( va( "_bloomRenderFBO%d", i ), nullptr, width, height, 1, imageParams ); } } diff --git a/src/engine/renderer/tr_init.cpp b/src/engine/renderer/tr_init.cpp index a8676fde63..11a40f9874 100644 --- a/src/engine/renderer/tr_init.cpp +++ b/src/engine/renderer/tr_init.cpp @@ -276,10 +276,10 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA cvar_t *r_vboVertexSkinning; cvar_t *r_mergeLeafSurfaces; - - cvar_t *r_bloom; - cvar_t *r_bloomBlur; - cvar_t *r_bloomPasses; + + Cvar::Cvar r_bloom( "r_bloom", "Use bloom", Cvar::ARCHIVE, false ); + Cvar::Cvar r_bloomBlur( "r_bloomBlur", "Bloom strength", Cvar::NONE, 1.0 ); + Cvar::Cvar r_bloomPasses( "r_bloomPasses", "Amount of bloom passes in each direction", Cvar::NONE, 2 ); cvar_t *r_FXAA; cvar_t *r_ssao; @@ -1198,9 +1198,7 @@ ScreenshotCmd screenshotPNGRegistration("screenshotPNG", ssFormat_t::SSF_PNG, "p r_printShaders = Cvar_Get( "r_printShaders", "0", 0 ); - r_bloom = Cvar_Get( "r_bloom", "0", CVAR_LATCH | CVAR_ARCHIVE ); - r_bloomBlur = Cvar_Get( "r_bloomBlur", "1.0", CVAR_CHEAT ); - r_bloomPasses = Cvar_Get( "r_bloomPasses", "2", CVAR_CHEAT ); + Cvar::Latch( r_bloom ); r_FXAA = Cvar_Get( "r_FXAA", "0", CVAR_LATCH | CVAR_ARCHIVE ); r_ssao = Cvar_Get( "r_ssao", "0", CVAR_LATCH | CVAR_ARCHIVE ); diff --git a/src/engine/renderer/tr_local.h b/src/engine/renderer/tr_local.h index 95665ffb55..52d810007c 100644 --- a/src/engine/renderer/tr_local.h +++ b/src/engine/renderer/tr_local.h @@ -3065,9 +3065,9 @@ enum class shaderProfilerRenderSubGroupsMode { extern cvar_t *r_mergeLeafSurfaces; - extern cvar_t *r_bloom; - extern cvar_t *r_bloomBlur; - extern cvar_t *r_bloomPasses; + extern Cvar::Cvar r_bloom; + extern Cvar::Cvar r_bloomBlur; + extern Cvar::Cvar r_bloomPasses; extern cvar_t *r_FXAA; extern cvar_t *r_ssao; diff --git a/src/engine/renderer/tr_shade.cpp b/src/engine/renderer/tr_shade.cpp index 5e2d8dbd4d..673bdba7fd 100644 --- a/src/engine/renderer/tr_shade.cpp +++ b/src/engine/renderer/tr_shade.cpp @@ -142,7 +142,7 @@ static void EnableAvailableFeatures() glConfig2.specularMapping = glConfig2.deluxeMapping && glConfig2.specularMapping; glConfig2.physicalMapping = glConfig2.deluxeMapping && glConfig2.physicalMapping; - glConfig2.bloom = r_bloom->integer; + glConfig2.bloom = r_bloom.Get(); /* Motion blur is enabled by cg_motionblur which is a client cvar so we have to build it in all cases, unless unsupported by the hardware which is the only condition when the engine knows it is not used. */ @@ -344,9 +344,7 @@ static void GLSL_InitGPUShadersOrError() if ( glConfig2.bloom || glConfig2.shadowMapping ) { // gaussian blur - gl_shaderManager.load( gl_blurXShader ); - - gl_shaderManager.load( gl_blurYShader ); + gl_shaderManager.load( gl_blurShader ); } if ( glConfig2.shadowMapping ) @@ -498,8 +496,7 @@ void GLSL_ShutdownGPUShaders() gl_portalShader = nullptr; gl_contrastShader = nullptr; gl_cameraEffectsShader = nullptr; - gl_blurXShader = nullptr; - gl_blurYShader = nullptr; + gl_blurShader = nullptr; gl_debugShadowMapShader = nullptr; gl_liquidShader = nullptr; gl_liquidShaderMaterial = nullptr;