From 170f3ee08944fb4b80e4bbbfdbbfb3250d301cc7 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Tue, 8 Feb 2022 21:22:58 +0100 Subject: [PATCH] glsl-effect: Allow to set uniform matrices Add support for setting a uniform matrix on GLSLEffect because the color vision deficiency simulation extension requires it. Part-of: --- src/shell-glsl-effect.c | 24 ++++++++++++++++++++++++ src/shell-glsl-effect.h | 6 ++++++ 2 files changed, 30 insertions(+) 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__ */