glslstage: expose the default shader strings as public
authorMatthew Waters <matthew@centricular.com>
Tue, 10 Nov 2015 02:11:37 +0000 (13:11 +1100)
committerMatthew Waters <matthew@centricular.com>
Tue, 10 Nov 2015 04:42:35 +0000 (15:42 +1100)
Add some other simple strings for external-oes textures or transforming
the texture coordinates with a transformation matrix

gst-libs/gst/gl/Makefile.am
gst-libs/gst/gl/gl.h
gst-libs/gst/gl/gstglshaderstrings.c [new file with mode: 0644]
gst-libs/gst/gl/gstglshaderstrings.h [new file with mode: 0644]
gst-libs/gst/gl/gstglslstage.c

index 980565c..10a7d8e 100644 (file)
@@ -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 \
index b2710f4..ce9fc42 100644 (file)
@@ -37,6 +37,7 @@
 #include <gst/gl/gstglwindow.h>
 #include <gst/gl/gstglslstage.h>
 #include <gst/gl/gstglshader.h>
+#include <gst/gl/gstglshaderstrings.h>
 #include <gst/gl/gstglcolorconvert.h>
 #include <gst/gl/gstglupload.h>
 #include <gst/gl/gstgluploadmeta.h>
diff --git a/gst-libs/gst/gl/gstglshaderstrings.c b/gst-libs/gst/gl/gstglshaderstrings.c
new file mode 100644 (file)
index 0000000..3a732c7
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * 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 (file)
index 0000000..49ea8de
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * GStreamer
+ * Copyright (C) 2015 Matthew Waters <matthew@centricular.com>
+ *
+ * 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 <gst/gl/gl.h>
+
+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__ */
index 062b29a..89f97cf 100644 (file)
 
 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);
 }
 
 /**