From da2becd57e07471efb5b6058f614fe926504cb8e Mon Sep 17 00:00:00 2001 From: Sergey Lipskiy Date: Sun, 10 Sep 2017 14:52:39 +0700 Subject: [PATCH] Fix ShaderBlender1::write method. Up ShaderStorage version. Fixed #1553 Resetting once breaks rendering via transparency of many textures. Thanks Logan McNaughton for finding the root of the problem. --- .../GLSL/glsl_CombinerProgramBuilder.cpp | 22 +++++++------------ .../OpenGLContext/GLSL/glsl_ShaderPart.h | 2 +- .../OpenGLContext/GLSL/glsl_ShaderStorage.h | 2 +- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp index 1a499380..bf9bc46b 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramBuilder.cpp @@ -469,13 +469,6 @@ public: if (_glinfo.isGLESX) { m_part = " muxPM[0] = clampedColor; \n" - ; - if (g_cycleType == G_CYC_2CYCLE) { - m_part += - " muxPM[1] = clampedColor; \n" - ; - } - m_part += " if (uForceBlendCycle1 != 0) { \n" " muxA[0] = clampedColor.a; \n" " lowp float muxa; \n" @@ -533,13 +526,6 @@ public: } else { m_part = " muxPM[0] = clampedColor; \n" - ; - if (g_cycleType == G_CYC_2CYCLE) { - m_part += - " muxPM[1] = clampedColor; \n" - ; - } - m_part += " if (uForceBlendCycle1 != 0) { \n" " muxA[0] = clampedColor.a; \n" " muxB[0] = 1.0 - muxA[uBlendMux1[1]]; \n" @@ -550,6 +536,14 @@ public: } } + + void write(std::stringstream & shader) const override + { + if (g_cycleType == G_CYC_2CYCLE) + shader << " muxPM[1] = clampedColor; \n"; + + ShaderPart::write(shader); + } }; class ShaderBlender2 : public ShaderPart diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_ShaderPart.h b/src/Graphics/OpenGLContext/GLSL/glsl_ShaderPart.h index 7686c15f..7ed68857 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_ShaderPart.h +++ b/src/Graphics/OpenGLContext/GLSL/glsl_ShaderPart.h @@ -7,7 +7,7 @@ namespace glsl { class ShaderPart { public: - void write(std::stringstream & shader) const + virtual void write(std::stringstream & shader) const { shader << m_part; } diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_ShaderStorage.h b/src/Graphics/OpenGLContext/GLSL/glsl_ShaderStorage.h index 8b688c29..1ccb7a8a 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_ShaderStorage.h +++ b/src/Graphics/OpenGLContext/GLSL/glsl_ShaderStorage.h @@ -17,7 +17,7 @@ namespace glsl { bool loadShadersStorage(graphics::Combiners & _combiners); private: - const u32 m_formatVersion = 0x13U; + const u32 m_formatVersion = 0x14U; const opengl::GLInfo & m_glinfo; opengl::CachedUseProgram * m_useProgram; };