mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 02:31:03 +00:00
glshader: macro out all the extremely similar uniform setting
This commit is contained in:
parent
fae3f7cb56
commit
333566c53e
1 changed files with 147 additions and 409 deletions
|
@ -216,6 +216,9 @@ _get_uniform_location (GstGLShader * shader, const gchar * name)
|
||||||
location = GPOINTER_TO_INT (value);
|
location = GPOINTER_TO_INT (value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GST_TRACE_OBJECT (shader, "Retrieved uniform \'%s\' location %i", name,
|
||||||
|
location);
|
||||||
|
|
||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -456,8 +459,8 @@ gst_gl_shader_detach_unlocked (GstGLShader * shader, GstGLSLStage * stage)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shader->context->gl_vtable->IsProgram)
|
if (shader->context->gl_vtable->IsProgram)
|
||||||
g_assert (shader->context->gl_vtable->IsProgram (shader->priv->
|
g_assert (shader->context->gl_vtable->IsProgram (shader->
|
||||||
program_handle));
|
priv->program_handle));
|
||||||
if (shader->context->gl_vtable->IsShader)
|
if (shader->context->gl_vtable->IsShader)
|
||||||
g_assert (shader->context->gl_vtable->IsShader (stage_handle));
|
g_assert (shader->context->gl_vtable->IsShader (stage_handle));
|
||||||
|
|
||||||
|
@ -543,8 +546,8 @@ gst_gl_shader_attach_unlocked (GstGLShader * shader, GstGLSLStage * stage)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shader->context->gl_vtable->IsProgram)
|
if (shader->context->gl_vtable->IsProgram)
|
||||||
g_assert (shader->context->gl_vtable->IsProgram (shader->priv->
|
g_assert (shader->context->gl_vtable->IsProgram (shader->
|
||||||
program_handle));
|
priv->program_handle));
|
||||||
if (shader->context->gl_vtable->IsShader)
|
if (shader->context->gl_vtable->IsShader)
|
||||||
g_assert (shader->context->gl_vtable->IsShader (stage_handle));
|
g_assert (shader->context->gl_vtable->IsShader (stage_handle));
|
||||||
|
|
||||||
|
@ -822,6 +825,81 @@ gst_gl_context_clear_shader (GstGLContext * context)
|
||||||
gl->UseProgramObject (0);
|
gl->UseProgramObject (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define set_uniform_pre_check(shader, name) \
|
||||||
|
GLint location = -1; \
|
||||||
|
g_return_if_fail (shader != NULL); \
|
||||||
|
g_return_if_fail (shader->priv->program_handle != 0); \
|
||||||
|
location = _get_uniform_location (shader, name);
|
||||||
|
|
||||||
|
#if G_HAVE_ISO_VARARGS
|
||||||
|
|
||||||
|
#define set_uniform_v(gl_suffix, c_type, debug_stride, debug_str, ...) \
|
||||||
|
void \
|
||||||
|
G_PASTE(gst_gl_shader_set_uniform_,gl_suffix) (GstGLShader * shader, \
|
||||||
|
const gchar * name, guint count, const c_type * value) \
|
||||||
|
{ \
|
||||||
|
guint i; \
|
||||||
|
set_uniform_pre_check(shader, name) \
|
||||||
|
for (i = 0; i < count; i++) { \
|
||||||
|
const c_type * item = &value[i * debug_stride]; \
|
||||||
|
GST_TRACE_OBJECT (shader, "Setting uniform %s (%i) index %i to " \
|
||||||
|
debug_str, name, location, i, __VA_ARGS__); \
|
||||||
|
} \
|
||||||
|
shader->context->gl_vtable->G_PASTE(Uniform,gl_suffix) (location, count, value); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define set_uniform_func_decl(gl_suffix, ...) \
|
||||||
|
void \
|
||||||
|
G_PASTE(gst_gl_shader_set_uniform_,gl_suffix) (GstGLShader * shader, \
|
||||||
|
const gchar * name, __VA_ARGS__)
|
||||||
|
|
||||||
|
#define set_uniform_body(gl_suffix, debug_str, ...) \
|
||||||
|
{ \
|
||||||
|
set_uniform_pre_check(shader, name) \
|
||||||
|
GST_TRACE_OBJECT (shader, "Setting uniform %s (%i) = " debug_str, \
|
||||||
|
name, location, __VA_ARGS__); \
|
||||||
|
shader->context->gl_vtable->G_PASTE(Uniform,gl_suffix) (location, __VA_ARGS__); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* G_HAVE_ISO_VARARGS */
|
||||||
|
#if G_HAVE_GNUC_VARARGS
|
||||||
|
|
||||||
|
#define set_uniform_v(gl_suffix, c_type, debug_stride, debug_str, args...) \
|
||||||
|
void \
|
||||||
|
G_PASTE(gst_gl_shader_set_uniform_,gl_suffix) (GstGLShader * shader, \
|
||||||
|
const gchar * name, guint count, const c_type * value) \
|
||||||
|
{ \
|
||||||
|
guint i; \
|
||||||
|
set_uniform_pre_check(shader, name) \
|
||||||
|
for (i = 0; i < count; i++) { \
|
||||||
|
const c_type * item = &value[i * debug_stride]; \
|
||||||
|
GST_TRACE_OBJECT (shader, "Setting uniform %s (%i) index %i to " \
|
||||||
|
debug_str, name, location, i, ##args); \
|
||||||
|
} \
|
||||||
|
shader->context->gl_vtable->G_PASTE(Uniform,gl_suffix) (location, count, value); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define set_uniform_func_decl(gl_suffix, args...) \
|
||||||
|
void \
|
||||||
|
G_PASTE(gst_gl_shader_set_uniform_,gl_suffix) (GstGLShader * shader, \
|
||||||
|
const gchar * name, ##args)
|
||||||
|
|
||||||
|
#define set_uniform_body(gl_suffix, debug_str, args...) \
|
||||||
|
{ \
|
||||||
|
set_uniform_pre_check(shader, name) \
|
||||||
|
GST_TRACE_OBJECT (shader, "Setting uniform %s (%i) = " debug_str, \
|
||||||
|
name, location, ##args); \
|
||||||
|
shader->context->gl_vtable->G_PASTE(Uniform,gl_suffix) (location, ##args); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error "No vararg support in C macros. What kind of C compiler is this?!"
|
||||||
|
|
||||||
|
#endif /* G_HAVE_GNUC_VARARGS */
|
||||||
|
#endif /* G_HAVE_ISO_VARARGS */
|
||||||
|
|
||||||
|
/* *INDENT-OFF* */
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_1f:
|
* gst_gl_shader_set_uniform_1f:
|
||||||
* @shader: a #GstGLShader
|
* @shader: a #GstGLShader
|
||||||
|
@ -830,24 +908,8 @@ gst_gl_context_clear_shader (GstGLContext * context)
|
||||||
*
|
*
|
||||||
* Perform glUniform1f() for @name on @shader
|
* Perform glUniform1f() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_func_decl(1f, float value)
|
||||||
gst_gl_shader_set_uniform_1f (GstGLShader * shader, const gchar * name,
|
set_uniform_body(1f, "%f", value);
|
||||||
gfloat value)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform1f (location, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_1fv:
|
* gst_gl_shader_set_uniform_1fv:
|
||||||
|
@ -858,23 +920,7 @@ gst_gl_shader_set_uniform_1f (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform1fv() for @name on @shader
|
* Perform glUniform1fv() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_v(1fv, float, 1, "%f", item[0]);
|
||||||
gst_gl_shader_set_uniform_1fv (GstGLShader * shader, const gchar * name,
|
|
||||||
guint count, const gfloat * value)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform1fv (location, count, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_1i:
|
* gst_gl_shader_set_uniform_1i:
|
||||||
|
@ -884,23 +930,8 @@ gst_gl_shader_set_uniform_1fv (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform1i() for @name on @shader
|
* Perform glUniform1i() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_func_decl(1i, int value)
|
||||||
gst_gl_shader_set_uniform_1i (GstGLShader * shader, const gchar * name,
|
set_uniform_body(1i, "%i", value);
|
||||||
gint value)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform1i (location, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_1iv:
|
* gst_gl_shader_set_uniform_1iv:
|
||||||
|
@ -911,23 +942,7 @@ gst_gl_shader_set_uniform_1i (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform1iv() for @name on @shader
|
* Perform glUniform1iv() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_v(1iv, int, 1, "%i", item[0]);
|
||||||
gst_gl_shader_set_uniform_1iv (GstGLShader * shader, const gchar * name,
|
|
||||||
guint count, const gint * value)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform1iv (location, count, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_2f:
|
* gst_gl_shader_set_uniform_2f:
|
||||||
|
@ -938,23 +953,8 @@ gst_gl_shader_set_uniform_1iv (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform2f() for @name on @shader
|
* Perform glUniform2f() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_func_decl(2f, float v0, float v1)
|
||||||
gst_gl_shader_set_uniform_2f (GstGLShader * shader, const gchar * name,
|
set_uniform_body(2f, "%f, %f", v0, v1);
|
||||||
gfloat v0, gfloat v1)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform2f (location, v0, v1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_2fv:
|
* gst_gl_shader_set_uniform_2fv:
|
||||||
|
@ -965,23 +965,7 @@ gst_gl_shader_set_uniform_2f (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform2fv() for @name on @shader
|
* Perform glUniform2fv() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_v(2fv, float, 2, "%f, %f", item[0], item[1]);
|
||||||
gst_gl_shader_set_uniform_2fv (GstGLShader * shader, const gchar * name,
|
|
||||||
guint count, const gfloat * value)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform2fv (location, count, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_2i:
|
* gst_gl_shader_set_uniform_2i:
|
||||||
|
@ -992,23 +976,8 @@ gst_gl_shader_set_uniform_2fv (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform2i() for @name on @shader
|
* Perform glUniform2i() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_func_decl(2i, int v0, int v1)
|
||||||
gst_gl_shader_set_uniform_2i (GstGLShader * shader, const gchar * name,
|
set_uniform_body(2i, "%i, %i", v0, v1);
|
||||||
gint v0, gint v1)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform2i (location, v0, v1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_2iv:
|
* gst_gl_shader_set_uniform_2iv:
|
||||||
|
@ -1019,23 +988,7 @@ gst_gl_shader_set_uniform_2i (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform2iv() for @name on @shader
|
* Perform glUniform2iv() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_v(2iv, int, 2, "%i, %i", item[0], item[1]);
|
||||||
gst_gl_shader_set_uniform_2iv (GstGLShader * shader, const gchar * name,
|
|
||||||
guint count, const gint * value)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform2iv (location, count, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_3f:
|
* gst_gl_shader_set_uniform_3f:
|
||||||
|
@ -1047,23 +1000,8 @@ gst_gl_shader_set_uniform_2iv (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform3f() for @name on @shader
|
* Perform glUniform3f() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_func_decl(3f, float v0, float v1, float v2)
|
||||||
gst_gl_shader_set_uniform_3f (GstGLShader * shader, const gchar * name,
|
set_uniform_body(3f, "%f, %f, %f", v0, v1, v2);
|
||||||
gfloat v0, gfloat v1, gfloat v2)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform3f (location, v0, v1, v2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_3fv:
|
* gst_gl_shader_set_uniform_3fv:
|
||||||
|
@ -1074,23 +1012,7 @@ gst_gl_shader_set_uniform_3f (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform3fv() for @name on @shader
|
* Perform glUniform3fv() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_v(3fv, float, 3, "%f, %f, %f", item[0], item[1], item[2]);
|
||||||
gst_gl_shader_set_uniform_3fv (GstGLShader * shader, const gchar * name,
|
|
||||||
guint count, const gfloat * value)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform3fv (location, count, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_3i:
|
* gst_gl_shader_set_uniform_3i:
|
||||||
|
@ -1102,23 +1024,8 @@ gst_gl_shader_set_uniform_3fv (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform3i() for @name on @shader
|
* Perform glUniform3i() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_func_decl(3i, int v0, int v1, int v2)
|
||||||
gst_gl_shader_set_uniform_3i (GstGLShader * shader, const gchar * name,
|
set_uniform_body(3i, "%i, %i, %i", v0, v1, v2);
|
||||||
gint v0, gint v1, gint v2)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform3i (location, v0, v1, v2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_3iv:
|
* gst_gl_shader_set_uniform_3iv:
|
||||||
|
@ -1129,23 +1036,7 @@ gst_gl_shader_set_uniform_3i (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform3iv() for @name on @shader
|
* Perform glUniform3iv() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_v(3iv, int, 3, "%i, %i, %i", item[0], item[1], item[2]);
|
||||||
gst_gl_shader_set_uniform_3iv (GstGLShader * shader, const gchar * name,
|
|
||||||
guint count, const gint * value)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform3iv (location, count, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_4f:
|
* gst_gl_shader_set_uniform_4f:
|
||||||
|
@ -1158,23 +1049,8 @@ gst_gl_shader_set_uniform_3iv (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform4f() for @name on @shader
|
* Perform glUniform4f() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_func_decl(4f, float v0, float v1, float v2, float v3)
|
||||||
gst_gl_shader_set_uniform_4f (GstGLShader * shader, const gchar * name,
|
set_uniform_body(4f, "%f, %f, %f, %f", v0, v1, v2, v3);
|
||||||
gfloat v0, gfloat v1, gfloat v2, gfloat v3)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform4f (location, v0, v1, v2, v3);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_4fv:
|
* gst_gl_shader_set_uniform_4fv:
|
||||||
|
@ -1185,23 +1061,7 @@ gst_gl_shader_set_uniform_4f (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform4fv() for @name on @shader
|
* Perform glUniform4fv() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_v(4fv, float, 4, "%f, %f, %f, %f", item[0], item[1], item[2], item[3]);
|
||||||
gst_gl_shader_set_uniform_4fv (GstGLShader * shader, const gchar * name,
|
|
||||||
guint count, const gfloat * value)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform4fv (location, count, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_4i:
|
* gst_gl_shader_set_uniform_4i:
|
||||||
|
@ -1214,23 +1074,8 @@ gst_gl_shader_set_uniform_4fv (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform4i() for @name on @shader
|
* Perform glUniform4i() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_func_decl(4i, int v0, int v1, int v2, int v3)
|
||||||
gst_gl_shader_set_uniform_4i (GstGLShader * shader, const gchar * name,
|
set_uniform_body(4i, "%i, %i, %i, %i", v0, v1, v2, v3);
|
||||||
gint v0, gint v1, gint v2, gint v3)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform4i (location, v0, v1, v2, v3);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_4iv:
|
* gst_gl_shader_set_uniform_4iv:
|
||||||
|
@ -1241,23 +1086,8 @@ gst_gl_shader_set_uniform_4i (GstGLShader * shader, const gchar * name,
|
||||||
*
|
*
|
||||||
* Perform glUniform4iv() for @name on @shader
|
* Perform glUniform4iv() for @name on @shader
|
||||||
*/
|
*/
|
||||||
void
|
set_uniform_v(4iv, int, 4, "%i, %i, %i, %i", item[0], item[1], item[2], item[3]);
|
||||||
gst_gl_shader_set_uniform_4iv (GstGLShader * shader, const gchar * name,
|
/* *INDENT-ON* */
|
||||||
guint count, const gint * value)
|
|
||||||
{
|
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
GLint location = -1;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->Uniform4iv (location, count, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_gl_shader_set_uniform_matrix_2fv:
|
* gst_gl_shader_set_uniform_matrix_2fv:
|
||||||
|
@ -1273,18 +1103,9 @@ void
|
||||||
gst_gl_shader_set_uniform_matrix_2fv (GstGLShader * shader, const gchar * name,
|
gst_gl_shader_set_uniform_matrix_2fv (GstGLShader * shader, const gchar * name,
|
||||||
gint count, gboolean transpose, const gfloat * value)
|
gint count, gboolean transpose, const gfloat * value)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
set_uniform_pre_check (shader, name);
|
||||||
GstGLFuncs *gl;
|
shader->context->gl_vtable->UniformMatrix2fv (location, count, transpose,
|
||||||
GLint location = -1;
|
value);
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->UniformMatrix2fv (location, count, transpose, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1301,18 +1122,9 @@ void
|
||||||
gst_gl_shader_set_uniform_matrix_3fv (GstGLShader * shader, const gchar * name,
|
gst_gl_shader_set_uniform_matrix_3fv (GstGLShader * shader, const gchar * name,
|
||||||
gint count, gboolean transpose, const gfloat * value)
|
gint count, gboolean transpose, const gfloat * value)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
set_uniform_pre_check (shader, name);
|
||||||
GstGLFuncs *gl;
|
shader->context->gl_vtable->UniformMatrix3fv (location, count, transpose,
|
||||||
GLint location = -1;
|
value);
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->UniformMatrix3fv (location, count, transpose, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1329,18 +1141,9 @@ void
|
||||||
gst_gl_shader_set_uniform_matrix_4fv (GstGLShader * shader, const gchar * name,
|
gst_gl_shader_set_uniform_matrix_4fv (GstGLShader * shader, const gchar * name,
|
||||||
gint count, gboolean transpose, const gfloat * value)
|
gint count, gboolean transpose, const gfloat * value)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
set_uniform_pre_check (shader, name);
|
||||||
GstGLFuncs *gl;
|
shader->context->gl_vtable->UniformMatrix4fv (location, count, transpose,
|
||||||
GLint location = -1;
|
value);
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->UniformMatrix4fv (location, count, transpose, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1357,18 +1160,9 @@ void
|
||||||
gst_gl_shader_set_uniform_matrix_2x3fv (GstGLShader * shader,
|
gst_gl_shader_set_uniform_matrix_2x3fv (GstGLShader * shader,
|
||||||
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
set_uniform_pre_check (shader, name);
|
||||||
GstGLFuncs *gl;
|
shader->context->gl_vtable->UniformMatrix2x3fv (location, count, transpose,
|
||||||
GLint location = -1;
|
value);
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->UniformMatrix2x3fv (location, count, transpose, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1385,18 +1179,9 @@ void
|
||||||
gst_gl_shader_set_uniform_matrix_2x4fv (GstGLShader * shader,
|
gst_gl_shader_set_uniform_matrix_2x4fv (GstGLShader * shader,
|
||||||
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
set_uniform_pre_check (shader, name);
|
||||||
GstGLFuncs *gl;
|
shader->context->gl_vtable->UniformMatrix2x4fv (location, count, transpose,
|
||||||
GLint location = -1;
|
value);
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->UniformMatrix2x4fv (location, count, transpose, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1413,18 +1198,9 @@ void
|
||||||
gst_gl_shader_set_uniform_matrix_3x2fv (GstGLShader * shader,
|
gst_gl_shader_set_uniform_matrix_3x2fv (GstGLShader * shader,
|
||||||
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
set_uniform_pre_check (shader, name);
|
||||||
GstGLFuncs *gl;
|
shader->context->gl_vtable->UniformMatrix3x2fv (location, count, transpose,
|
||||||
GLint location = -1;
|
value);
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->UniformMatrix3x2fv (location, count, transpose, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1441,18 +1217,9 @@ void
|
||||||
gst_gl_shader_set_uniform_matrix_3x4fv (GstGLShader * shader,
|
gst_gl_shader_set_uniform_matrix_3x4fv (GstGLShader * shader,
|
||||||
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
set_uniform_pre_check (shader, name);
|
||||||
GstGLFuncs *gl;
|
shader->context->gl_vtable->UniformMatrix3x4fv (location, count, transpose,
|
||||||
GLint location = -1;
|
value);
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->UniformMatrix3x4fv (location, count, transpose, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1469,18 +1236,9 @@ void
|
||||||
gst_gl_shader_set_uniform_matrix_4x2fv (GstGLShader * shader,
|
gst_gl_shader_set_uniform_matrix_4x2fv (GstGLShader * shader,
|
||||||
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
set_uniform_pre_check (shader, name);
|
||||||
GstGLFuncs *gl;
|
shader->context->gl_vtable->UniformMatrix4x2fv (location, count, transpose,
|
||||||
GLint location = -1;
|
value);
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->UniformMatrix4x2fv (location, count, transpose, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1497,18 +1255,9 @@ void
|
||||||
gst_gl_shader_set_uniform_matrix_4x3fv (GstGLShader * shader,
|
gst_gl_shader_set_uniform_matrix_4x3fv (GstGLShader * shader,
|
||||||
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
const gchar * name, gint count, gboolean transpose, const gfloat * value)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
set_uniform_pre_check (shader, name);
|
||||||
GstGLFuncs *gl;
|
shader->context->gl_vtable->UniformMatrix4x3fv (location, count, transpose,
|
||||||
GLint location = -1;
|
value);
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
|
||||||
priv = shader->priv;
|
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
location = _get_uniform_location (shader, name);
|
|
||||||
|
|
||||||
gl->UniformMatrix4x3fv (location, count, transpose, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1521,20 +1270,17 @@ gst_gl_shader_set_uniform_matrix_4x3fv (GstGLShader * shader,
|
||||||
GLint
|
GLint
|
||||||
gst_gl_shader_get_attribute_location (GstGLShader * shader, const gchar * name)
|
gst_gl_shader_get_attribute_location (GstGLShader * shader, const gchar * name)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
gint ret;
|
gint ret;
|
||||||
|
|
||||||
g_return_val_if_fail (shader != NULL, -1);
|
g_return_val_if_fail (shader != NULL, -1);
|
||||||
priv = shader->priv;
|
g_return_val_if_fail (shader->priv->program_handle != 0, -1);
|
||||||
g_return_val_if_fail (priv->program_handle != 0, -1);
|
|
||||||
|
|
||||||
gl = shader->context->gl_vtable;
|
ret =
|
||||||
|
shader->context->gl_vtable->GetAttribLocation (shader->priv->
|
||||||
ret = gl->GetAttribLocation (priv->program_handle, name);
|
program_handle, name);
|
||||||
|
|
||||||
GST_TRACE_OBJECT (shader, "retreived program %i attribute \'%s\' location %i",
|
GST_TRACE_OBJECT (shader, "retreived program %i attribute \'%s\' location %i",
|
||||||
(int) priv->program_handle, name, ret);
|
(int) shader->priv->program_handle, name, ret);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1552,18 +1298,14 @@ void
|
||||||
gst_gl_shader_bind_attribute_location (GstGLShader * shader, GLuint index,
|
gst_gl_shader_bind_attribute_location (GstGLShader * shader, GLuint index,
|
||||||
const gchar * name)
|
const gchar * name)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
g_return_if_fail (shader != NULL);
|
||||||
priv = shader->priv;
|
g_return_if_fail (shader->priv->program_handle != 0);
|
||||||
g_return_if_fail (priv->program_handle != 0);
|
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
|
|
||||||
GST_TRACE_OBJECT (shader, "binding program %i attribute \'%s\' location %i",
|
GST_TRACE_OBJECT (shader, "binding program %i attribute \'%s\' location %i",
|
||||||
(int) priv->program_handle, name, index);
|
(int) shader->priv->program_handle, name, index);
|
||||||
|
|
||||||
gl->BindAttribLocation (priv->program_handle, index, name);
|
shader->context->gl_vtable->BindAttribLocation (shader->priv->program_handle,
|
||||||
|
index, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1579,18 +1321,14 @@ void
|
||||||
gst_gl_shader_bind_frag_data_location (GstGLShader * shader,
|
gst_gl_shader_bind_frag_data_location (GstGLShader * shader,
|
||||||
guint index, const gchar * name)
|
guint index, const gchar * name)
|
||||||
{
|
{
|
||||||
GstGLShaderPrivate *priv;
|
|
||||||
GstGLFuncs *gl;
|
|
||||||
|
|
||||||
g_return_if_fail (shader != NULL);
|
g_return_if_fail (shader != NULL);
|
||||||
if (!_ensure_program (shader))
|
if (!_ensure_program (shader))
|
||||||
g_return_if_fail (shader->priv->program_handle);
|
g_return_if_fail (shader->priv->program_handle);
|
||||||
priv = shader->priv;
|
g_return_if_fail (shader->context->gl_vtable->BindFragDataLocation);
|
||||||
gl = shader->context->gl_vtable;
|
|
||||||
g_return_if_fail (gl->BindFragDataLocation);
|
|
||||||
|
|
||||||
GST_TRACE_OBJECT (shader, "binding program %i frag data \'%s\' location %i",
|
GST_TRACE_OBJECT (shader, "binding program %i frag data \'%s\' location %i",
|
||||||
(int) priv->program_handle, name, index);
|
(int) shader->priv->program_handle, name, index);
|
||||||
|
|
||||||
gl->BindFragDataLocation (priv->program_handle, index, name);
|
shader->context->gl_vtable->BindFragDataLocation (shader->priv->
|
||||||
|
program_handle, index, name);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue