diff options
author | Benjamin Otte <otte@redhat.com> | 2010-05-19 18:34:00 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2010-05-20 11:02:49 +0200 |
commit | 970c879dd897019f90b0c8ff5a18781be4935c55 (patch) | |
tree | 2733d8a72fce1ac1822b9bee33c8a6c0cf353df0 | |
parent | 065969d78f23c634ebcb2b931cbb1fe184f2cedf (diff) |
gl: Binding variables only works for the current shader
So make the code reflect that.
-rw-r--r-- | src/cairo-gl-composite.c | 27 | ||||
-rw-r--r-- | src/cairo-gl-private.h | 6 | ||||
-rw-r--r-- | src/cairo-gl-shaders.c | 22 |
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); |