summaryrefslogtreecommitdiff
path: root/gst-libs/gst/gl/gstglshader.c
diff options
context:
space:
mode:
authorLuc Deschenaux <luc.deschenaux@freesurf.ch>2011-11-17 17:36:44 +0100
committerMatthew Waters <ystreet00@gmail.com>2014-03-15 18:36:42 +0100
commit268f1a30b239ec0262e2eaa33117a2aa14df19ff (patch)
tree71f4489ee781d2c549c325248ecf53ead0e78fa4 /gst-libs/gst/gl/gstglshader.c
parent7d4de78102aeb7de6657b7638e868a0c43e03500 (diff)
downloadgstreamer-plugins-bad-268f1a30b239ec0262e2eaa33117a2aa14df19ff.tar.gz
[471/906] glshader: add dynamic fragment shader filter
Also add fragment shader parser Fix bug #600195
Diffstat (limited to 'gst-libs/gst/gl/gstglshader.c')
-rw-r--r--gst-libs/gst/gl/gstglshader.c342
1 files changed, 342 insertions, 0 deletions
diff --git a/gst-libs/gst/gl/gstglshader.c b/gst-libs/gst/gl/gstglshader.c
index 45fb3e3d9..0ae7b3020 100644
--- a/gst-libs/gst/gl/gstglshader.c
+++ b/gst-libs/gst/gl/gstglshader.c
@@ -519,6 +519,314 @@ gst_gl_shader_set_uniform_1i (GstGLShader * shader, const gchar * name,
}
void
+gst_gl_shader_set_uniform_1iv (GstGLShader * shader, const gchar * name,
+ guint count, gint * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform1ivARB (location, count, value);
+}
+
+void
+gst_gl_shader_set_uniform_2f (GstGLShader * shader, const gchar * name,
+ gfloat value0, gfloat value1)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform2fARB (location, value0, value1);
+}
+
+void
+gst_gl_shader_set_uniform_2fv (GstGLShader * shader, const gchar * name,
+ guint count, gfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform2fvARB (location, count, value);
+}
+
+void
+gst_gl_shader_set_uniform_2i (GstGLShader * shader, const gchar * name,
+ gint v0, gint v1)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform2iARB (location, v0, v1);
+}
+
+void
+gst_gl_shader_set_uniform_2iv (GstGLShader * shader, const gchar * name,
+ guint count, gint * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform2ivARB (location, count, value);
+}
+
+void
+gst_gl_shader_set_uniform_3f (GstGLShader * shader, const gchar * name,
+ gfloat v0, gfloat v1, gfloat v2)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform3fARB (location, v0, v1, v2);
+}
+
+void
+gst_gl_shader_set_uniform_3fv (GstGLShader * shader, const gchar * name,
+ guint count, gfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform3fvARB (location, count, value);
+}
+
+void
+gst_gl_shader_set_uniform_3i (GstGLShader * shader, const gchar * name,
+ gint v0, gint v1, gint v2)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform3iARB (location, v0, v1, v2);
+}
+
+void
+gst_gl_shader_set_uniform_3iv (GstGLShader * shader, const gchar * name,
+ guint count, gint * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform3ivARB (location, count, value);
+}
+
+void
+gst_gl_shader_set_uniform_4f (GstGLShader * shader, const gchar * name,
+ gfloat v0, gfloat v1, gfloat v2, gfloat v3)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform4fARB (location, v0, v1, v2, v3);
+}
+
+void
+gst_gl_shader_set_uniform_4fv (GstGLShader * shader, const gchar * name,
+ guint count, gfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform4fvARB (location, count, value);
+}
+
+void
+gst_gl_shader_set_uniform_4i (GstGLShader * shader, const gchar * name,
+ gint v0, gint v1, gint v2, gint v3)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform4iARB (location, v0, v1, v2, v3);
+}
+
+void
+gst_gl_shader_set_uniform_4iv (GstGLShader * shader, const gchar * name,
+ guint count, gint * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniform4ivARB (location, count, value);
+}
+
+void
+gst_gl_shader_set_uniform_matrix_2fv (GstGLShader * shader, const gchar * name,
+ GLsizei count, GLboolean transpose, const GLfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniformMatrix2fvARB (location, count, transpose, value);
+}
+
+void
+gst_gl_shader_set_uniform_matrix_2x3fv (GstGLShader * shader,
+ const gchar * name, GLsizei count, GLboolean transpose,
+ const GLfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniformMatrix2x3fv (location, count, transpose, value);
+}
+
+void
+gst_gl_shader_set_uniform_matrix_2x4fv (GstGLShader * shader,
+ const gchar * name, GLsizei count, GLboolean transpose,
+ const GLfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniformMatrix2x4fv (location, count, transpose, value);
+}
+
+void
+gst_gl_shader_set_uniform_matrix_3fv (GstGLShader * shader, const gchar * name,
+ GLsizei count, GLboolean transpose, const GLfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniformMatrix3fvARB (location, count, transpose, value);
+}
+
+void
+gst_gl_shader_set_uniform_matrix_3x2fv (GstGLShader * shader,
+ const gchar * name, GLsizei count, GLboolean transpose,
+ const GLfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniformMatrix3x2fv (location, count, transpose, value);
+}
+
+void
+gst_gl_shader_set_uniform_matrix_3x4fv (GstGLShader * shader,
+ const gchar * name, GLsizei count, GLboolean transpose,
+ const GLfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniformMatrix3x4fv (location, count, transpose, value);
+}
+
+void
gst_gl_shader_set_uniform_matrix_4fv (GstGLShader * shader, const gchar * name,
GLsizei count, GLboolean transpose, const GLfloat * value)
{
@@ -534,6 +842,40 @@ gst_gl_shader_set_uniform_matrix_4fv (GstGLShader * shader, const gchar * name,
glUniformMatrix4fvARB (location, count, transpose, value);
}
+void
+gst_gl_shader_set_uniform_matrix_4x2fv (GstGLShader * shader,
+ const gchar * name, GLsizei count, GLboolean transpose,
+ const GLfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniformMatrix4x2fv (location, count, transpose, value);
+}
+
+void
+gst_gl_shader_set_uniform_matrix_4x3fv (GstGLShader * shader,
+ const gchar * name, GLsizei count, GLboolean transpose,
+ const GLfloat * value)
+{
+ GstGLShaderPrivate *priv;
+ GLint location = -1;
+
+ priv = shader->priv;
+
+ g_return_if_fail (priv->program_handle != 0);
+
+ location = glGetUniformLocationARB (priv->program_handle, name);
+
+ glUniformMatrix4x3fv (location, count, transpose, value);
+}
+
GLint
gst_gl_shader_get_attribute_location (GstGLShader * shader, const gchar * name)
{