diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2016-04-22 12:34:33 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2016-04-25 12:29:36 +0100 |
commit | 55537cccbd8129ed9fd3d00e8af07c05719516ac (patch) | |
tree | 73a1b55ca0e7931446c753347ce61668048b5162 /gdk/gdkgl.c | |
parent | d7b5ea89eb7c103c67806b7d78a841a6c7048e90 (diff) | |
download | gtk+-55537cccbd8129ed9fd3d00e8af07c05719516ac.tar.gz |
gdk: Move GLSL shaders into GResource
Having the shaders inlined as C strings makes them harder to edit and
maintain.
Diffstat (limited to 'gdk/gdkgl.c')
-rw-r--r-- | gdk/gdkgl.c | 116 |
1 files changed, 27 insertions, 89 deletions
diff --git a/gdk/gdkgl.c b/gdk/gdkgl.c index e8ba770669..155e8cd344 100644 --- a/gdk/gdkgl.c +++ b/gdk/gdkgl.c @@ -86,17 +86,24 @@ create_shader (int type, static void make_program (GdkGLContextProgram *program, - const char *vertex_shader_code, - const char *fragment_shader_code) + const char *vertex_shader_path, + const char *fragment_shader_path) { guint vertex_shader, fragment_shader; + GBytes *source; int status; - vertex_shader = create_shader (GL_VERTEX_SHADER, vertex_shader_code); + source = g_resources_lookup_data (vertex_shader_path, 0, NULL); + g_assert (source != NULL); + vertex_shader = create_shader (GL_VERTEX_SHADER, g_bytes_get_data (source, NULL)); + g_bytes_unref (source); if (vertex_shader == 0) return; - fragment_shader = create_shader (GL_FRAGMENT_SHADER, fragment_shader_code); + source = g_resources_lookup_data (fragment_shader_path, 0, NULL); + g_assert (source != NULL); + fragment_shader = create_shader (GL_FRAGMENT_SHADER, g_bytes_get_data (source, NULL)); + g_bytes_unref (source); if (fragment_shader == 0) { glDeleteShader (vertex_shader); @@ -147,51 +154,16 @@ bind_vao (GdkGLContextPaintData *paint_data) static void use_texture_2d_program (GdkGLContextPaintData *paint_data) { - static const char *vertex_shader_code_150 = - "#version 150\n" - "uniform sampler2D map;" - "in vec2 position;\n" - "in vec2 uv;\n" - "out vec2 vUv;\n" - "void main() {\n" - " gl_Position = vec4(position, 0, 1);\n" - " vUv = uv;\n" - "}\n"; - static const char *fragment_shader_code_150 = - "#version 150\n" - "in vec2 vUv;\n" - "out vec4 vertexColor;\n" - "uniform sampler2D map;\n" - "void main() {\n" - " vertexColor = texture2D (map, vUv);\n" - "}\n"; - static const char *vertex_shader_code_130 = - "#version 130\n" - "uniform sampler2D map;" - "attribute vec2 position;\n" - "attribute vec2 uv;\n" - "varying vec2 vUv;\n" - "void main() {\n" - " gl_Position = vec4(position, 0, 1);\n" - " vUv = uv;\n" - "}\n"; - static const char *fragment_shader_code_130 = - "#version 130\n" - "varying vec2 vUv;\n" - "uniform sampler2D map;\n" - "void main() {\n" - " gl_FragColor = texture2D (map, vUv);\n" - "}\n"; - - const char *vertex_shader_code = paint_data->is_legacy - ? vertex_shader_code_130 - : vertex_shader_code_150; - const char *fragment_shader_code = paint_data->is_legacy - ? fragment_shader_code_130 - : fragment_shader_code_150; + const char *vertex_shader_path = paint_data->is_legacy + ? "/org/gtk/libgdk/glsl/gl2-texture-2d.vs.glsl" + : "/org/gtk/libgdk/glsl/gl3-texture-2d.vs.glsl"; + + const char *fragment_shader_path = paint_data->is_legacy + ? "/org/gtk/libgdk/glsl/gl2-texture-2d.fs.glsl" + : "/org/gtk/libgdk/glsl/gl3-texture-2d.fs.glsl"; if (paint_data->texture_2d_quad_program.program == 0) - make_program (&paint_data->texture_2d_quad_program, vertex_shader_code, fragment_shader_code); + make_program (&paint_data->texture_2d_quad_program, vertex_shader_path, fragment_shader_path); if (paint_data->current_program != &paint_data->texture_2d_quad_program) { @@ -203,50 +175,16 @@ use_texture_2d_program (GdkGLContextPaintData *paint_data) static void use_texture_rect_program (GdkGLContextPaintData *paint_data) { - static const char *vertex_shader_code_150 = - "#version 150\n" - "uniform sampler2DRect map;\n" - "attribute vec2 position;\n" - "attribute vec2 uv;\n" - "varying vec2 vUv;\n" - "void main() {\n" - " gl_Position = vec4(position, 0, 1);\n" - " vUv = uv;\n" - "}\n"; - static const char *fragment_shader_code_150 = - "#version 150\n" - "varying vec2 vUv;\n" - "uniform sampler2DRect map;\n" - "void main() {\n" - " gl_FragColor = texture2DRect (map, vUv);\n" - "}\n"; - static const char *vertex_shader_code_130 = - "#version 130\n" - "uniform sampler2DRect map;\n" - "attribute vec2 position;\n" - "attribute vec2 uv;\n" - "varying vec2 vUv;\n" - "void main() {\n" - " gl_Position = vec4(position, 0, 1);\n" - " vUv = uv;\n" - "}\n"; - static const char *fragment_shader_code_130 = - "#version 130\n" - "varying vec2 vUv;\n" - "uniform sampler2DRect map;\n" - "void main() {\n" - " gl_FragColor = texture2DRect (map, vUv);\n" - "}\n"; - - const char *vertex_shader_code = paint_data->is_legacy - ? vertex_shader_code_130 - : vertex_shader_code_150; - const char *fragment_shader_code = paint_data->is_legacy - ? fragment_shader_code_130 - : fragment_shader_code_150; + const char *vertex_shader_path = paint_data->is_legacy + ? "/org/gtk/libgdk/glsl/gl2-texture-rect.vs.glsl" + : "/org/gtk/libgdk/glsl/gl3-texture-rect.vs.glsl"; + + const char *fragment_shader_path = paint_data->is_legacy + ? "/org/gtk/libgdk/glsl/gl2-texture-rect.fs.glsl" + : "/org/gtk/libgdk/glsl/gl3-texture-rect.vs.glsl"; if (paint_data->texture_rect_quad_program.program == 0) - make_program (&paint_data->texture_rect_quad_program, vertex_shader_code, fragment_shader_code); + make_program (&paint_data->texture_rect_quad_program, vertex_shader_path, fragment_shader_path); if (paint_data->current_program != &paint_data->texture_rect_quad_program) { |