[vlc-commits] opengl: extract vlc_texture()

Romain Vimont git at videolan.org
Tue Mar 31 10:26:28 CEST 2020


vlc | branch: master | Romain Vimont <rom1v at videolabs.io> | Thu Jan 30 11:35:30 2020 +0100| [ee65759c598c17f9a06264a4ccc8e8edc58aecdc] | committer: Alexandre Janniaux

opengl: extract vlc_texture()

Extract a fragment shader function to provide the pixel color of a
picture from pictures coordinates.

Concretely, it replaces:

    void main(void) {
     vec3 pic_hcoords = vec3(PicCoords, 1.0);
     ...
     gl_FragColor = result * FillColor;
    }

by:

    vec4 vlc_texture(vec2 pic_coords) {
     vec3 pic_hcoords = vec3(pic_coords, 1.0);
     ...
     return result * FillColor;
    }
    void main() {
     gl_FragColor = vlc_texture(PicCoords);
    }

Signed-off-by: Alexandre Janniaux <ajanni at videolabs.io>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=ee65759c598c17f9a06264a4ccc8e8edc58aecdc
---

 modules/video_output/opengl/fragment_shaders.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/modules/video_output/opengl/fragment_shaders.c b/modules/video_output/opengl/fragment_shaders.c
index c228712865..4c7b0ae2fa 100644
--- a/modules/video_output/opengl/fragment_shaders.c
+++ b/modules/video_output/opengl/fragment_shaders.c
@@ -350,16 +350,19 @@ xyz12_shader_init(struct vlc_gl_renderer *renderer)
         " );"
 
         "varying vec2 PicCoords;"
-        "void main()"
+        "vec4 vlc_texture(vec2 pic_coords)\n"
         "{ "
         " vec4 v_in, v_out;"
-        " v_in  = texture2D(Texture0, PicCoords);"
+        " v_in  = texture2D(Texture0, pic_coords);"
         " v_in = pow(v_in, xyz_gamma);"
         " v_out = matrix_xyz_rgb * v_in ;"
         " v_out = pow(v_out, rgb_gamma) ;"
         " v_out = clamp(v_out, 0.0, 1.0) ;"
-        " gl_FragColor = v_out;"
-        "}";
+        " return v_out;"
+        "}\n"
+        "void main() {\n"
+        " gl_FragColor = vlc_texture(PicCoords);\n"
+        "}\n";
 
     char *code;
     if (asprintf(&code, template, renderer->glsl_version,
@@ -586,9 +589,9 @@ opengl_fragment_shader_init(struct vlc_gl_renderer *renderer, GLenum tex_target,
         ADD("uniform mat4 ConvMatrix;\n");
 
     ADD("uniform vec4 FillColor;\n"
-        "void main(void) {\n"
+        "vec4 vlc_texture(vec2 pic_coords) {\n"
         /* Homogeneous (oriented) coordinates */
-        " vec3 pic_hcoords = vec3((TransformMatrix * OrientationMatrix * vec4(PicCoords, 0.0, 1.0)).st, 1.0);\n"
+        " vec3 pic_hcoords = vec3((TransformMatrix * OrientationMatrix * vec4(pic_coords, 0.0, 1.0)).st, 1.0);\n"
         " vec2 tex_coords;\n");
 
     unsigned color_count;
@@ -636,8 +639,12 @@ opengl_fragment_shader_init(struct vlc_gl_renderer *renderer, GLenum tex_target,
     }
 #endif
 
-    ADD(" gl_FragColor = result * FillColor;\n"
-        "}");
+    ADD(" return result * FillColor;\n"
+        "}\n");
+
+    ADD("void main() {\n"
+        " gl_FragColor = vlc_texture(PicCoords);\n"
+        "}\n");
 
 #undef ADD
 #undef ADDF



More information about the vlc-commits mailing list