diff --git a/src/shell-glsl-effect.c b/src/shell-glsl-effect.c index ee6f5eefe..3051e0af9 100644 --- a/src/shell-glsl-effect.c +++ b/src/shell-glsl-effect.c @@ -179,3 +179,27 @@ shell_glsl_effect_set_uniform_float (ShellGLSLEffect *effect, n_components, total_count / n_components, value); } + +/** + * shell_glsl_effect_set_uniform_matrix: + * @effect: a #ShellGLSLEffect + * @uniform: the uniform location (as returned by shell_glsl_effect_get_uniform_location()) + * @transpose: Whether to transpose the matrix + * @dimensions: the number of components in the uniform (eg. 3 for a vec3) + * @total_count: the total number of floats in @value + * @value: (array length=total_count): the array of floats to set @uniform + */ +void +shell_glsl_effect_set_uniform_matrix (ShellGLSLEffect *effect, + int uniform, + gboolean transpose, + int dimensions, + int total_count, + const float *value) +{ + ShellGLSLEffectPrivate *priv = shell_glsl_effect_get_instance_private (effect); + cogl_pipeline_set_uniform_matrix (priv->pipeline, uniform, + dimensions, + total_count / (dimensions * dimensions), + transpose, value); +} diff --git a/src/shell-glsl-effect.h b/src/shell-glsl-effect.h index d943cefb8..3759e7172 100644 --- a/src/shell-glsl-effect.h +++ b/src/shell-glsl-effect.h @@ -52,5 +52,11 @@ void shell_glsl_effect_set_uniform_float (ShellGLSLEffect *effect, int n_components, int total_count, const float *value); +void shell_glsl_effect_set_uniform_matrix (ShellGLSLEffect *effect, + int uniform, + gboolean transpose, + int dimensions, + int total_count, + const float *value); #endif /* __SHELL_GLSL_EFFECT_H__ */