summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2010-05-19 18:34:00 +0200
committerBenjamin Otte <otte@redhat.com>2010-05-20 11:02:49 +0200
commit970c879dd897019f90b0c8ff5a18781be4935c55 (patch)
tree2733d8a72fce1ac1822b9bee33c8a6c0cf353df0
parent065969d78f23c634ebcb2b931cbb1fe184f2cedf (diff)
gl: Binding variables only works for the current shader
So make the code reflect that.
-rw-r--r--src/cairo-gl-composite.c27
-rw-r--r--src/cairo-gl-private.h6
-rw-r--r--src/cairo-gl-shaders.c22
3 files changed, 20 insertions, 35 deletions
diff --git a/src/cairo-gl-composite.c b/src/cairo-gl-composite.c
index 76ae6cdd..f06a0c41 100644
--- a/src/cairo-gl-composite.c
+++ b/src/cairo-gl-composite.c
@@ -540,7 +540,6 @@ _cairo_gl_composite_set_clip_region (cairo_gl_context_t *ctx,
static void
_cairo_gl_operand_bind_to_shader (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
cairo_gl_operand_t *operand,
const char *name)
{
@@ -561,7 +560,6 @@ _cairo_gl_operand_bind_to_shader (cairo_gl_context_t *ctx,
case CAIRO_GL_OPERAND_CONSTANT:
strcpy (custom_part, "_constant");
_cairo_gl_shader_bind_vec4 (ctx,
- shader,
uniform_name,
operand->constant.color[0],
operand->constant.color[1],
@@ -570,31 +568,31 @@ _cairo_gl_operand_bind_to_shader (cairo_gl_context_t *ctx,
break;
case CAIRO_GL_OPERAND_LINEAR_GRADIENT:
strcpy (custom_part, "_matrix");
- _cairo_gl_shader_bind_matrix (ctx, shader,
+ _cairo_gl_shader_bind_matrix (ctx,
uniform_name,
&operand->linear.m);
strcpy (custom_part, "_segment");
- _cairo_gl_shader_bind_vec2 (ctx, shader,
+ _cairo_gl_shader_bind_vec2 (ctx,
uniform_name,
operand->linear.segment_x,
operand->linear.segment_y);
break;
case CAIRO_GL_OPERAND_RADIAL_GRADIENT:
strcpy (custom_part, "_matrix");
- _cairo_gl_shader_bind_matrix (ctx, shader,
+ _cairo_gl_shader_bind_matrix (ctx,
uniform_name,
&operand->radial.m);
strcpy (custom_part, "_circle_1");
- _cairo_gl_shader_bind_vec2 (ctx, shader,
+ _cairo_gl_shader_bind_vec2 (ctx,
uniform_name,
operand->radial.circle_1_x,
operand->radial.circle_1_y);
strcpy (custom_part, "_radius_0");
- _cairo_gl_shader_bind_float (ctx, shader,
+ _cairo_gl_shader_bind_float (ctx,
uniform_name,
operand->radial.radius_0);
strcpy (custom_part, "_radius_1");
- _cairo_gl_shader_bind_float (ctx, shader,
+ _cairo_gl_shader_bind_float (ctx,
uniform_name,
operand->radial.radius_1);
break;
@@ -603,14 +601,13 @@ _cairo_gl_operand_bind_to_shader (cairo_gl_context_t *ctx,
static void
_cairo_gl_composite_bind_to_shader (cairo_gl_context_t *ctx,
- cairo_gl_composite_t *setup,
- cairo_gl_shader_t *shader)
+ cairo_gl_composite_t *setup)
{
- if (shader == NULL)
+ if (ctx->current_shader == NULL)
return;
- _cairo_gl_operand_bind_to_shader (ctx, shader, &setup->src, "source");
- _cairo_gl_operand_bind_to_shader (ctx, shader, &setup->mask, "mask");
+ _cairo_gl_operand_bind_to_shader (ctx, &setup->src, "source");
+ _cairo_gl_operand_bind_to_shader (ctx, &setup->mask, "mask");
}
static void
@@ -1093,7 +1090,7 @@ _cairo_gl_composite_begin_component_alpha (cairo_gl_context_t *ctx,
if (unlikely (status))
return status;
_cairo_gl_set_shader (ctx, setup->pre_shader);
- _cairo_gl_composite_bind_to_shader (ctx, setup, setup->pre_shader);
+ _cairo_gl_composite_bind_to_shader (ctx, setup);
}
return CAIRO_STATUS_SUCCESS;
@@ -1138,7 +1135,7 @@ _cairo_gl_composite_begin (cairo_gl_context_t *ctx,
setup->has_component_alpha);
_cairo_gl_set_shader (ctx, setup->shader);
- _cairo_gl_composite_bind_to_shader (ctx, setup, setup->shader);
+ _cairo_gl_composite_bind_to_shader (ctx, setup);
glBindBufferARB (GL_ARRAY_BUFFER_ARB, ctx->vbo);
diff --git a/src/cairo-gl-private.h b/src/cairo-gl-private.h
index 19c34c31..6f191c9b 100644
--- a/src/cairo-gl-private.h
+++ b/src/cairo-gl-private.h
@@ -405,19 +405,16 @@ _cairo_gl_get_shader (cairo_gl_context_t *ctx,
cairo_private void
_cairo_gl_shader_bind_float (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name,
float value);
cairo_private void
_cairo_gl_shader_bind_vec2 (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name,
float value0, float value1);
cairo_private void
_cairo_gl_shader_bind_vec3 (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name,
float value0,
float value1,
@@ -425,20 +422,17 @@ _cairo_gl_shader_bind_vec3 (cairo_gl_context_t *ctx,
cairo_private void
_cairo_gl_shader_bind_vec4 (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name,
float value0, float value1,
float value2, float value3);
cairo_private void
_cairo_gl_shader_bind_matrix (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name,
cairo_matrix_t* m);
cairo_private void
_cairo_gl_shader_bind_texture (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name,
GLuint tex_unit);
diff --git a/src/cairo-gl-shaders.c b/src/cairo-gl-shaders.c
index ccd97809..246598c0 100644
--- a/src/cairo-gl-shaders.c
+++ b/src/cairo-gl-shaders.c
@@ -861,58 +861,52 @@ _cairo_gl_shader_compile (cairo_gl_context_t *ctx,
void
_cairo_gl_shader_bind_float (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name,
float value)
{
- ctx->shader_impl->bind_float (shader, name, value);
+ ctx->shader_impl->bind_float (ctx->current_shader, name, value);
}
void
_cairo_gl_shader_bind_vec2 (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name,
float value0,
float value1)
{
- ctx->shader_impl->bind_vec2 (shader, name, value0, value1);
+ ctx->shader_impl->bind_vec2 (ctx->current_shader, name, value0, value1);
}
void
_cairo_gl_shader_bind_vec3 (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name,
float value0,
float value1,
float value2)
{
- ctx->shader_impl->bind_vec3 (shader, name, value0, value1, value2);
+ ctx->shader_impl->bind_vec3 (ctx->current_shader, name, value0, value1, value2);
}
void
_cairo_gl_shader_bind_vec4 (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name,
float value0, float value1,
float value2, float value3)
{
- ctx->shader_impl->bind_vec4 (shader, name, value0, value1, value2, value3);
+ ctx->shader_impl->bind_vec4 (ctx->current_shader, name, value0, value1, value2, value3);
}
void
_cairo_gl_shader_bind_matrix (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name, cairo_matrix_t* m)
{
- ctx->shader_impl->bind_matrix (shader, name, m);
+ ctx->shader_impl->bind_matrix (ctx->current_shader, name, m);
}
void
_cairo_gl_shader_bind_texture (cairo_gl_context_t *ctx,
- cairo_gl_shader_t *shader,
const char *name, GLuint tex_unit)
{
- ctx->shader_impl->bind_texture (shader, name, tex_unit);
+ ctx->shader_impl->bind_texture (ctx->current_shader, name, tex_unit);
}
void
@@ -999,12 +993,12 @@ _cairo_gl_get_shader (cairo_gl_context_t *ctx,
_cairo_gl_set_shader (ctx, &entry->shader);
if (source != CAIRO_GL_OPERAND_CONSTANT) {
- _cairo_gl_shader_bind_texture (ctx, &entry->shader, "source_sampler", 0);
+ _cairo_gl_shader_bind_texture (ctx, "source_sampler", 0);
}
if (mask != CAIRO_GL_OPERAND_CONSTANT &&
mask != CAIRO_GL_OPERAND_SPANS &&
mask != CAIRO_GL_OPERAND_NONE) {
- _cairo_gl_shader_bind_texture (ctx, &entry->shader, "mask_sampler", 1);
+ _cairo_gl_shader_bind_texture (ctx, "mask_sampler", 1);
}
_cairo_gl_set_shader (ctx, NULL);