Commit: 1f453a8909527a95fedd597b4fdaab90c18712f9
Author: Clément Foucault
Date:   Fri Feb 24 12:38:35 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB1f453a8909527a95fedd597b4fdaab90c18712f9

OpenColorIO: Update glsl implementation to be ready for ogl 3.3 core

===================================================================

M       intern/opencolorio/CMakeLists.txt
M       intern/opencolorio/gpu_shader_display_transform.glsl
A       intern/opencolorio/gpu_shader_display_transform_vertex.glsl
M       intern/opencolorio/ocio_impl_glsl.cc
M       source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl

===================================================================

diff --git a/intern/opencolorio/CMakeLists.txt 
b/intern/opencolorio/CMakeLists.txt
index 61a8d995f4..f7e8d909f2 100644
--- a/intern/opencolorio/CMakeLists.txt
+++ b/intern/opencolorio/CMakeLists.txt
@@ -66,6 +66,7 @@ if(WITH_OPENCOLORIO)
        endif()
 
        data_to_c_simple(gpu_shader_display_transform.glsl SRC)
+       data_to_c_simple(gpu_shader_display_transform_vertex.glsl SRC)
 endif()
 
 
diff --git a/intern/opencolorio/gpu_shader_display_transform.glsl 
b/intern/opencolorio/gpu_shader_display_transform.glsl
index 853bf57558..4a63405045 100644
--- a/intern/opencolorio/gpu_shader_display_transform.glsl
+++ b/intern/opencolorio/gpu_shader_display_transform.glsl
@@ -10,6 +10,15 @@ uniform float image_texture_width;
 uniform float image_texture_height;
 #endif
 
+#if __VERSION__ < 130
+  varying vec2 texCoord_interp;
+  #define fragColor gl_FragColor
+#else
+  in vec2 texCoord_interp;
+  out vec4 fragColor;
+  #define texture2D texture
+#endif
+
 #ifdef USE_CURVE_MAPPING
 /* Curve mapping parameters
  *
@@ -143,7 +152,7 @@ vec4 apply_dither(vec2 st, vec4 col)
 
 void main()
 {
-       vec4 col = texture2D(image_texture, gl_TexCoord[0].st);
+       vec4 col = texture2D(image_texture, texCoord_interp.st);
 #ifdef USE_CURVE_MAPPING
        col = curvemapping_evaluate_premulRGBF(col);
 #endif
@@ -165,8 +174,8 @@ void main()
        vec4 result = OCIODisplay(col, lut3d_texture);
 
 #ifdef USE_DITHER
-       result = apply_dither(gl_TexCoord[0].st, result);
+       result = apply_dither(texCoord_interp.st, result);
 #endif
 
-       gl_FragColor = result;
+       fragColor = result;
 }
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl 
b/intern/opencolorio/gpu_shader_display_transform_vertex.glsl
similarity index 100%
copy from source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl
copy to intern/opencolorio/gpu_shader_display_transform_vertex.glsl
diff --git a/intern/opencolorio/ocio_impl_glsl.cc 
b/intern/opencolorio/ocio_impl_glsl.cc
index bf91ea143d..9dba37f27e 100644
--- a/intern/opencolorio/ocio_impl_glsl.cc
+++ b/intern/opencolorio/ocio_impl_glsl.cc
@@ -58,6 +58,7 @@ using namespace OCIO_NAMESPACE;
 static const int LUT3D_EDGE_SIZE = 64;
 
 extern "C" char datatoc_gpu_shader_display_transform_glsl[];
+extern "C" char datatoc_gpu_shader_display_transform_vertex_glsl[];
 
 /* **** OpenGL drawing routines using GLSL for color space transform ***** */
 
@@ -89,6 +90,7 @@ typedef struct OCIO_GLSLDrawState {
 
        /* GLSL stuff */
        GLuint ocio_shader;
+       GLuint vert_shader;
        GLuint program;
 
        /* Previous OpenGL state. */
@@ -116,14 +118,15 @@ static GLuint compileShaderText(GLenum shaderType, const 
char *text)
        return shader;
 }
 
-static GLuint linkShaders(GLuint ocio_shader)
+static GLuint linkShaders(GLuint ocio_shader, GLuint vert_shader)
 {
-       if (!ocio_shader)
+       if (!ocio_shader || !vert_shader)
                return 0;
 
        GLuint program = glCreateProgram();
 
        glAttachShader(program, ocio_shader);
+       glAttachShader(program, vert_shader);
 
        glLinkProgram(program);
 
@@ -339,6 +342,25 @@ bool OCIOImpl::setupGLSLDraw(OCIO_GLSLDrawState **state_r, 
OCIO_ConstProcessorRc
                        glDeleteShader(state->ocio_shader);
                }
 
+               if (state->vert_shader) {
+                       glDeleteShader(state->vert_shader);
+               }
+
+               /* Vertex shader */
+               std::ostringstream osv;
+
+               if (supportGLSL13()) {
+                       osv << "#version 130\n";
+               }
+               else {
+                       osv << "#version 120\n";
+               }
+
+               osv << datatoc_gpu_shader_display_transform_vertex_glsl;
+
+               state->vert_shader = compileShaderText(GL_VERTEX_SHADER, 
osv.str().c_str());
+
+               /* Fragment shader */
                std::ostringstream os;
 
                if (supportGLSL13()) {
@@ -366,8 +388,8 @@ bool OCIOImpl::setupGLSLDraw(OCIO_GLSLDrawState **state_r, 
OCIO_ConstProcessorRc
 
                state->ocio_shader = compileShaderText(GL_FRAGMENT_SHADER, 
os.str().c_str());
 
-               if (state->ocio_shader) {
-                       state->program = linkShaders(state->ocio_shader);
+               if (state->ocio_shader && state->vert_shader) {
+                       state->program = linkShaders(state->ocio_shader, 
state->vert_shader);
                }
 
                state->curve_mapping_used = use_curve_mapping;
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl 
b/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl
index a6c00b080b..f5217a9d23 100644
--- a/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_2D_image_vert.glsl
@@ -1,6 +1,7 @@
 
 uniform mat4 ModelViewProjectionMatrix;
 
+/* Keep in sync with 
intern/opencolorio/gpu_shader_display_transform_vertex.glsl */
 #if __VERSION__ == 120
   attribute vec2 texCoord;
   attribute vec2 pos;

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to