[gtk+/wip/gl-texture: 5/5] Flip gl textures when used in the gl renderer



commit fe7d078d5a9c8010397b56c263ac17a879e28c71
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Jan 17 13:42:19 2018 -0500

    Flip gl textures when used in the gl renderer

 gsk/gl/gskglrenderer.c          |    7 ++++++-
 gsk/gl/gskglrenderopsprivate.h  |    2 +-
 gsk/meson.build                 |    1 +
 gsk/resources/glsl/flip.vs.glsl |    5 +++++
 4 files changed, 13 insertions(+), 2 deletions(-)
---
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index 7dfa012..de8fb5d 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -202,6 +202,7 @@ struct _GskGLRenderer
     struct {
       Program blend_program;
       Program blit_program;
+      Program flip_program;
       Program color_program;
       Program coloring_program;
       Program color_matrix_program;
@@ -597,7 +598,10 @@ render_texture_node (GskGLRenderer       *self,
                                                       texture,
                                                       gl_min_filter,
                                                       gl_mag_filter);
-  ops_set_program (builder, &self->blit_program);
+  if (GDK_IS_GL_TEXTURE (texture))
+    ops_set_program (builder, &self->flip_program);
+  else
+    ops_set_program (builder, &self->blit_program);
   ops_set_texture (builder, texture_id);
   ops_draw (builder, vertex_data);
 }
@@ -1717,6 +1721,7 @@ gsk_gl_renderer_create_programs (GskGLRenderer  *self,
   } program_definitions[] = {
     { "blend",           "blend.vs.glsl", "blend.fs.glsl" },
     { "blit",            "blit.vs.glsl",  "blit.fs.glsl" },
+    { "flip",            "flip.vs.glsl",  "blit.fs.glsl" },
     { "color",           "blit.vs.glsl",  "color.fs.glsl" },
     { "coloring",        "blit.vs.glsl",  "coloring.fs.glsl" },
     { "color matrix",    "blit.vs.glsl",  "color_matrix.fs.glsl" },
diff --git a/gsk/gl/gskglrenderopsprivate.h b/gsk/gl/gskglrenderopsprivate.h
index b700b75..bce2526 100644
--- a/gsk/gl/gskglrenderopsprivate.h
+++ b/gsk/gl/gskglrenderopsprivate.h
@@ -10,7 +10,7 @@
 #include "gskglrendererprivate.h"
 
 #define GL_N_VERTICES 6
-#define GL_N_PROGRAMS 13
+#define GL_N_PROGRAMS 14
 
 enum {
   OP_NONE,
diff --git a/gsk/meson.build b/gsk/meson.build
index d6e1342..c785806 100644
--- a/gsk/meson.build
+++ b/gsk/meson.build
@@ -3,6 +3,7 @@ gsk_private_gl_shaders = [
   'resources/glsl/blend.vs.glsl',
   'resources/glsl/blit.fs.glsl',
   'resources/glsl/blit.vs.glsl',
+  'resources/glsl/flip.vs.glsl',
   'resources/glsl/color.fs.glsl',
   'resources/glsl/coloring.fs.glsl',
   'resources/glsl/color_matrix.fs.glsl',
diff --git a/gsk/resources/glsl/flip.vs.glsl b/gsk/resources/glsl/flip.vs.glsl
new file mode 100644
index 0000000..28bb70e
--- /dev/null
+++ b/gsk/resources/glsl/flip.vs.glsl
@@ -0,0 +1,5 @@
+void main() {
+  gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0);
+
+  vUv = vec2(aUv.x, 1 - aUv.y);
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]