diff --git a/src/graphics/post_processing.cpp b/src/graphics/post_processing.cpp index 72d2c9a06..15020a9e4 100644 --- a/src/graphics/post_processing.cpp +++ b/src/graphics/post_processing.cpp @@ -524,20 +524,15 @@ void PostProcessing::renderSSAO(const core::matrix4 &invprojm, const core::matri glDisable(GL_BLEND); glDisable(GL_ALPHA_TEST); - glUseProgram(FullScreenShader::SSAOShader::Program); - glBindVertexArray(FullScreenShader::SSAOShader::vao); - glUniformMatrix4fv(FullScreenShader::SSAOShader::uniform_invprojm, 1, GL_FALSE, invprojm.pointer()); - glUniformMatrix4fv(FullScreenShader::SSAOShader::uniform_projm, 1, GL_FALSE, projm.pointer()); - glUniform4fv(FullScreenShader::SSAOShader::uniform_samplePoints, 16, FullScreenShader::SSAOShader::SSAOSamples); - - glActiveTexture(GL_TEXTURE0); - setTexture(0, static_cast(irr_driver->getRTT(RTT_NORMAL_AND_DEPTH))->getOpenGLTextureName(), GL_LINEAR, GL_LINEAR); - glUniform1i(FullScreenShader::SSAOShader::uniform_normals_and_depth, 0); - if (!noise_tex) noise_tex = irr_driver->getTexture(file_manager->getAsset("textures/noise.png").c_str()); + + glUseProgram(FullScreenShader::SSAOShader::Program); + glBindVertexArray(FullScreenShader::SSAOShader::vao); + setTexture(0, static_cast(irr_driver->getRTT(RTT_NORMAL_AND_DEPTH))->getOpenGLTextureName(), GL_LINEAR, GL_LINEAR); setTexture(1, static_cast(noise_tex)->getOpenGLTextureName(), GL_NEAREST, GL_NEAREST); - glUniform1i(FullScreenShader::SSAOShader::uniform_noise_texture, 1); + + FullScreenShader::SSAOShader::setUniforms(projm, invprojm, 0, 1); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glBindVertexArray(0); diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 94efe0379..736c31b85 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -1263,6 +1263,7 @@ namespace FullScreenShader GLuint SSAOShader::uniform_samplePoints; GLuint SSAOShader::vao; float SSAOShader::SSAOSamples[64]; + void SSAOShader::init() { Program = LoadProgram(file_manager->getAsset("shaders/screenquad.vert").c_str(), file_manager->getAsset("shaders/ssao.frag").c_str()); @@ -1387,6 +1388,16 @@ namespace FullScreenShader }*/ } + void SSAOShader::setUniforms(const core::matrix4& projm, const core::matrix4 &invprojm, unsigned TU_ntex, unsigned TU_noise) + { + glUniformMatrix4fv(FullScreenShader::SSAOShader::uniform_invprojm, 1, GL_FALSE, invprojm.pointer()); + glUniformMatrix4fv(FullScreenShader::SSAOShader::uniform_projm, 1, GL_FALSE, projm.pointer()); + glUniform4fv(FullScreenShader::SSAOShader::uniform_samplePoints, 16, FullScreenShader::SSAOShader::SSAOSamples); + + glUniform1i(FullScreenShader::SSAOShader::uniform_normals_and_depth, TU_ntex); + glUniform1i(FullScreenShader::SSAOShader::uniform_noise_texture, TU_noise); + } + GLuint FogShader::Program; GLuint FogShader::uniform_tex; GLuint FogShader::uniform_fogmax; diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index 15af68d6a..d96247417 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -420,6 +420,7 @@ public: static float SSAOSamples[64]; static void init(); + static void setUniforms(const core::matrix4& projm, const core::matrix4 &invprojm, unsigned TU_ntex, unsigned TU_noise); }; class FogShader