diff --git a/src/graphics/post_processing.cpp b/src/graphics/post_processing.cpp index 70760dc5b..845d6928e 100644 --- a/src/graphics/post_processing.cpp +++ b/src/graphics/post_processing.cpp @@ -555,9 +555,9 @@ void PostProcessing::renderFog(const core::vector3df &campos, const core::matrix const float end = track->getFogEnd(); const SColor tmpcol = track->getFogColor(); - const float col[3] = { tmpcol.getRed() / 255.0f, + core::vector3df col( tmpcol.getRed() / 255.0f, tmpcol.getGreen() / 255.0f, - tmpcol.getBlue() / 255.0f }; + tmpcol.getBlue() / 255.0f ); glDisable(GL_DEPTH_TEST); glEnable(GL_BLEND); @@ -567,17 +567,8 @@ void PostProcessing::renderFog(const core::vector3df &campos, const core::matrix glUseProgram(FullScreenShader::FogShader::Program); glBindVertexArray(FullScreenShader::FogShader::vao); - glUniform1f(FullScreenShader::FogShader::uniform_fogmax, fogmax); - glUniform1f(FullScreenShader::FogShader::uniform_startH, startH); - glUniform1f(FullScreenShader::FogShader::uniform_endH, endH); - glUniform1f(FullScreenShader::FogShader::uniform_start, start); - glUniform1f(FullScreenShader::FogShader::uniform_end, end); - glUniform3f(FullScreenShader::FogShader::uniform_col, col[0], col[1], col[2]); - glUniform3f(FullScreenShader::FogShader::uniform_campos, campos.X, campos.Y, campos.Z); - glUniformMatrix4fv(FullScreenShader::FogShader::uniform_ipvmat, 1, GL_FALSE, ipvmat.pointer()); - glActiveTexture(GL_TEXTURE0); - glBindTexture(GL_TEXTURE_2D, static_cast(irr_driver->getRTT(RTT_NORMAL_AND_DEPTH))->getOpenGLTextureName()); - glUniform1i(FullScreenShader::FogShader::uniform_tex, 0); + setTexture(0, static_cast(irr_driver->getRTT(RTT_NORMAL_AND_DEPTH))->getOpenGLTextureName(), GL_NEAREST, GL_NEAREST); + FullScreenShader::FogShader::setUniforms(ipvmat, fogmax, startH, endH, start, end, col, campos, 0); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glBindVertexArray(0); diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 7f4497f4a..091ffd991 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -1412,6 +1412,7 @@ namespace FullScreenShader GLuint FogShader::uniform_campos; GLuint FogShader::uniform_ipvmat; GLuint FogShader::vao; + void FogShader::init() { Program = LoadProgram(file_manager->getAsset("shaders/screenquad.vert").c_str(), file_manager->getAsset("shaders/fog.frag").c_str()); @@ -1426,4 +1427,17 @@ namespace FullScreenShader uniform_ipvmat = glGetUniformLocation(Program, "ipvmat"); vao = createVAO(Program); } + + void FogShader::setUniforms(const core::matrix4 &ipvmat, float fogmax, float startH, float endH, float start, float end, const core::vector3df &col, const core::vector3df &campos, unsigned TU_ntex) + { + glUniform1f(FullScreenShader::FogShader::uniform_fogmax, fogmax); + glUniform1f(FullScreenShader::FogShader::uniform_startH, startH); + glUniform1f(FullScreenShader::FogShader::uniform_endH, endH); + glUniform1f(FullScreenShader::FogShader::uniform_start, start); + glUniform1f(FullScreenShader::FogShader::uniform_end, end); + glUniform3f(FullScreenShader::FogShader::uniform_col, col.X, col.Y, col.Z); + glUniform3f(FullScreenShader::FogShader::uniform_campos, campos.X, campos.Y, campos.Z); + glUniformMatrix4fv(FullScreenShader::FogShader::uniform_ipvmat, 1, GL_FALSE, ipvmat.pointer()); + glUniform1i(FullScreenShader::FogShader::uniform_tex, TU_ntex); + } } diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index f0866e309..9a754c8b4 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -431,6 +431,7 @@ public: static GLuint vao; static void init(); + static void setUniforms(const core::matrix4 &ipvmat, float fogmax, float startH, float endH, float start, float end, const core::vector3df &col, const core::vector3df &campos, unsigned TU_ntex); }; }