diff Framework/Scene2D/Internals/OpenGLFloatTextureProgram.cpp @ 914:4d1f57773b5b

Added image inversion support in GrayscaleStyleConfigurator + OpenGLFloatTextureProgram
author Benjamin Golinvaux <bgo@osimis.io>
date Fri, 19 Jul 2019 10:54:03 +0200
parents ed783cbc92d7
children 1091b2adeb5a
line wrap: on
line diff
--- a/Framework/Scene2D/Internals/OpenGLFloatTextureProgram.cpp	Fri Jul 19 10:30:40 2019 +0200
+++ b/Framework/Scene2D/Internals/OpenGLFloatTextureProgram.cpp	Fri Jul 19 10:54:03 2019 +0200
@@ -33,6 +33,7 @@
   "uniform float u_slope;                            \n"
   "uniform float u_windowCenter;                     \n"
   "uniform float u_windowWidth;                      \n"
+  "uniform bool  u_invert;                           \n"
   "uniform sampler2D u_texture;                      \n"
   "varying vec2 v_texcoord;                          \n"
   "void main()                                       \n"
@@ -50,6 +51,8 @@
   "    if (v >= 1.0)                                 \n"
   "      v = 1.0;                                    \n"
   "  }                                               \n"
+  "  if (u_invert)                                   \n"
+  "      v = 1.0 - v;                                \n"
   "  gl_FragColor = vec4(v, v, v, 1);                \n"
   "}";
 
@@ -133,7 +136,8 @@
     void OpenGLFloatTextureProgram::Apply(Data& data,
                                           const AffineTransform2D& transform,
                                           float windowCenter,
-                                          float windowWidth)
+                                          float windowWidth,
+                                          bool invert)
     {
       OpenGLTextureProgram::Execution execution(program_, data.GetTexture(), transform);
 
@@ -141,6 +145,7 @@
       glUniform1f(execution.GetUniformLocation("u_offset"), data.GetOffset());
       glUniform1f(execution.GetUniformLocation("u_windowCenter"), windowCenter);
       glUniform1f(execution.GetUniformLocation("u_windowWidth"), windowWidth);
+      glUniform1f(execution.GetUniformLocation("u_invert"), invert);
 
       execution.DrawTriangles();
     }