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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2164>
This commit is contained in:
Sebastian Wick 2022-02-08 21:22:58 +01:00
parent e07bc62fbd
commit 170f3ee089
2 changed files with 30 additions and 0 deletions

View File

@ -179,3 +179,27 @@ shell_glsl_effect_set_uniform_float (ShellGLSLEffect *effect,
n_components, total_count / n_components, n_components, total_count / n_components,
value); 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);
}

View File

@ -52,5 +52,11 @@ void shell_glsl_effect_set_uniform_float (ShellGLSLEffect *effect,
int n_components, int n_components,
int total_count, int total_count,
const float *value); 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__ */ #endif /* __SHELL_GLSL_EFFECT_H__ */