[2/6] gl: Add function to bind a 4x4 float matrix shader uniform

Message ID 1297163415-31035-3-git-send-email-alexandros.frantzis@linaro.org
State Accepted
Commit b13198348ce053445ca97b513611207e34aa4528
Headers show

Commit Message

alexandros.frantzis@linaro.org Feb. 8, 2011, 11:10 a.m.
From: Alexandros Frantzis <alexandros.frantzis@linaro.org>

---
 src/cairo-gl-private.h |    5 +++++
 src/cairo-gl-shaders.c |   26 ++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 0 deletions(-)

Patch

diff --git a/src/cairo-gl-private.h b/src/cairo-gl-private.h
index 04322f2..3dd75f8 100644
--- a/src/cairo-gl-private.h
+++ b/src/cairo-gl-private.h
@@ -523,6 +523,11 @@  _cairo_gl_shader_bind_matrix (cairo_gl_context_t *ctx,
 			      cairo_matrix_t* m);
 
 cairo_private void
+_cairo_gl_shader_bind_matrix4f (cairo_gl_context_t *ctx,
+				const char *name,
+				GLfloat* gl_m);
+
+cairo_private void
 _cairo_gl_shader_bind_texture (cairo_gl_context_t *ctx,
 			       const char *name,
 			       GLuint tex_unit);
diff --git a/src/cairo-gl-shaders.c b/src/cairo-gl-shaders.c
index a39883d..1b10b04 100644
--- a/src/cairo-gl-shaders.c
+++ b/src/cairo-gl-shaders.c
@@ -93,6 +93,12 @@  typedef struct cairo_gl_shader_impl {
 		    cairo_matrix_t* m);
 
     void
+    (*bind_matrix4f) (cairo_gl_context_t *ctx,
+		      cairo_gl_shader_t *shader,
+		      const char *name,
+		      GLfloat* gl_m);
+
+    void
     (*bind_texture) (cairo_gl_context_t *ctx,
 		     cairo_gl_shader_t *shader,
 		     const char *name,
@@ -263,6 +269,18 @@  bind_matrix_core_2_0 (cairo_gl_context_t *ctx,
 }
 
 static void
+bind_matrix4f_core_2_0 (cairo_gl_context_t *ctx,
+		        cairo_gl_shader_t *shader,
+		        const char *name,
+		        GLfloat* gl_m)
+{
+    cairo_gl_dispatch_t *dispatch = &ctx->dispatch;
+    GLint location = dispatch->GetUniformLocation (shader->program, name);
+    assert (location != -1);
+    dispatch->UniformMatrix4fv (location, 1, GL_FALSE, gl_m);
+}
+
+static void
 bind_texture_core_2_0 (cairo_gl_context_t *ctx, cairo_gl_shader_t *shader,
 		       const char *name, cairo_gl_tex_t tex_unit)
 {
@@ -292,6 +310,7 @@  static const cairo_gl_shader_impl_t shader_impl_core_2_0 = {
     bind_vec3_core_2_0,
     bind_vec4_core_2_0,
     bind_matrix_core_2_0,
+    bind_matrix4f_core_2_0,
     bind_texture_core_2_0,
     use_program_core_2_0,
 };
@@ -798,6 +817,13 @@  _cairo_gl_shader_bind_matrix (cairo_gl_context_t *ctx,
 }
 
 void
+_cairo_gl_shader_bind_matrix4f (cairo_gl_context_t *ctx,
+				const char *name, GLfloat* gl_m)
+{
+    ctx->shader_impl->bind_matrix4f (ctx, ctx->current_shader, name, gl_m);
+}
+
+void
 _cairo_gl_shader_bind_texture (cairo_gl_context_t *ctx,
 			       const char *name, GLuint tex_unit)
 {