summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2018-01-17 13:42:19 -0500
committerMatthias Clasen <mclasen@redhat.com>2018-01-17 13:42:19 -0500
commitfe7d078d5a9c8010397b56c263ac17a879e28c71 (patch)
treeb80a0fe3a36ef3c1e211c54b429e6a257ad9acc8
parentf3927f1155f0a50ea33407f5c04c78005b610c84 (diff)
downloadgtk+-wip/gl-texture.tar.gz
Flip gl textures when used in the gl rendererwip/gl-texture
-rw-r--r--gsk/gl/gskglrenderer.c7
-rw-r--r--gsk/gl/gskglrenderopsprivate.h2
-rw-r--r--gsk/meson.build1
-rw-r--r--gsk/resources/glsl/flip.vs.glsl5
4 files changed, 13 insertions, 2 deletions
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index 7dfa0126c1..de8fb5d4dc 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 b700b75f94..bce2526581 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 d6e134246f..c785806570 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 0000000000..28bb70e871
--- /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);
+}