diff --git a/src/graphics/2dutils.cpp b/src/graphics/2dutils.cpp index b2f6ed14a..ad98fd905 100644 --- a/src/graphics/2dutils.cpp +++ b/src/graphics/2dutils.cpp @@ -39,7 +39,7 @@ static void drawTexColoredQuad(const video::ITexture *texture, const video::SCol UIShader::ColoredTextureRectShader::getInstance()->use(); glBindVertexArray(UIShader::ColoredTextureRectShader::getInstance()->vao); - UIShader::ColoredTextureRectShader::getInstance()->SetTextureUnits(static_cast(texture)->getOpenGLTextureName()); + UIShader::ColoredTextureRectShader::getInstance()->setTextureUnits(static_cast(texture)->getOpenGLTextureName()); UIShader::ColoredTextureRectShader::getInstance()->setUniforms( core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height), core::vector2df(tex_center_pos_x, tex_center_pos_y), core::vector2df(tex_width, tex_height)); @@ -59,7 +59,7 @@ float tex_width, float tex_height) UIShader::TextureRectShader::getInstance()->use(); glBindVertexArray(SharedObject::UIVAO); - UIShader::TextureRectShader::getInstance()->SetTextureUnits(texture); + UIShader::TextureRectShader::getInstance()->setTextureUnits(texture); UIShader::TextureRectShader::getInstance()->setUniforms( core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height), core::vector2df(tex_center_pos_x, tex_center_pos_y), @@ -161,7 +161,7 @@ void draw2DImage(const video::ITexture* texture, const core::rect& destRect UIShader::UniformColoredTextureRectShader::getInstance()->use(); glBindVertexArray(SharedObject::UIVAO); - UIShader::UniformColoredTextureRectShader::getInstance()->SetTextureUnits(static_cast(texture)->getOpenGLTextureName()); + UIShader::UniformColoredTextureRectShader::getInstance()->setTextureUnits(static_cast(texture)->getOpenGLTextureName()); UIShader::UniformColoredTextureRectShader::getInstance()->setUniforms( core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height), core::vector2df(tex_center_pos_x, tex_center_pos_y), core::vector2df(tex_width, tex_height), colors); @@ -197,7 +197,7 @@ void draw2DImageFromRTT(GLuint texture, size_t texture_w, size_t texture_h, UIShader::UniformColoredTextureRectShader::getInstance()->use(); glBindVertexArray(SharedObject::UIVAO); - UIShader::UniformColoredTextureRectShader::getInstance()->SetTextureUnits(texture); + UIShader::UniformColoredTextureRectShader::getInstance()->setTextureUnits(texture); UIShader::UniformColoredTextureRectShader::getInstance()->setUniforms( core::vector2df(center_pos_x, center_pos_y), core::vector2df(width, height), core::vector2df(tex_center_pos_x, tex_center_pos_y), core::vector2df(tex_width, tex_height), @@ -285,7 +285,7 @@ void draw2DVertexPrimitiveList(video::ITexture *tex, const void* vertices, UIShader::Primitive2DList::getInstance()->setUniforms(); const video::SOverrideMaterial &m = irr_driver->getVideoDriver()->getOverrideMaterial(); compressTexture(tex, false); - UIShader::Primitive2DList::getInstance()->SetTextureUnits(getTextureGLuint(tex)); + UIShader::Primitive2DList::getInstance()->setTextureUnits(getTextureGLuint(tex)); glDrawElements(GL_TRIANGLE_FAN, primitiveCount, GL_UNSIGNED_SHORT, 0); glDeleteVertexArrays(1, &tmpvao); diff --git a/src/graphics/IBL.cpp b/src/graphics/IBL.cpp index e48f657f4..20e4e0956 100644 --- a/src/graphics/IBL.cpp +++ b/src/graphics/IBL.cpp @@ -369,7 +369,7 @@ GLuint generateSpecularCubemap(GLuint probe) GLuint status = glCheckFramebufferStatus(GL_FRAMEBUFFER); assert(status == GL_FRAMEBUFFER_COMPLETE); - UtilShader::SpecularIBLGenerator::getInstance()->SetTextureUnits(probe); + UtilShader::SpecularIBLGenerator::getInstance()->setTextureUnits(probe); UtilShader::SpecularIBLGenerator::getInstance()->setUniforms(M[face], viewportSize); glDrawArrays(GL_TRIANGLES, 0, 3); diff --git a/src/graphics/gpuparticles.cpp b/src/graphics/gpuparticles.cpp index 1b4839f62..a63225994 100644 --- a/src/graphics/gpuparticles.cpp +++ b/src/graphics/gpuparticles.cpp @@ -64,7 +64,7 @@ public: GL_FRAGMENT_SHADER, "particle.frag"); assignUniforms("color_from", "color_to"); - AssignSamplerNames(m_program, 0, "tex", 1, "dtex"); + assignSamplerNames(m_program, 0, "tex", 1, "dtex"); } // SimpleParticleRender }; // SimpleParticleRender @@ -83,7 +83,7 @@ public: GL_FRAGMENT_SHADER, "utils/getPosFromUVDepth.frag", GL_FRAGMENT_SHADER, "particle.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "tex", 1, "dtex"); + assignSamplerNames(m_program, 0, "tex", 1, "dtex"); } }; // FlipParticleShader @@ -520,7 +520,7 @@ void ParticleSystemProxy::drawFlip() glBlendFunc(GL_ONE, GL_ONE); FlipParticleRender::getInstance()->use(); - FlipParticleRender::getInstance()->SetTextureUnits(texture, irr_driver->getDepthStencilTexture()); + FlipParticleRender::getInstance()->setTextureUnits(texture, irr_driver->getDepthStencilTexture()); FlipParticleRender::getInstance()->setUniforms(); glBindVertexArray(current_rendering_vao); @@ -535,7 +535,7 @@ void ParticleSystemProxy::drawNotFlip() glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); SimpleParticleRender::getInstance()->use(); - SimpleParticleRender::getInstance()->SetTextureUnits(texture, irr_driver->getDepthStencilTexture()); + SimpleParticleRender::getInstance()->setTextureUnits(texture, irr_driver->getDepthStencilTexture()); video::SColorf ColorFrom = video::SColorf(getColorFrom()[0], getColorFrom()[1], getColorFrom()[2]); video::SColorf ColorTo = video::SColorf(getColorTo()[0], getColorTo()[1], getColorTo()[2]); diff --git a/src/graphics/post_processing.cpp b/src/graphics/post_processing.cpp index fe68514a8..74f8c4c72 100644 --- a/src/graphics/post_processing.cpp +++ b/src/graphics/post_processing.cpp @@ -209,7 +209,7 @@ void PostProcessing::update(float dt) static void renderBloom(GLuint in) { - FullScreenShader::BloomShader::getInstance()->SetTextureUnits(in); + FullScreenShader::BloomShader::getInstance()->setTextureUnits(in); DrawFullScreenEffect(); } @@ -225,7 +225,7 @@ void PostProcessing::renderEnvMap(const float *bSHCoeff, const float *gSHCoeff, FullScreenShader::DegradedIBLShader::getInstance()->use(); glBindVertexArray(SharedObject::FullScreenQuadVAO); - FullScreenShader::DegradedIBLShader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH)); + FullScreenShader::DegradedIBLShader::getInstance()->setTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH)); FullScreenShader::DegradedIBLShader::getInstance()->setUniforms(); } else @@ -233,7 +233,7 @@ void PostProcessing::renderEnvMap(const float *bSHCoeff, const float *gSHCoeff, FullScreenShader::IBLShader::getInstance()->use(); glBindVertexArray(SharedObject::FullScreenQuadVAO); - FullScreenShader::IBLShader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), skybox); + FullScreenShader::IBLShader::getInstance()->setTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), skybox); FullScreenShader::IBLShader::getInstance()->setUniforms(); } @@ -266,7 +266,7 @@ void PostProcessing::renderGI(const core::matrix4 &RHMatrix, const core::vector3 core::matrix4 InvRHMatrix; RHMatrix.getInverse(InvRHMatrix); glDisable(GL_DEPTH_TEST); - FullScreenShader::GlobalIlluminationReconstructionShader::getInstance()->SetTextureUnits( + FullScreenShader::GlobalIlluminationReconstructionShader::getInstance()->setTextureUnits( irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), shr, shg, shb); DrawFullScreenEffect(RHMatrix, InvRHMatrix, rh_extend); } @@ -278,7 +278,7 @@ void PostProcessing::renderSunlight(const core::vector3df &direction, const vide glBlendFunc(GL_ONE, GL_ONE); glBlendEquation(GL_FUNC_ADD); - FullScreenShader::SunLightShader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture()); + FullScreenShader::SunLightShader::getInstance()->setTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture()); DrawFullScreenEffect(direction, col); } @@ -311,13 +311,13 @@ void PostProcessing::renderGaussian3Blur(FrameBuffer &in_fbo, FrameBuffer &auxil { auxiliary.Bind(); - FullScreenShader::Gaussian3VBlurShader::getInstance()->SetTextureUnits(in_fbo.getRTT()[0]); + FullScreenShader::Gaussian3VBlurShader::getInstance()->setTextureUnits(in_fbo.getRTT()[0]); DrawFullScreenEffect(core::vector2df(inv_width, inv_height)); } { in_fbo.Bind(); - FullScreenShader::Gaussian3HBlurShader::getInstance()->SetTextureUnits(auxiliary.getRTT()[0]); + FullScreenShader::Gaussian3HBlurShader::getInstance()->setTextureUnits(auxiliary.getRTT()[0]); DrawFullScreenEffect(core::vector2df(inv_width, inv_height)); } } @@ -331,10 +331,10 @@ void PostProcessing::renderGaussian6BlurLayer(FrameBuffer &in_fbo, size_t layer, { // Used as temp irr_driver->getFBO(FBO_SCALAR_1024).Bind(); - FullScreenShader::Gaussian6VBlurShader::getInstance()->SetTextureUnits(LayerTex); + FullScreenShader::Gaussian6VBlurShader::getInstance()->setTextureUnits(LayerTex); DrawFullScreenEffect(core::vector2df(1.f / UserConfigParams::m_shadows_resolution, 1.f / UserConfigParams::m_shadows_resolution), sigmaV); in_fbo.BindLayer(layer); - FullScreenShader::Gaussian6HBlurShader::getInstance()->SetTextureUnits(irr_driver->getFBO(FBO_SCALAR_1024).getRTT()[0]); + FullScreenShader::Gaussian6HBlurShader::getInstance()->setTextureUnits(irr_driver->getFBO(FBO_SCALAR_1024).getRTT()[0]); DrawFullScreenEffect(core::vector2df(1.f / UserConfigParams::m_shadows_resolution, 1.f / UserConfigParams::m_shadows_resolution), sigmaH); } else @@ -342,7 +342,7 @@ void PostProcessing::renderGaussian6BlurLayer(FrameBuffer &in_fbo, size_t layer, const std::vector &weightsV = getGaussianWeight(sigmaV, 7); glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT); FullScreenShader::ComputeShadowBlurVShader::getInstance()->use(); - FullScreenShader::ComputeShadowBlurVShader::getInstance()->SetTextureUnits(LayerTex); + FullScreenShader::ComputeShadowBlurVShader::getInstance()->setTextureUnits(LayerTex); glBindSampler(FullScreenShader::ComputeShadowBlurVShader::getInstance()->TU_dest, 0); glBindImageTexture(FullScreenShader::ComputeShadowBlurVShader::getInstance()->TU_dest, irr_driver->getFBO(FBO_SCALAR_1024).getRTT()[0], 0, false, 0, GL_WRITE_ONLY, GL_R32F); FullScreenShader::ComputeShadowBlurVShader::getInstance()->setUniforms(core::vector2df(1.f / UserConfigParams::m_shadows_resolution, 1.f / UserConfigParams::m_shadows_resolution), weightsV); @@ -351,7 +351,7 @@ void PostProcessing::renderGaussian6BlurLayer(FrameBuffer &in_fbo, size_t layer, const std::vector &weightsH = getGaussianWeight(sigmaH, 7); glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT | GL_SHADER_IMAGE_ACCESS_BARRIER_BIT); FullScreenShader::ComputeShadowBlurHShader::getInstance()->use(); - FullScreenShader::ComputeShadowBlurHShader::getInstance()->SetTextureUnits(irr_driver->getFBO(FBO_SCALAR_1024).getRTT()[0]); + FullScreenShader::ComputeShadowBlurHShader::getInstance()->setTextureUnits(irr_driver->getFBO(FBO_SCALAR_1024).getRTT()[0]); glBindSampler(FullScreenShader::ComputeShadowBlurHShader::getInstance()->TU_dest, 0); glBindImageTexture(FullScreenShader::ComputeShadowBlurHShader::getInstance()->TU_dest, LayerTex, 0, false, 0, GL_WRITE_ONLY, GL_R32F); FullScreenShader::ComputeShadowBlurHShader::getInstance()->setUniforms(core::vector2df(1.f / UserConfigParams::m_shadows_resolution, 1.f / UserConfigParams::m_shadows_resolution), weightsH); @@ -370,12 +370,12 @@ void PostProcessing::renderGaussian6Blur(FrameBuffer &in_fbo, FrameBuffer &auxil { auxiliary.Bind(); - FullScreenShader::Gaussian6VBlurShader::getInstance()->SetTextureUnits(in_fbo.getRTT()[0]); + FullScreenShader::Gaussian6VBlurShader::getInstance()->setTextureUnits(in_fbo.getRTT()[0]); DrawFullScreenEffect(core::vector2df(inv_width, inv_height), sigmaV); in_fbo.Bind(); - FullScreenShader::Gaussian6HBlurShader::getInstance()->SetTextureUnits(auxiliary.getRTT()[0]); + FullScreenShader::Gaussian6HBlurShader::getInstance()->setTextureUnits(auxiliary.getRTT()[0]); DrawFullScreenEffect(core::vector2df(inv_width, inv_height), sigmaH); } else @@ -383,7 +383,7 @@ void PostProcessing::renderGaussian6Blur(FrameBuffer &in_fbo, FrameBuffer &auxil const std::vector &weightsV = getGaussianWeight(sigmaV, 7); glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT); FullScreenShader::ComputeGaussian6VBlurShader::getInstance()->use(); - FullScreenShader::ComputeGaussian6VBlurShader::getInstance()->SetTextureUnits(in_fbo.getRTT()[0]); + FullScreenShader::ComputeGaussian6VBlurShader::getInstance()->setTextureUnits(in_fbo.getRTT()[0]); glBindSampler(FullScreenShader::ComputeGaussian6VBlurShader::getInstance()->TU_dest, 0); glBindImageTexture(FullScreenShader::ComputeGaussian6VBlurShader::getInstance()->TU_dest, auxiliary.getRTT()[0], 0, false, 0, GL_WRITE_ONLY, GL_RGBA16F); FullScreenShader::ComputeGaussian6VBlurShader::getInstance()->setUniforms(core::vector2df(inv_width, inv_height), weightsV); @@ -392,7 +392,7 @@ void PostProcessing::renderGaussian6Blur(FrameBuffer &in_fbo, FrameBuffer &auxil const std::vector &weightsH = getGaussianWeight(sigmaH, 7); glMemoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT | GL_SHADER_IMAGE_ACCESS_BARRIER_BIT); FullScreenShader::ComputeGaussian6HBlurShader::getInstance()->use(); - FullScreenShader::ComputeGaussian6HBlurShader::getInstance()->SetTextureUnits(auxiliary.getRTT()[0]); + FullScreenShader::ComputeGaussian6HBlurShader::getInstance()->setTextureUnits(auxiliary.getRTT()[0]); glBindSampler(FullScreenShader::ComputeGaussian6HBlurShader::getInstance()->TU_dest, 0); glBindImageTexture(FullScreenShader::ComputeGaussian6HBlurShader::getInstance()->TU_dest, in_fbo.getRTT()[0], 0, false, 0, GL_WRITE_ONLY, GL_RGBA16F); FullScreenShader::ComputeGaussian6HBlurShader::getInstance()->setUniforms(core::vector2df(inv_width, inv_height), weightsH); @@ -409,13 +409,13 @@ void PostProcessing::renderHorizontalBlur(FrameBuffer &in_fbo, FrameBuffer &auxi { auxiliary.Bind(); - FullScreenShader::Gaussian6HBlurShader::getInstance()->SetTextureUnits(in_fbo.getRTT()[0]); + FullScreenShader::Gaussian6HBlurShader::getInstance()->setTextureUnits(in_fbo.getRTT()[0]); DrawFullScreenEffect(core::vector2df(inv_width, inv_height), 2.0f); } { in_fbo.Bind(); - FullScreenShader::Gaussian6HBlurShader::getInstance()->SetTextureUnits(auxiliary.getRTT()[0]); + FullScreenShader::Gaussian6HBlurShader::getInstance()->setTextureUnits(auxiliary.getRTT()[0]); DrawFullScreenEffect(core::vector2df(inv_width, inv_height), 2.0f); } } @@ -431,14 +431,14 @@ void PostProcessing::renderGaussian17TapBlur(FrameBuffer &in_fbo, FrameBuffer &a if (!CVS->supportsComputeShadersFiltering()) { auxiliary.Bind(); - FullScreenShader::Gaussian17TapHShader::getInstance()->SetTextureUnits(in_fbo.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]); + FullScreenShader::Gaussian17TapHShader::getInstance()->setTextureUnits(in_fbo.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]); DrawFullScreenEffect(core::vector2df(inv_width, inv_height)); } else { FullScreenShader::ComputeGaussian17TapHShader::getInstance()->use(); glBindSampler(FullScreenShader::ComputeGaussian17TapHShader::getInstance()->TU_dest, 0); - FullScreenShader::ComputeGaussian17TapHShader::getInstance()->SetTextureUnits(in_fbo.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]); + FullScreenShader::ComputeGaussian17TapHShader::getInstance()->setTextureUnits(in_fbo.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]); glBindImageTexture(FullScreenShader::ComputeGaussian17TapHShader::getInstance()->TU_dest, auxiliary.getRTT()[0], 0, false, 0, GL_WRITE_ONLY, GL_R16F); FullScreenShader::ComputeGaussian17TapHShader::getInstance()->setUniforms(core::vector2df(inv_width, inv_height)); glDispatchCompute((int)in_fbo.getWidth() / 8 + 1, (int)in_fbo.getHeight() / 8 + 1, 1); @@ -451,14 +451,14 @@ void PostProcessing::renderGaussian17TapBlur(FrameBuffer &in_fbo, FrameBuffer &a { in_fbo.Bind(); - FullScreenShader::Gaussian17TapVShader::getInstance()->SetTextureUnits(auxiliary.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]); + FullScreenShader::Gaussian17TapVShader::getInstance()->setTextureUnits(auxiliary.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]); DrawFullScreenEffect(core::vector2df(inv_width, inv_height)); } else { FullScreenShader::ComputeGaussian17TapVShader::getInstance()->use(); glBindSampler(FullScreenShader::ComputeGaussian17TapVShader::getInstance()->TU_dest, 0); - FullScreenShader::ComputeGaussian17TapVShader::getInstance()->SetTextureUnits(auxiliary.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]); + FullScreenShader::ComputeGaussian17TapVShader::getInstance()->setTextureUnits(auxiliary.getRTT()[0], irr_driver->getFBO(FBO_LINEAR_DEPTH).getRTT()[0]); glBindImageTexture(FullScreenShader::ComputeGaussian17TapVShader::getInstance()->TU_dest, in_fbo.getRTT()[0], 0, false, 0, GL_WRITE_ONLY, GL_R16F); FullScreenShader::ComputeGaussian17TapVShader::getInstance()->setUniforms(core::vector2df(inv_width, inv_height)); glDispatchCompute((int)in_fbo.getWidth() / 8 + 1, (int)in_fbo.getHeight() / 8 + 1, 1); @@ -470,7 +470,7 @@ void PostProcessing::renderGaussian17TapBlur(FrameBuffer &in_fbo, FrameBuffer &a void PostProcessing::renderPassThrough(GLuint tex, unsigned width, unsigned height) { - FullScreenShader::PassThroughShader::getInstance()->SetTextureUnits(tex); + FullScreenShader::PassThroughShader::getInstance()->setTextureUnits(tex); DrawFullScreenEffect(width, height); } @@ -493,7 +493,7 @@ void PostProcessing::renderGlow(unsigned tex) FullScreenShader::GlowShader::getInstance()->use(); glBindVertexArray(FullScreenShader::GlowShader::getInstance()->vao); - FullScreenShader::GlowShader::getInstance()->SetTextureUnits(tex); + FullScreenShader::GlowShader::getInstance()->setTextureUnits(tex); FullScreenShader::GlowShader::getInstance()->setUniforms(); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); @@ -506,11 +506,11 @@ void PostProcessing::renderSSAO() // Generate linear depth buffer irr_driver->getFBO(FBO_LINEAR_DEPTH).Bind(); - FullScreenShader::LinearizeDepthShader::getInstance()->SetTextureUnits(irr_driver->getDepthStencilTexture()); + FullScreenShader::LinearizeDepthShader::getInstance()->setTextureUnits(irr_driver->getDepthStencilTexture()); DrawFullScreenEffect(irr_driver->getSceneManager()->getActiveCamera()->getNearValue(), irr_driver->getSceneManager()->getActiveCamera()->getFarValue()); irr_driver->getFBO(FBO_SSAO).Bind(); - FullScreenShader::SSAOShader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_LINEAR_DEPTH)); + FullScreenShader::SSAOShader::getInstance()->setTextureUnits(irr_driver->getRenderTargetTexture(RTT_LINEAR_DEPTH)); glGenerateMipmap(GL_TEXTURE_2D); DrawFullScreenEffect(irr_driver->getSSAORadius(), irr_driver->getSSAOK(), irr_driver->getSSAOSigma()); @@ -543,7 +543,7 @@ void PostProcessing::renderMotionBlur(unsigned , FrameBuffer &in_fbo, FrameBuffe out_fbo.Bind(); glClear(GL_COLOR_BUFFER_BIT); - FullScreenShader::MotionBlurShader::getInstance()->SetTextureUnits(in_fbo.getRTT()[0], irr_driver->getDepthStencilTexture()); + FullScreenShader::MotionBlurShader::getInstance()->setTextureUnits(in_fbo.getRTT()[0], irr_driver->getDepthStencilTexture()); DrawFullScreenEffect( // Todo : use a previousPVMatrix per cam, not global cam->getPreviousPVMatrix(), @@ -554,27 +554,27 @@ void PostProcessing::renderMotionBlur(unsigned , FrameBuffer &in_fbo, FrameBuffe static void renderGodFade(GLuint tex, const SColor &col) { - FullScreenShader::GodFadeShader::getInstance()->SetTextureUnits(tex); + FullScreenShader::GodFadeShader::getInstance()->setTextureUnits(tex); DrawFullScreenEffect(col); } static void renderGodRay(GLuint tex, const core::vector2df &sunpos) { - FullScreenShader::GodRayShader::getInstance()->SetTextureUnits(tex); + FullScreenShader::GodRayShader::getInstance()->setTextureUnits(tex); DrawFullScreenEffect(sunpos); } static void toneMap(FrameBuffer &fbo, GLuint rtt, float vignette_weight) { fbo.Bind(); - FullScreenShader::ToneMapShader::getInstance()->SetTextureUnits(rtt); + FullScreenShader::ToneMapShader::getInstance()->setTextureUnits(rtt); DrawFullScreenEffect(vignette_weight); } static void renderDoF(FrameBuffer &fbo, GLuint rtt) { fbo.Bind(); - FullScreenShader::DepthOfFieldShader::getInstance()->SetTextureUnits(rtt, irr_driver->getDepthStencilTexture()); + FullScreenShader::DepthOfFieldShader::getInstance()->setTextureUnits(rtt, irr_driver->getDepthStencilTexture()); DrawFullScreenEffect(); } @@ -591,7 +591,7 @@ void PostProcessing::applyMLAA() // Pass 1: color edge detection FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->use(); - FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_MLAA_COLORS)); + FullScreenShader::MLAAColorEdgeDetectionSHader::getInstance()->setTextureUnits(irr_driver->getRenderTargetTexture(RTT_MLAA_COLORS)); DrawFullScreenEffect(PIXEL_SIZE); glStencilFunc(GL_EQUAL, 1, ~0); @@ -602,7 +602,7 @@ void PostProcessing::applyMLAA() glClear(GL_COLOR_BUFFER_BIT); FullScreenShader::MLAABlendWeightSHader::getInstance()->use(); - FullScreenShader::MLAABlendWeightSHader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_MLAA_TMP), getTextureGLuint(m_areamap)); + FullScreenShader::MLAABlendWeightSHader::getInstance()->setTextureUnits(irr_driver->getRenderTargetTexture(RTT_MLAA_TMP), getTextureGLuint(m_areamap)); DrawFullScreenEffect(PIXEL_SIZE); // Blit in to tmp1 @@ -612,7 +612,7 @@ void PostProcessing::applyMLAA() irr_driver->getFBO(FBO_MLAA_COLORS).Bind(); FullScreenShader::MLAAGatherSHader::getInstance()->use(); - FullScreenShader::MLAAGatherSHader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_MLAA_BLEND), irr_driver->getRenderTargetTexture(RTT_MLAA_TMP)); + FullScreenShader::MLAAGatherSHader::getInstance()->setTextureUnits(irr_driver->getRenderTargetTexture(RTT_MLAA_BLEND), irr_driver->getRenderTargetTexture(RTT_MLAA_TMP)); DrawFullScreenEffect(PIXEL_SIZE); // Done. @@ -753,11 +753,11 @@ FrameBuffer *PostProcessing::render(scene::ICameraSceneNode * const camnode, boo glBlendFunc(GL_ONE, GL_ONE); glBlendEquation(GL_FUNC_ADD); - FullScreenShader::BloomBlendShader::getInstance()->SetTextureUnits( + FullScreenShader::BloomBlendShader::getInstance()->setTextureUnits( irr_driver->getRenderTargetTexture(RTT_BLOOM_128), irr_driver->getRenderTargetTexture(RTT_BLOOM_256), irr_driver->getRenderTargetTexture(RTT_BLOOM_512)); DrawFullScreenEffect(); - FullScreenShader::LensBlendShader::getInstance()->SetTextureUnits( + FullScreenShader::LensBlendShader::getInstance()->setTextureUnits( irr_driver->getRenderTargetTexture(RTT_LENS_128), irr_driver->getRenderTargetTexture(RTT_LENS_256), irr_driver->getRenderTargetTexture(RTT_LENS_512)); DrawFullScreenEffect(); diff --git a/src/graphics/render_geometry.cpp b/src/graphics/render_geometry.cpp index bb03e5eb7..c349f5000 100644 --- a/src/graphics/render_geometry.cpp +++ b/src/graphics/render_geometry.cpp @@ -376,7 +376,7 @@ struct TexExpander_impl template static void ExpandTex(GLMesh &mesh, const STK::Tuple &TexSwizzle, Args... args) { - T::getInstance()->SetTextureUnits(args...); + T::getInstance()->setTextureUnits(args...); } }; @@ -408,7 +408,7 @@ struct HandleExpander_impl template static void Expand(uint64_t *TextureHandles, const STK::Tuple &TexSwizzle, Args... args) { - T::getInstance()->SetTextureHandles(args...); + T::getInstance()->setTextureHandles(args...); } }; @@ -614,19 +614,19 @@ void IrrDriver::renderSolidSecondPass() if (CVS->isAZDOEnabled()) { - DiffuseHandle = glGetTextureSamplerHandleARB(m_rtts->getRenderTarget(RTT_DIFFUSE), MeshShader::ObjectPass2Shader::getInstance()->SamplersId[0]); + DiffuseHandle = glGetTextureSamplerHandleARB(m_rtts->getRenderTarget(RTT_DIFFUSE), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[0]); if (!glIsTextureHandleResidentARB(DiffuseHandle)) glMakeTextureHandleResidentARB(DiffuseHandle); - SpecularHandle = glGetTextureSamplerHandleARB(m_rtts->getRenderTarget(RTT_SPECULAR), MeshShader::ObjectPass2Shader::getInstance()->SamplersId[1]); + SpecularHandle = glGetTextureSamplerHandleARB(m_rtts->getRenderTarget(RTT_SPECULAR), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[1]); if (!glIsTextureHandleResidentARB(SpecularHandle)) glMakeTextureHandleResidentARB(SpecularHandle); - SSAOHandle = glGetTextureSamplerHandleARB(m_rtts->getRenderTarget(RTT_HALF1_R), MeshShader::ObjectPass2Shader::getInstance()->SamplersId[2]); + SSAOHandle = glGetTextureSamplerHandleARB(m_rtts->getRenderTarget(RTT_HALF1_R), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[2]); if (!glIsTextureHandleResidentARB(SSAOHandle)) glMakeTextureHandleResidentARB(SSAOHandle); - DepthHandle = glGetTextureSamplerHandleARB(getDepthStencilTexture(), MeshShader::ObjectPass2Shader::getInstance()->SamplersId[3]); + DepthHandle = glGetTextureSamplerHandleARB(getDepthStencilTexture(), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[3]); if (!glIsTextureHandleResidentARB(DepthHandle)) glMakeTextureHandleResidentARB(DepthHandle); } @@ -773,9 +773,9 @@ void renderTransparenPass(const std::vector &TexUnits, } if (CVS->isAZDOEnabled()) - Shader::getInstance()->SetTextureHandles(mesh.TextureHandles[0]); + Shader::getInstance()->setTextureHandles(mesh.TextureHandles[0]); else - Shader::getInstance()->SetTextureUnits(getTextureGLuint(mesh.textures[0])); + Shader::getInstance()->setTextureUnits(getTextureGLuint(mesh.textures[0])); custom_unroll_args::template exec(Shader::getInstance(), meshes->at(i)); } } @@ -885,7 +885,7 @@ void IrrDriver::renderTransparent() GLenum itype = mesh.IndexType; size_t count = mesh.IndexCount; // Render the effect - MeshShader::DisplaceShader::getInstance()->SetTextureUnits( + MeshShader::DisplaceShader::getInstance()->setTextureUnits( getTextureGLuint(displaceTex), irr_driver->getRenderTargetTexture(RTT_COLOR), irr_driver->getRenderTargetTexture(RTT_TMP1), diff --git a/src/graphics/render_lighting.cpp b/src/graphics/render_lighting.cpp index 0db45f205..4a8e23f5e 100644 --- a/src/graphics/render_lighting.cpp +++ b/src/graphics/render_lighting.cpp @@ -47,7 +47,7 @@ static void renderPointLights(unsigned count) glBindBuffer(GL_ARRAY_BUFFER, LightShader::PointLightShader::getInstance()->vbo); glBufferSubData(GL_ARRAY_BUFFER, 0, count * sizeof(LightShader::PointLightInfo), PointLightsInfo); - LightShader::PointLightShader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture()); + LightShader::PointLightShader::getInstance()->setTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture()); LightShader::PointLightShader::getInstance()->setUniforms(); glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, count); @@ -159,7 +159,7 @@ void IrrDriver::renderLights(unsigned pointlightcount, bool hasShadow) if (CVS->needRHWorkaround()) { FullScreenShader::NVWorkaroundRadianceHintsConstructionShader::getInstance()->use(); - FullScreenShader::NVWorkaroundRadianceHintsConstructionShader::getInstance()->SetTextureUnits( + FullScreenShader::NVWorkaroundRadianceHintsConstructionShader::getInstance()->setTextureUnits( m_rtts->getRSM().getRTT()[0], m_rtts->getRSM().getRTT()[1], m_rtts->getRSM().getDepthTexture()); for (unsigned i = 0; i < 32; i++) { @@ -170,7 +170,7 @@ void IrrDriver::renderLights(unsigned pointlightcount, bool hasShadow) else { FullScreenShader::RadianceHintsConstructionShader::getInstance()->use(); - FullScreenShader::RadianceHintsConstructionShader::getInstance()->SetTextureUnits( + FullScreenShader::RadianceHintsConstructionShader::getInstance()->setTextureUnits( m_rtts->getRSM().getRTT()[0], m_rtts->getRSM().getRTT()[1], m_rtts->getRSM().getDepthTexture() @@ -212,12 +212,12 @@ void IrrDriver::renderLights(unsigned pointlightcount, bool hasShadow) if (CVS->isESMEnabled()) { - FullScreenShader::ShadowedSunLightShaderESM::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), m_rtts->getShadowFBO().getRTT()[0]); + FullScreenShader::ShadowedSunLightShaderESM::getInstance()->setTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), m_rtts->getShadowFBO().getRTT()[0]); DrawFullScreenEffect(shadowSplit[1], shadowSplit[2], shadowSplit[3], shadowSplit[4]); } else { - FullScreenShader::ShadowedSunLightShaderPCF::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), m_rtts->getShadowFBO().getDepthTexture()); + FullScreenShader::ShadowedSunLightShaderPCF::getInstance()->setTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), m_rtts->getShadowFBO().getDepthTexture()); DrawFullScreenEffect(shadowSplit[1], shadowSplit[2], shadowSplit[3], @@ -264,7 +264,7 @@ void IrrDriver::renderAmbientScatter() glBlendEquation(GL_FUNC_ADD); glBlendFunc(GL_ONE, GL_ONE); - FullScreenShader::FogShader::getInstance()->SetTextureUnits(irr_driver->getDepthStencilTexture()); + FullScreenShader::FogShader::getInstance()->setTextureUnits(irr_driver->getDepthStencilTexture()); DrawFullScreenEffect(1.f / (40.f * start), col); } @@ -295,7 +295,7 @@ void IrrDriver::renderLightsScatter(unsigned pointlightcount) LightShader::PointLightScatterShader::getInstance()->use(); glBindVertexArray(LightShader::PointLightScatterShader::getInstance()->vao); - LightShader::PointLightScatterShader::getInstance()->SetTextureUnits(irr_driver->getDepthStencilTexture()); + LightShader::PointLightScatterShader::getInstance()->setTextureUnits(irr_driver->getDepthStencilTexture()); LightShader::PointLightScatterShader::getInstance()->setUniforms(1.f / (40.f * start), col2); glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, MIN2(pointlightcount, MAXLIGHT)); diff --git a/src/graphics/render_skybox.cpp b/src/graphics/render_skybox.cpp index 81f9126bb..b722f6a65 100644 --- a/src/graphics/render_skybox.cpp +++ b/src/graphics/render_skybox.cpp @@ -407,7 +407,7 @@ void IrrDriver::renderSkybox(const scene::ICameraSceneNode *camera) glBindVertexArray(MeshShader::SkyboxShader::getInstance()->vao); MeshShader::SkyboxShader::getInstance()->setUniforms(); - MeshShader::SkyboxShader::getInstance()->SetTextureUnits(SkyboxCubeMap); + MeshShader::SkyboxShader::getInstance()->setTextureUnits(SkyboxCubeMap); glDrawArrays(GL_TRIANGLES, 0, 3); glBindVertexArray(0); diff --git a/src/graphics/shader.hpp b/src/graphics/shader.hpp index 5685e0828..5eccba626 100644 --- a/src/graphics/shader.hpp +++ b/src/graphics/shader.hpp @@ -325,4 +325,5 @@ public: }; // Shader // ============================================================================ + #endif diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 5381660b5..309fd6df6 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -760,7 +760,7 @@ namespace UtilShader GL_FRAGMENT_SHADER, "importance_sampling_specular.frag"); assignUniforms("PermutationMatrix", "ViewportSize"); TU_Samples = 1; - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); assignTextureUnit(TU_Samples, "samples"); } } @@ -775,7 +775,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/encode_normal.frag", GL_FRAGMENT_SHADER, "object_pass1.frag"); assignUniforms("ModelMatrix", "InverseModelMatrix"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } ObjectRefPass1Shader::ObjectRefPass1Shader() @@ -785,7 +785,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/encode_normal.frag", GL_FRAGMENT_SHADER, "objectref_pass1.frag"); assignUniforms("ModelMatrix", "InverseModelMatrix", "TextureMatrix"); - AssignSamplerNames(m_program, 0, "tex", 1, "glosstex"); + assignSamplerNames(m_program, 0, "tex", 1, "glosstex"); } GrassPass1Shader::GrassPass1Shader() @@ -795,7 +795,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/encode_normal.frag", GL_FRAGMENT_SHADER, "objectref_pass1.frag"); assignUniforms("ModelMatrix", "InverseModelMatrix", "windDir"); - AssignSamplerNames(m_program, 0, "tex", 1, "glosstex"); + assignSamplerNames(m_program, 0, "tex", 1, "glosstex"); } NormalMapShader::NormalMapShader() @@ -805,7 +805,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/encode_normal.frag", GL_FRAGMENT_SHADER, "normalmap.frag"); assignUniforms("ModelMatrix", "InverseModelMatrix"); - AssignSamplerNames(m_program, 1, "normalMap", 0, "DiffuseForAlpha"); + assignSamplerNames(m_program, 1, "normalMap", 0, "DiffuseForAlpha"); } InstancedObjectPass1Shader::InstancedObjectPass1Shader() @@ -817,7 +817,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "instanced_object_pass1.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "glosstex"); + assignSamplerNames(m_program, 0, "glosstex"); } InstancedObjectRefPass1Shader::InstancedObjectRefPass1Shader() @@ -829,7 +829,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "instanced_objectref_pass1.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "tex", 1, "glosstex"); + assignSamplerNames(m_program, 0, "tex", 1, "glosstex"); } InstancedGrassPass1Shader::InstancedGrassPass1Shader() @@ -840,7 +840,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/encode_normal.frag", GL_FRAGMENT_SHADER, "instanced_objectref_pass1.frag"); assignUniforms("windDir"); - AssignSamplerNames(m_program, 0, "tex", 1, "glosstex"); + assignSamplerNames(m_program, 0, "tex", 1, "glosstex"); } InstancedNormalMapShader::InstancedNormalMapShader() @@ -851,7 +851,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/encode_normal.frag", GL_FRAGMENT_SHADER, "instanced_normalmap.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "normalMap", 1, "glossMap"); + assignSamplerNames(m_program, 0, "normalMap", 1, "glossMap"); } // Solid Lit pass shaders @@ -862,7 +862,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/getLightFactor.frag", GL_FRAGMENT_SHADER, "object_pass2.frag"); assignUniforms("ModelMatrix", "TextureMatrix"); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "SpecMap"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "SpecMap"); } InstancedObjectPass2Shader::InstancedObjectPass2Shader() @@ -873,7 +873,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/getLightFactor.frag", GL_FRAGMENT_SHADER, "instanced_object_pass2.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "SpecMap"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "SpecMap"); } InstancedObjectRefPass2Shader::InstancedObjectRefPass2Shader() @@ -884,7 +884,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/getLightFactor.frag", GL_FRAGMENT_SHADER, "instanced_objectref_pass2.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "SpecMap"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "SpecMap"); } DetailledObjectPass2Shader::DetailledObjectPass2Shader() @@ -894,7 +894,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/getLightFactor.frag", GL_FRAGMENT_SHADER, "detailledobject_pass2.frag"); assignUniforms("ModelMatrix"); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "Detail", 5, "SpecMap"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "Detail", 5, "SpecMap"); } InstancedDetailledObjectPass2Shader::InstancedDetailledObjectPass2Shader() @@ -905,7 +905,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/getLightFactor.frag", GL_FRAGMENT_SHADER, "instanced_detailledobject_pass2.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "Detail", 5, "SpecMap"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "Detail", 5, "SpecMap"); } ObjectUnlitShader::ObjectUnlitShader() @@ -914,7 +914,7 @@ namespace MeshShader GL_VERTEX_SHADER, "object_pass.vert", GL_FRAGMENT_SHADER, "object_unlit.frag"); assignUniforms("ModelMatrix", "TextureMatrix"); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "tex"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "tex"); } InstancedObjectUnlitShader::InstancedObjectUnlitShader() @@ -924,7 +924,7 @@ namespace MeshShader GL_VERTEX_SHADER, "instanced_object_pass.vert", GL_FRAGMENT_SHADER, "instanced_object_unlit.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "tex"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "tex"); } ObjectRefPass2Shader::ObjectRefPass2Shader() @@ -934,7 +934,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/getLightFactor.frag", GL_FRAGMENT_SHADER, "objectref_pass2.frag"); assignUniforms("ModelMatrix", "TextureMatrix"); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "SpecMap"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "SpecMap"); } GrassPass2Shader::GrassPass2Shader() @@ -944,7 +944,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/getLightFactor.frag", GL_FRAGMENT_SHADER, "grass_pass2.frag"); assignUniforms("ModelMatrix", "windDir"); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "SpecMap"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "Albedo", 4, "SpecMap"); } InstancedGrassPass2Shader::InstancedGrassPass2Shader() @@ -955,7 +955,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/getLightFactor.frag", GL_FRAGMENT_SHADER, "instanced_grass_pass2.frag"); assignUniforms("windDir", "SunDir"); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "dtex", 4, "Albedo", 5, "SpecMap"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "dtex", 4, "Albedo", 5, "SpecMap"); } SphereMapShader::SphereMapShader() @@ -966,7 +966,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/getPosFromUVDepth.frag", GL_FRAGMENT_SHADER, "objectpass_spheremap.frag"); assignUniforms("ModelMatrix", "InverseModelMatrix"); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "tex"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "tex"); } InstancedSphereMapShader::InstancedSphereMapShader() @@ -978,7 +978,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "utils/getPosFromUVDepth.frag", GL_FRAGMENT_SHADER, "instanced_objectpass_spheremap.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "tex"); + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", 3, "tex"); } SplattingShader::SplattingShader() @@ -989,7 +989,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "splatting.frag"); assignUniforms("ModelMatrix"); - AssignSamplerNames(m_program, + assignSamplerNames(m_program, 0, "DiffuseMap", 1, "SpecularMap", 2, "SSAO", @@ -1006,7 +1006,7 @@ namespace MeshShader GL_VERTEX_SHADER, "object_pass.vert", GL_FRAGMENT_SHADER, "transparent.frag"); assignUniforms("ModelMatrix", "TextureMatrix"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } TransparentFogShader::TransparentFogShader() @@ -1015,7 +1015,7 @@ namespace MeshShader GL_VERTEX_SHADER, "object_pass.vert", GL_FRAGMENT_SHADER, "transparentfog.frag"); assignUniforms("ModelMatrix", "TextureMatrix", "fogmax", "startH", "endH", "start", "end", "col"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } BillboardShader::BillboardShader() @@ -1025,7 +1025,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "billboard.frag"); assignUniforms("ModelViewMatrix", "ProjectionMatrix", "Position", "Size"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } ColorizeShader::ColorizeShader() @@ -1073,7 +1073,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "rsm.frag"); assignUniforms("RSMMatrix", "ModelMatrix", "TextureMatrix"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } InstancedRSMShader::InstancedRSMShader() @@ -1084,7 +1084,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "instanced_rsm.frag"); assignUniforms("RSMMatrix"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } SplattingRSMShader::SplattingRSMShader() @@ -1094,7 +1094,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "splatting_rsm.frag"); assignUniforms("RSMMatrix", "ModelMatrix"); - AssignSamplerNames(m_program, 0, "tex_layout", 1, "tex_detail0", 2, "tex_detail1", 3, "tex_detail2", 4, "tex_detail3"); + assignSamplerNames(m_program, 0, "tex_layout", 1, "tex_detail0", 2, "tex_detail1", 3, "tex_detail2", 4, "tex_detail3"); } InstancedShadowShader::InstancedShadowShader() @@ -1139,7 +1139,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "shadowref.frag"); } assignUniforms("layer", "ModelMatrix"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } InstancedRefShadowShader::InstancedRefShadowShader() @@ -1163,7 +1163,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "instanced_shadowref.frag"); } assignUniforms("layer"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } GrassShadowShader::GrassShadowShader() @@ -1185,7 +1185,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "instanced_shadowref.frag"); } assignUniforms("layer", "ModelMatrix", "windDir"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } InstancedGrassShadowShader::InstancedGrassShadowShader() @@ -1209,7 +1209,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "instanced_shadowref.frag"); } - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); assignUniforms("layer", "windDir"); } @@ -1229,7 +1229,7 @@ namespace MeshShader GL_FRAGMENT_SHADER, "displace.frag"); assignUniforms("ModelMatrix", "dir", "dir2"); - AssignSamplerNames(m_program, + assignSamplerNames(m_program, 0, "displacement_tex", 1, "color_tex", 2, "mask_tex", @@ -1242,7 +1242,7 @@ namespace MeshShader GL_VERTEX_SHADER, "sky.vert", GL_FRAGMENT_SHADER, "sky.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -1293,7 +1293,7 @@ namespace LightShader GL_FRAGMENT_SHADER, "pointlight.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "ntex", 1, "dtex"); + assignSamplerNames(m_program, 0, "ntex", 1, "dtex"); glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -1330,7 +1330,7 @@ namespace LightShader GL_FRAGMENT_SHADER, "pointlightscatter.frag"); assignUniforms("density", "fogcol"); - AssignSamplerNames(m_program, 0, "dtex"); + assignSamplerNames(m_program, 0, "dtex"); glGenVertexArrays(1, &vao); glBindVertexArray(vao); @@ -1387,7 +1387,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "bloom.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } BloomBlendShader::BloomBlendShader() @@ -1397,7 +1397,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "bloomblend.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "tex_128", 1, "tex_256", 2, "tex_512"); + assignSamplerNames(m_program, 0, "tex_128", 1, "tex_256", 2, "tex_512"); } LensBlendShader::LensBlendShader() @@ -1407,7 +1407,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "lensblend.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "tex_128", 1, "tex_256", 2, "tex_512"); + assignSamplerNames(m_program, 0, "tex_128", 1, "tex_256", 2, "tex_512"); } ToneMapShader::ToneMapShader() @@ -1419,7 +1419,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "tonemap.frag"); assignUniforms("vignette_weight"); - AssignSamplerNames(m_program, 0, "text"); + assignSamplerNames(m_program, 0, "text"); } DepthOfFieldShader::DepthOfFieldShader() @@ -1429,7 +1429,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "dof.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "tex", 1, "dtex"); + assignSamplerNames(m_program, 0, "tex", 1, "dtex"); } SunLightShader::SunLightShader() @@ -1443,7 +1443,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "utils/SunMRP.frag", GL_FRAGMENT_SHADER, "sunlight.frag"); - AssignSamplerNames(m_program, 0, "ntex", 1, "dtex"); + assignSamplerNames(m_program, 0, "ntex", 1, "dtex"); assignUniforms("direction", "col"); } @@ -1457,7 +1457,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "utils/SpecularIBL.frag", GL_FRAGMENT_SHADER, "IBL.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "ntex", 1, "dtex", 2, "probe"); + assignSamplerNames(m_program, 0, "ntex", 1, "dtex", 2, "probe"); } DegradedIBLShader::DegradedIBLShader() @@ -1470,7 +1470,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "utils/SpecularIBL.frag", GL_FRAGMENT_SHADER, "degraded_ibl.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "ntex"); + assignSamplerNames(m_program, 0, "ntex"); } ShadowedSunLightShaderPCF::ShadowedSunLightShaderPCF() @@ -1485,7 +1485,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "sunlightshadow.frag"); // Use 8 to circumvent a catalyst bug when binding sampler - AssignSamplerNames(m_program, 0, "ntex", 1, "dtex", 8, "shadowtex"); + assignSamplerNames(m_program, 0, "ntex", 1, "dtex", 8, "shadowtex"); assignUniforms("split0", "split1", "split2", "splitmax", "shadow_res"); } @@ -1501,7 +1501,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "sunlightshadowesm.frag"); // Use 8 to circumvent a catalyst bug when binding sampler - AssignSamplerNames(m_program, 0, "ntex", 1, "dtex", 8, "shadowtex"); + assignSamplerNames(m_program, 0, "ntex", 1, "dtex", 8, "shadowtex"); assignUniforms("split0", "split1", "split2", "splitmax"); } @@ -1522,7 +1522,7 @@ namespace FullScreenShader } assignUniforms("RSMMatrix", "RHMatrix", "extents", "suncol"); - AssignSamplerNames(m_program, 0, "ctex", 1, "ntex", 2, "dtex"); + assignSamplerNames(m_program, 0, "ctex", 1, "ntex", 2, "dtex"); } NVWorkaroundRadianceHintsConstructionShader::NVWorkaroundRadianceHintsConstructionShader() @@ -1534,7 +1534,7 @@ namespace FullScreenShader assignUniforms("RSMMatrix", "RHMatrix", "extents", "slice", "suncol"); - AssignSamplerNames(m_program, 0, "ctex", 1, "ntex", 2, "dtex"); + assignSamplerNames(m_program, 0, "ctex", 1, "ntex", 2, "dtex"); } RHDebug::RHDebug() @@ -1558,7 +1558,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "gi.frag"); assignUniforms("RHMatrix", "InvRHMatrix", "extents"); - AssignSamplerNames(m_program, 0, "ntex", 1, "dtex", 2, "SHR", 3, "SHG", 4, "SHB"); + assignSamplerNames(m_program, 0, "ntex", 1, "dtex", 2, "SHR", 3, "SHG", 4, "SHB"); } Gaussian17TapHShader::Gaussian17TapHShader() @@ -1567,7 +1567,7 @@ namespace FullScreenShader GL_VERTEX_SHADER, "screenquad.vert", GL_FRAGMENT_SHADER, "bilateralH.frag"); assignUniforms("pixel"); - AssignSamplerNames(m_program, 0, "tex", 1, "depth"); + assignSamplerNames(m_program, 0, "tex", 1, "depth"); } ComputeGaussian17TapHShader::ComputeGaussian17TapHShader() @@ -1575,7 +1575,7 @@ namespace FullScreenShader loadProgram(OBJECT, GL_COMPUTE_SHADER, "bilateralH.comp"); TU_dest = 2; assignUniforms("pixel"); - AssignSamplerNames(m_program, 0, "source", 1, "depth"); + assignSamplerNames(m_program, 0, "source", 1, "depth"); assignTextureUnit(TU_dest, "dest"); } @@ -1585,7 +1585,7 @@ namespace FullScreenShader GL_COMPUTE_SHADER, "gaussian6h.comp"); TU_dest = 1; assignUniforms("pixel", "weights"); - AssignSamplerNames(m_program, 0, "source"); + assignSamplerNames(m_program, 0, "source"); assignTextureUnit(TU_dest, "dest"); } @@ -1595,7 +1595,7 @@ namespace FullScreenShader GL_COMPUTE_SHADER, "blurshadowH.comp"); TU_dest = 1; assignUniforms("pixel", "weights"); - AssignSamplerNames(m_program, 0, "source"); + assignSamplerNames(m_program, 0, "source"); assignTextureUnit(TU_dest, "dest"); } @@ -1606,7 +1606,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "gaussian6h.frag"); assignUniforms("pixel", "sigma"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } HorizontalBlurShader::HorizontalBlurShader() @@ -1616,7 +1616,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "gaussian6h.frag"); assignUniforms("pixel"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } Gaussian3HBlurShader::Gaussian3HBlurShader() @@ -1626,7 +1626,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "gaussian3h.frag"); assignUniforms("pixel"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } Gaussian17TapVShader::Gaussian17TapVShader() @@ -1636,7 +1636,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "bilateralV.frag"); assignUniforms("pixel"); - AssignSamplerNames(m_program, 0, "tex", 1, "depth"); + assignSamplerNames(m_program, 0, "tex", 1, "depth"); } ComputeGaussian17TapVShader::ComputeGaussian17TapVShader() @@ -1645,7 +1645,7 @@ namespace FullScreenShader GL_COMPUTE_SHADER, "bilateralV.comp"); TU_dest = 2; assignUniforms("pixel"); - AssignSamplerNames(m_program, 0, "source", 1, "depth"); + assignSamplerNames(m_program, 0, "source", 1, "depth"); assignTextureUnit(TU_dest, "dest"); } @@ -1655,7 +1655,7 @@ namespace FullScreenShader GL_COMPUTE_SHADER, "gaussian6v.comp"); TU_dest = 1; assignUniforms("pixel", "weights"); - AssignSamplerNames(m_program, 0, "source"); + assignSamplerNames(m_program, 0, "source"); assignTextureUnit(TU_dest, "dest"); } @@ -1665,7 +1665,7 @@ namespace FullScreenShader GL_COMPUTE_SHADER, "blurshadowV.comp"); TU_dest = 1; assignUniforms("pixel", "weights"); - AssignSamplerNames(m_program, 0, "source"); + assignSamplerNames(m_program, 0, "source"); assignTextureUnit(TU_dest, "dest"); } @@ -1676,7 +1676,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "gaussian6v.frag"); assignUniforms("pixel", "sigma"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } Gaussian3VBlurShader::Gaussian3VBlurShader() @@ -1686,7 +1686,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "gaussian3v.frag"); assignUniforms("pixel"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } PassThroughShader::PassThroughShader() @@ -1696,7 +1696,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "passthrough.frag"); assignUniforms("width", "height"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } LayerPassThroughShader::LayerPassThroughShader() @@ -1717,7 +1717,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "linearizedepth.frag"); assignUniforms("zn", "zf"); - AssignSamplerNames(m_program, 0, "texture"); + assignSamplerNames(m_program, 0, "texture"); } @@ -1726,7 +1726,7 @@ namespace FullScreenShader loadProgram(OBJECT, GL_COMPUTE_SHADER, "Lightspaceboundingbox.comp", GL_COMPUTE_SHADER, "utils/getPosFromUVDepth.frag"); - AssignSamplerNames(m_program, 0, "depth"); + assignSamplerNames(m_program, 0, "depth"); assignUniforms("SunCamMatrix", "split0", "split1", "split2", "splitmax"); GLuint block_idx = glGetProgramResourceIndex(m_program, GL_SHADER_STORAGE_BLOCK, "BoundingBoxes"); glShaderStorageBlockBinding(m_program, block_idx, 2); @@ -1748,7 +1748,7 @@ namespace FullScreenShader loadProgram(OBJECT, GL_COMPUTE_SHADER, "depthhistogram.comp", GL_COMPUTE_SHADER, "utils/getPosFromUVDepth.frag"); - AssignSamplerNames(m_program, 0, "depth"); + assignSamplerNames(m_program, 0, "depth"); GLuint block_idx = glGetProgramResourceIndex(m_program, GL_SHADER_STORAGE_BLOCK, "Histogram"); glShaderStorageBlockBinding(m_program, block_idx, 1); @@ -1761,7 +1761,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "glow.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); vao = createVAO(m_program); } @@ -1774,7 +1774,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "ssao.frag"); assignUniforms("radius", "k", "sigma"); - AssignSamplerNames(m_program, 0, "dtex"); + assignSamplerNames(m_program, 0, "dtex"); } FogShader::FogShader() @@ -1785,7 +1785,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "fog.frag"); assignUniforms("density", "col"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } MotionBlurShader::MotionBlurShader() @@ -1795,7 +1795,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "utils/getPosFromUVDepth.frag", GL_FRAGMENT_SHADER, "motion_blur.frag"); assignUniforms("previous_viewproj", "center", "boost_amount", "mask_radius"); - AssignSamplerNames(m_program, 0, "color_buffer", 1, "dtex"); + assignSamplerNames(m_program, 0, "color_buffer", 1, "dtex"); } GodFadeShader::GodFadeShader() @@ -1805,7 +1805,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "godfade.frag"); assignUniforms("col"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } GodRayShader::GodRayShader() @@ -1815,7 +1815,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "godray.frag"); assignUniforms("sunpos"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } MLAAColorEdgeDetectionSHader::MLAAColorEdgeDetectionSHader() @@ -1825,7 +1825,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "mlaa_color1.frag"); assignUniforms("PIXEL_SIZE"); - AssignSamplerNames(m_program, 0, "colorMapG"); + assignSamplerNames(m_program, 0, "colorMapG"); } MLAABlendWeightSHader::MLAABlendWeightSHader() @@ -1835,7 +1835,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "mlaa_blend2.frag"); assignUniforms("PIXEL_SIZE"); - AssignSamplerNames(m_program, 0, "edgesMap", 1, "areaMap"); + assignSamplerNames(m_program, 0, "edgesMap", 1, "areaMap"); } MLAAGatherSHader::MLAAGatherSHader() @@ -1845,7 +1845,7 @@ namespace FullScreenShader GL_FRAGMENT_SHADER, "mlaa_neigh3.frag"); assignUniforms("PIXEL_SIZE"); - AssignSamplerNames(m_program, 0, "blendMap", 1, "colorMap"); + assignSamplerNames(m_program, 0, "blendMap", 1, "colorMap"); } } @@ -1858,7 +1858,7 @@ namespace UIShader GL_VERTEX_SHADER, "primitive2dlist.vert", GL_FRAGMENT_SHADER, "transparent.frag"); assignUniforms(); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } TextureRectShader::TextureRectShader() @@ -1868,7 +1868,7 @@ namespace UIShader GL_FRAGMENT_SHADER, "texturedquad.frag"); assignUniforms("center", "size", "texcenter", "texsize"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } UniformColoredTextureRectShader::UniformColoredTextureRectShader() @@ -1879,7 +1879,7 @@ namespace UIShader assignUniforms("center", "size", "texcenter", "texsize", "color"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); } ColoredTextureRectShader::ColoredTextureRectShader() @@ -1889,7 +1889,7 @@ namespace UIShader GL_FRAGMENT_SHADER, "colortexturedquad.frag"); assignUniforms("center", "size", "texcenter", "texsize"); - AssignSamplerNames(m_program, 0, "tex"); + assignSamplerNames(m_program, 0, "tex"); glGenVertexArrays(1, &vao); glBindVertexArray(vao); diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index 65b7f444d..d2976b54a 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -21,6 +21,7 @@ #include "config/user_config.hpp" #include "graphics/shader.hpp" #include "graphics/shaders_util.hpp" +#include "graphics/texture_read.hpp" #include #include @@ -48,7 +49,8 @@ public: ColoredLine(); }; -class SpecularIBLGenerator : public Shader, public TextureRead +class SpecularIBLGenerator : public Shader, + public TextureRead { public: GLuint TU_Samples; @@ -59,13 +61,15 @@ public: namespace MeshShader { -class ObjectPass1Shader : public Shader, public TextureRead +class ObjectPass1Shader : public Shader, + public TextureRead { public: ObjectPass1Shader(); }; -class ObjectRefPass1Shader : public Shader, public TextureRead +class ObjectRefPass1Shader : public Shader, + public TextureRead { public: ObjectRefPass1Shader(); diff --git a/src/graphics/shaders_util.hpp b/src/graphics/shaders_util.hpp index 60adfa715..2fafb8f4a 100644 --- a/src/graphics/shaders_util.hpp +++ b/src/graphics/shaders_util.hpp @@ -344,92 +344,4 @@ struct BindTexture } }; - -template -class TextureRead -{ -private: - template - void AssignTextureNames_impl(GLuint) - { - static_assert(N == sizeof...(tp), "Wrong number of texture name"); - } - - template - void AssignTextureNames_impl(GLuint Program, GLuint TexUnit, const char *name, Args...args) - { - GLuint location = glGetUniformLocation(Program, name); - TextureLocation.push_back(location); - glUniform1i(location, TexUnit); - TextureUnits.push_back(TexUnit); - AssignTextureNames_impl(Program, args...); - } - -protected: - std::vector TextureUnits; - std::vector TextureType; - std::vector TextureLocation; -public: - template - void AssignSamplerNames(GLuint Program, Args...args) - { - CreateSamplers::exec(SamplersId, TextureType); - - glUseProgram(Program); - AssignTextureNames_impl<0>(Program, args...); - glUseProgram(0); - } - - template - void SetTextureUnits_impl() - { - static_assert(N == sizeof...(tp), "Not enough texture set"); - } - - template - void SetTextureUnits_impl(GLuint texid, TexIds... args) - { - setTextureSampler(TextureType[N], TextureUnits[N], texid, SamplersId[N]); - SetTextureUnits_impl(args...); - } - - - template - void SetTextureHandles_impl() - { - static_assert(N == sizeof...(tp), "Not enough handle set"); - } - - template - void SetTextureHandles_impl(uint64_t handle, HandlesId... args) - { - if (handle) - glUniformHandleui64ARB(TextureLocation[N], handle); - SetTextureHandles_impl(args...); - } - -public: - std::vector SamplersId; - - template - void SetTextureUnits(TexIds... args) - { - if (getGLSLVersion() >= 330) - SetTextureUnits_impl<0>(args...); - else - BindTexture::template exec<0>(TextureUnits, args...); - } - - ~TextureRead() - { - for (unsigned i = 0; i < SamplersId.size(); i++) - glDeleteSamplers(1, &SamplersId[i]); - } - - template - void SetTextureHandles(HandlesId... ids) - { - SetTextureHandles_impl<0>(ids...); - } -}; #endif diff --git a/src/graphics/shadow_matrixes.cpp b/src/graphics/shadow_matrixes.cpp index 0d60a3d5a..77f7a663d 100644 --- a/src/graphics/shadow_matrixes.cpp +++ b/src/graphics/shadow_matrixes.cpp @@ -148,7 +148,7 @@ void IrrDriver::UpdateSplitAndLightcoordRangeFromComputeShaders(size_t width, si glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 2, CBBssbo); FullScreenShader::LightspaceBoundingBoxShader::getInstance()->use(); - FullScreenShader::LightspaceBoundingBoxShader::getInstance()->SetTextureUnits(getDepthStencilTexture()); + FullScreenShader::LightspaceBoundingBoxShader::getInstance()->setTextureUnits(getDepthStencilTexture()); FullScreenShader::LightspaceBoundingBoxShader::getInstance()->setUniforms(m_suncam->getViewMatrix(), shadowSplit[1], shadowSplit[2], shadowSplit[3], shadowSplit[4]); glDispatchCompute((int)width / 64, (int)height / 64, 1); diff --git a/src/graphics/stkbillboard.cpp b/src/graphics/stkbillboard.cpp index 68d5fa978..7b8c336b5 100644 --- a/src/graphics/stkbillboard.cpp +++ b/src/graphics/stkbillboard.cpp @@ -69,7 +69,7 @@ void STKBillboard::render() compressTexture(tex, true, true); GLuint texid = getTextureGLuint(tex); MeshShader::BillboardShader::getInstance()->use(); - MeshShader::BillboardShader::getInstance()->SetTextureUnits(texid); + MeshShader::BillboardShader::getInstance()->setTextureUnits(texid); MeshShader::BillboardShader::getInstance()->setUniforms(irr_driver->getViewMatrix(), irr_driver->getProjMatrix(), pos, Size); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glBindVertexArray(0); diff --git a/src/graphics/stkmesh.cpp b/src/graphics/stkmesh.cpp index fc264fccf..fd9338d33 100644 --- a/src/graphics/stkmesh.cpp +++ b/src/graphics/stkmesh.cpp @@ -308,7 +308,7 @@ SetTexture(GLMesh &mesh, unsigned i, bool isSrgb, const std::string &matname) if (CVS->isAZDOEnabled()) { if (!mesh.TextureHandles[i]) - mesh.TextureHandles[i] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[i]), MeshShader::ObjectPass1Shader::getInstance()->SamplersId[0]); + mesh.TextureHandles[i] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[i]), MeshShader::ObjectPass1Shader::getInstance()->m_sampler_ids[0]); if (!glIsTextureHandleResidentARB(mesh.TextureHandles[i])) glMakeTextureHandleResidentARB(mesh.TextureHandles[i]); } @@ -381,7 +381,7 @@ void InitTexturesTransparent(GLMesh &mesh) if (CVS->isAZDOEnabled()) { if (!mesh.TextureHandles[0]) - mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::ObjectPass1Shader::getInstance()->SamplersId[0]); + mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::ObjectPass1Shader::getInstance()->m_sampler_ids[0]); if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0])) glMakeTextureHandleResidentARB(mesh.TextureHandles[0]); } diff --git a/src/graphics/stkmeshscenenode.cpp b/src/graphics/stkmeshscenenode.cpp index 1e96764e9..4a5e75f25 100644 --- a/src/graphics/stkmeshscenenode.cpp +++ b/src/graphics/stkmeshscenenode.cpp @@ -288,13 +288,13 @@ void STKMeshSceneNode::render() if (CVS->isAZDOEnabled()) { if (!mesh.TextureHandles[0]) - mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::ObjectPass1Shader::getInstance()->SamplersId[0]); + mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::ObjectPass1Shader::getInstance()->m_sampler_ids[0]); if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0])) glMakeTextureHandleResidentARB(mesh.TextureHandles[0]); - MeshShader::ObjectPass1Shader::getInstance()->SetTextureHandles(mesh.TextureHandles[0]); + MeshShader::ObjectPass1Shader::getInstance()->setTextureHandles(mesh.TextureHandles[0]); } else - MeshShader::ObjectPass1Shader::getInstance()->SetTextureUnits(getTextureGLuint(mesh.textures[0])); + MeshShader::ObjectPass1Shader::getInstance()->setTextureUnits(getTextureGLuint(mesh.textures[0])); MeshShader::ObjectPass1Shader::getInstance()->setUniforms(AbsoluteTransformation, invmodel); assert(mesh.vao); glBindVertexArray(mesh.vao); @@ -325,30 +325,30 @@ void STKMeshSceneNode::render() if (CVS->isAZDOEnabled()) { - GLuint64 DiffuseHandle = glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_DIFFUSE), MeshShader::ObjectPass2Shader::getInstance()->SamplersId[0]); + GLuint64 DiffuseHandle = glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_DIFFUSE), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[0]); if (!glIsTextureHandleResidentARB(DiffuseHandle)) glMakeTextureHandleResidentARB(DiffuseHandle); - GLuint64 SpecularHandle = glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_SPECULAR), MeshShader::ObjectPass2Shader::getInstance()->SamplersId[1]); + GLuint64 SpecularHandle = glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_SPECULAR), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[1]); if (!glIsTextureHandleResidentARB(SpecularHandle)) glMakeTextureHandleResidentARB(SpecularHandle); - GLuint64 SSAOHandle = glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_HALF1_R), MeshShader::ObjectPass2Shader::getInstance()->SamplersId[2]); + GLuint64 SSAOHandle = glGetTextureSamplerHandleARB(irr_driver->getRenderTargetTexture(RTT_HALF1_R), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[2]); if (!glIsTextureHandleResidentARB(SSAOHandle)) glMakeTextureHandleResidentARB(SSAOHandle); if (!mesh.TextureHandles[0]) - mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::ObjectPass2Shader::getInstance()->SamplersId[0]); + mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[0]); if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0])) glMakeTextureHandleResidentARB(mesh.TextureHandles[0]); if (!mesh.TextureHandles[1]) - mesh.TextureHandles[1] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[1]), MeshShader::ObjectPass2Shader::getInstance()->SamplersId[0]); + mesh.TextureHandles[1] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[1]), MeshShader::ObjectPass2Shader::getInstance()->m_sampler_ids[0]); if (!glIsTextureHandleResidentARB(mesh.TextureHandles[1])) glMakeTextureHandleResidentARB(mesh.TextureHandles[1]); - MeshShader::ObjectPass2Shader::getInstance()->SetTextureHandles(DiffuseHandle, SpecularHandle, SSAOHandle, mesh.TextureHandles[0], mesh.TextureHandles[1]); + MeshShader::ObjectPass2Shader::getInstance()->setTextureHandles(DiffuseHandle, SpecularHandle, SSAOHandle, mesh.TextureHandles[0], mesh.TextureHandles[1]); } else - MeshShader::ObjectPass2Shader::getInstance()->SetTextureUnits( + MeshShader::ObjectPass2Shader::getInstance()->setTextureUnits( irr_driver->getRenderTargetTexture(RTT_DIFFUSE), irr_driver->getRenderTargetTexture(RTT_SPECULAR), irr_driver->getRenderTargetTexture(RTT_HALF1_R), @@ -422,13 +422,13 @@ void STKMeshSceneNode::render() if (CVS->isAZDOEnabled()) { if (!mesh.TextureHandles[0]) - mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::TransparentFogShader::getInstance()->SamplersId[0]); + mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::TransparentFogShader::getInstance()->m_sampler_ids[0]); if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0])) glMakeTextureHandleResidentARB(mesh.TextureHandles[0]); - MeshShader::TransparentFogShader::getInstance()->SetTextureHandles(mesh.TextureHandles[0]); + MeshShader::TransparentFogShader::getInstance()->setTextureHandles(mesh.TextureHandles[0]); } else - MeshShader::TransparentFogShader::getInstance()->SetTextureUnits(getTextureGLuint(mesh.textures[0])); + MeshShader::TransparentFogShader::getInstance()->setTextureUnits(getTextureGLuint(mesh.textures[0])); MeshShader::TransparentFogShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix, fogmax, startH, endH, start, end, col); assert(mesh.vao); @@ -452,13 +452,13 @@ void STKMeshSceneNode::render() if (CVS->isAZDOEnabled()) { if (!mesh.TextureHandles[0]) - mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::TransparentShader::getInstance()->SamplersId[0]); + mesh.TextureHandles[0] = glGetTextureSamplerHandleARB(getTextureGLuint(mesh.textures[0]), MeshShader::TransparentShader::getInstance()->m_sampler_ids[0]); if (!glIsTextureHandleResidentARB(mesh.TextureHandles[0])) glMakeTextureHandleResidentARB(mesh.TextureHandles[0]); - MeshShader::TransparentShader::getInstance()->SetTextureHandles(mesh.TextureHandles[0]); + MeshShader::TransparentShader::getInstance()->setTextureHandles(mesh.TextureHandles[0]); } else - MeshShader::TransparentShader::getInstance()->SetTextureUnits(getTextureGLuint(mesh.textures[0])); + MeshShader::TransparentShader::getInstance()->setTextureUnits(getTextureGLuint(mesh.textures[0])); MeshShader::TransparentShader::getInstance()->setUniforms(AbsoluteTransformation, mesh.TextureMatrix); assert(mesh.vao); diff --git a/src/graphics/texture_read.hpp b/src/graphics/texture_read.hpp new file mode 100644 index 000000000..5063ed98d --- /dev/null +++ b/src/graphics/texture_read.hpp @@ -0,0 +1,160 @@ +// SuperTuxKart - a fun racing game with go-kart +// Copyright (C) 2014-2015 SuperTuxKart-Team +// +// This program 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 3 +// of the License, or (at your option) any later version. +// +// This program 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 this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#ifndef HEADER_TEXTURE_READ_HPP +#define HEADER_TEXTURE_READ_HPP + +#include "shaders_util.hpp" + +template +class TextureRead +{ +protected: + std::vector m_texture_units; + std::vector m_texture_type; + std::vector m_texture_location; + +public: + std::vector m_sampler_ids; + + // A variadic template to assign texture names + // =========================================== +private: + /** End of recursive variadic template AssigTextureNames. It just + * checks if the number of arguments is correct.*/ + template + void assignTextureNamesImpl(GLuint) + { + static_assert(N == sizeof...(tp), "Wrong number of texture name"); + } // assignTextureNamesImpl + + // ------------------------------------------------------------------------ + /** Recursive implementation, peeling the texture unit and name off the + * list of arguments. + */ + template + void assignTextureNamesImpl(GLuint program, GLuint tex_unit, + const char *name, Args...args) + { + GLuint location = glGetUniformLocation(program, name); + m_texture_location.push_back(location); + glUniform1i(location, tex_unit); + m_texture_units.push_back(tex_unit); + assignTextureNamesImpl(program, args...); + } // assignTextureNamesImpl + + // ------------------------------------------------------------------------ +protected: + /** The protected interface for setting sampler names - it is only called + * from instances. + */ + template + void assignSamplerNames(GLuint program, Args...args) + { + CreateSamplers::exec(m_sampler_ids, m_texture_type); + + glUseProgram(program); + assignTextureNamesImpl<0>(program, args...); + glUseProgram(0); + } // AssignSamplerNames + + + // Variadic template implementation of setTextureUnits + // =================================================== + /** End of recursion, just check if number of arguments is correct. */ + template + void setTextureUnitsImpl() + { + static_assert(N == sizeof...(tp), "Not enough texture set"); + } // setTextureUnitsImpl + + // ------------------------------------------------------------------------ + /** The recursive implementation. + */ + template + void setTextureUnitsImpl(GLuint texid, TexIds... args) + { + setTextureSampler(m_texture_type[N], m_texture_units[N], texid, + m_sampler_ids[N]); + setTextureUnitsImpl(args...); + } // setTextureUnitsImpl + + // ------------------------------------------------------------------------ +public: + /** Public implementation of setTextureUnits. + */ + template + void setTextureUnits(TexIds... args) + { + if (getGLSLVersion() >= 330) + setTextureUnitsImpl<0>(args...); + else + BindTexture::template exec<0>(m_texture_units, args...); + } // SetTextureUnits + + + // ======================================================================== + // Variadic template implementation of setTextureHandles. + + /** End of recursion, just checks at compile time if number of arguments + * is correct. + * \param N number of arguments. */ + template + void setTextureHandlesImpl() + { + static_assert(N == sizeof...(tp), "Not enough handle set"); + } // setTextureHandlesImpl + + // ------------------------------------------------------------------------ + /** Recursive implementation of setTextureHandles. + * \param N The number of the current argument in the recursion (or the + * recursion depth). + * \param handle The texture handle to set. + */ + template + void setTextureHandlesImpl(uint64_t handle, HandlesId... args) + { + if (handle) + glUniformHandleui64ARB(m_texture_location[N], handle); + setTextureHandlesImpl(args...); + } // setTextureHandlesImpl + + // ------------------------------------------------------------------------ +public: + /** The protected interface. + * \param ids The ids of all texture handls. + */ + template + void setTextureHandles(HandlesId... ids) + { + setTextureHandlesImpl<0>(ids...); + } // SetTextureHandles + +public: + // ------------------------------------------------------------------------ + /** Destructor which frees al lsampler ids. + */ + ~TextureRead() + { + for (unsigned i = 0; i < m_sampler_ids.size(); i++) + glDeleteSamplers(1, &m_sampler_ids[i]); + } // ~TextureRead + + +}; // class TextureRead + +#endif