diff --git a/src/gl/renderer/gl_postprocess.cpp b/src/gl/renderer/gl_postprocess.cpp index a57b80b59..3d513fc9e 100644 --- a/src/gl/renderer/gl_postprocess.cpp +++ b/src/gl/renderer/gl_postprocess.cpp @@ -529,8 +529,9 @@ void FGLRenderer::ColormapScene(int fixedcm) float m[] = { scm->ColorizeEnd[0] - scm->ColorizeStart[0], scm->ColorizeEnd[1] - scm->ColorizeStart[1], scm->ColorizeEnd[2] - scm->ColorizeStart[2], 0.f }; - mColormapShader->MapStart.Set(scm->ColorizeStart[0], scm->ColorizeStart[1], scm->ColorizeStart[2], 0.f); - mColormapShader->MapRange.Set(m); + mColormapShader->Uniforms->MapStart = { scm->ColorizeStart[0], scm->ColorizeStart[1], scm->ColorizeStart[2], 0.f }; + mColormapShader->Uniforms->MapRange = m; + mColormapShader->Uniforms.Set(); RenderScreenQuad(); mBuffers->NextTexture(); diff --git a/src/gl/shaders/gl_colormapshader.cpp b/src/gl/shaders/gl_colormapshader.cpp index 5f9680c41..a288d9f04 100644 --- a/src/gl/shaders/gl_colormapshader.cpp +++ b/src/gl/shaders/gl_colormapshader.cpp @@ -34,13 +34,14 @@ void FColormapShader::Bind() auto &shader = mShader; if (!shader) { + FString prolog = Uniforms.CreateDeclaration("Uniforms", UniformBlock::Desc()); + shader.Compile(FShaderProgram::Vertex, "shaders/glsl/screenquad.vp", "", 330); - shader.Compile(FShaderProgram::Fragment, "shaders/glsl/colormap.fp", "", 330); + shader.Compile(FShaderProgram::Fragment, "shaders/glsl/colormap.fp", prolog, 330); shader.SetFragDataLocation(0, "FragColor"); shader.Link("shaders/glsl/colormap"); shader.SetAttribLocation(0, "PositionInProjection"); - MapStart.Init(shader, "uFixedColormapStart"); - MapRange.Init(shader, "uFixedColormapRange"); + Uniforms.Init(shader); } shader.Bind(); } diff --git a/src/gl/shaders/gl_colormapshader.h b/src/gl/shaders/gl_colormapshader.h index b20c23a4c..80d4b3f11 100644 --- a/src/gl/shaders/gl_colormapshader.h +++ b/src/gl/shaders/gl_colormapshader.h @@ -9,8 +9,23 @@ public: void Bind(); FBufferedUniformSampler SceneTexture; - FUniform4f MapStart; - FUniform4f MapRange; + + struct UniformBlock + { + FVector4 MapStart; + FVector4 MapRange; + + static std::vector Desc() + { + return + { + { "uFixedColormapStart", UniformType::Vec4, offsetof(UniformBlock, MapStart) }, + { "uFixedColormapRange", UniformType::Vec4, offsetof(UniformBlock, MapRange) }, + }; + } + }; + + ShaderUniforms Uniforms; private: diff --git a/wadsrc/static/shaders/glsl/colormap.fp b/wadsrc/static/shaders/glsl/colormap.fp index e86429c37..fe1d9ef70 100644 --- a/wadsrc/static/shaders/glsl/colormap.fp +++ b/wadsrc/static/shaders/glsl/colormap.fp @@ -3,8 +3,6 @@ in vec2 TexCoord; out vec4 FragColor; uniform sampler2D tex; -uniform vec4 uFixedColormapStart; -uniform vec4 uFixedColormapRange; void main() {