diff options
author | Matthias Clasen <mclasen@redhat.com> | 2018-01-17 13:42:19 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2018-01-17 13:42:19 -0500 |
commit | fe7d078d5a9c8010397b56c263ac17a879e28c71 (patch) | |
tree | b80a0fe3a36ef3c1e211c54b429e6a257ad9acc8 | |
parent | f3927f1155f0a50ea33407f5c04c78005b610c84 (diff) | |
download | gtk+-wip/gl-texture.tar.gz |
Flip gl textures when used in the gl rendererwip/gl-texture
-rw-r--r-- | gsk/gl/gskglrenderer.c | 7 | ||||
-rw-r--r-- | gsk/gl/gskglrenderopsprivate.h | 2 | ||||
-rw-r--r-- | gsk/meson.build | 1 | ||||
-rw-r--r-- | 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 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); +} |