From b1ac029b878294b715404688e3b84b32c8260229 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Tue, 10 Nov 2015 13:11:37 +1100 Subject: [PATCH] glslstage: expose the default shader strings as public Add some other simple strings for external-oes textures or transforming the texture coordinates with a transformation matrix --- gst-libs/gst/gl/Makefile.am | 2 + gst-libs/gst/gl/gl.h | 1 + gst-libs/gst/gl/gstglshaderstrings.c | 71 ++++++++++++++++++++++++++++ gst-libs/gst/gl/gstglshaderstrings.h | 36 ++++++++++++++ gst-libs/gst/gl/gstglslstage.c | 27 +---------- 5 files changed, 112 insertions(+), 25 deletions(-) create mode 100644 gst-libs/gst/gl/gstglshaderstrings.c create mode 100644 gst-libs/gst/gl/gstglshaderstrings.h diff --git a/gst-libs/gst/gl/Makefile.am b/gst-libs/gst/gl/Makefile.am index 980565c7bb..10a7d8e759 100644 --- a/gst-libs/gst/gl/Makefile.am +++ b/gst-libs/gst/gl/Makefile.am @@ -18,6 +18,7 @@ libgstgl_@GST_API_VERSION@_la_SOURCES = \ gstglfilter.c \ gstglbasefilter.c \ gstglshader.c \ + gstglshaderstrings.c \ gstglsl.c \ gstglslstage.c \ gstglcolorconvert.c \ @@ -47,6 +48,7 @@ libgstgl_@GST_API_VERSION@include_HEADERS = \ gstglfilter.h \ gstglbasefilter.h \ gstglshader.h \ + gstglshaderstrings.h \ gstglsl.h \ gstglslstage.h \ gstglcolorconvert.h \ diff --git a/gst-libs/gst/gl/gl.h b/gst-libs/gst/gl/gl.h index b2710f45d5..ce9fc42366 100644 --- a/gst-libs/gst/gl/gl.h +++ b/gst-libs/gst/gl/gl.h @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include diff --git a/gst-libs/gst/gl/gstglshaderstrings.c b/gst-libs/gst/gl/gstglshaderstrings.c new file mode 100644 index 0000000000..3a732c731b --- /dev/null +++ b/gst-libs/gst/gl/gstglshaderstrings.c @@ -0,0 +1,71 @@ +/* + * GStreamer + * Copyright (C) 2015 Matthew Waters + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "gstglshaderstrings.h" + +/* *INDENT-OFF* */ +const gchar *gst_gl_shader_string_vertex_default = + "attribute vec4 a_position;\n" + "attribute vec2 a_texcoord;\n" + "varying vec2 v_texcoord;\n" + "void main()\n" + "{\n" + " gl_Position = a_position;\n" + " v_texcoord = a_texcoord;\n" + "}\n"; + +const gchar *gst_gl_shader_string_vertex_mat4_texture_transform = + "uniform mat4 u_transformation;\n" + "attribute vec4 a_position;\n" + "attribute vec2 a_texcoord;\n" + "varying vec2 v_texcoord;\n" + "void main()\n" + "{\n" + " gl_Position = a_position;\n" + " v_texcoord = (u_transformation * vec4(a_texcoord, 0, 1)).xy;\n" + "}\n"; + +const gchar *gst_gl_shader_string_fragment_default = + "#ifdef GL_ES\n" + "precision mediump float;\n" + "#endif\n" + "varying vec2 v_texcoord;\n" + "uniform sampler2D tex;\n" + "void main()\n" + "{\n" + " gl_FragColor = texture2D(tex, v_texcoord);\n" + "}"; + +const gchar *gst_gl_shader_string_fragment_external_oes_default = + "#extension GL_OES_EGL_image_external : require\n" + "#ifdef GL_ES\n" + "precision mediump float;\n" + "#endif\n" + "varying vec2 v_texcoord;\n" + "uniform sampler2DExternalOES tex;\n" + "void main()\n" + "{\n" + " gl_FragColor = texture2D(tex, v_texcoord);\n" + "}"; +/* *INDENT-ON* */ diff --git a/gst-libs/gst/gl/gstglshaderstrings.h b/gst-libs/gst/gl/gstglshaderstrings.h new file mode 100644 index 0000000000..49ea8de427 --- /dev/null +++ b/gst-libs/gst/gl/gstglshaderstrings.h @@ -0,0 +1,36 @@ +/* + * GStreamer + * Copyright (C) 2015 Matthew Waters + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __GST_GL_SHADER_STRINGS_H__ +#define __GST_GL_SHADER_STRINGS_H__ + +#include + +G_BEGIN_DECLS + +extern const gchar *gst_gl_shader_string_vertex_default; +extern const gchar *gst_gl_shader_string_fragment_default; + +extern const gchar *gst_gl_shader_string_vertex_mat4_texture_transform; +extern const gchar *gst_gl_shader_string_fragment_external_oes_default; + +G_END_DECLS + +#endif /* __GST_GL_SHADER_STRINGS_H__ */ diff --git a/gst-libs/gst/gl/gstglslstage.c b/gst-libs/gst/gl/gstglslstage.c index 062b29ae50..89f97cff49 100644 --- a/gst-libs/gst/gl/gstglslstage.c +++ b/gst-libs/gst/gl/gstglslstage.c @@ -29,29 +29,6 @@ static const gchar *es2_version_header = "#version 100\n"; -/* *INDENT-OFF* */ -static const gchar *simple_vertex_shader_str_gles2 = - "attribute vec4 a_position;\n" - "attribute vec2 a_texcoord;\n" - "varying vec2 v_texcoord;\n" - "void main()\n" - "{\n" - " gl_Position = a_position;\n" - " v_texcoord = a_texcoord;\n" - "}\n"; - -static const gchar *simple_fragment_shader_str_gles2 = - "#ifdef GL_ES\n" - "precision mediump float;\n" - "#endif\n" - "varying vec2 v_texcoord;\n" - "uniform sampler2D tex;\n" - "void main()\n" - "{\n" - " gl_FragColor = texture2D(tex, v_texcoord);\n" - "}"; -/* *INDENT-ON* */ - GST_DEBUG_CATEGORY_STATIC (gst_glsl_stage_debug); #define GST_CAT_DEFAULT gst_glsl_stage_debug @@ -279,7 +256,7 @@ gst_glsl_stage_new_default_vertex (GstGLContext * context) return gst_glsl_stage_new_with_string (context, GL_VERTEX_SHADER, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY, - simple_vertex_shader_str_gles2); + gst_gl_shader_string_vertex_default); } /** @@ -294,7 +271,7 @@ gst_glsl_stage_new_default_fragment (GstGLContext * context) return gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY, - simple_fragment_shader_str_gles2); + gst_gl_shader_string_fragment_default); } /**