mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-03-15 19:40:38 +01:00
gl: Don't store the shader in the composite_t anymore
Now that we have ctx->current_shader, there's no need to keep it in the composite setup code.
This commit is contained in:
parent
6c477b4a94
commit
bb7ca71c1a
3 changed files with 24 additions and 32 deletions
|
|
@ -842,7 +842,7 @@ static void
|
|||
_cairo_gl_set_mask_operand (cairo_gl_context_t *ctx,
|
||||
cairo_gl_composite_t *setup)
|
||||
{
|
||||
if (setup->shader)
|
||||
if (ctx->current_shader)
|
||||
return;
|
||||
|
||||
switch (setup->mask.type) {
|
||||
|
|
@ -1052,15 +1052,14 @@ _cairo_gl_composite_begin_component_alpha (cairo_gl_context_t *ctx,
|
|||
*/
|
||||
if (setup->op == CAIRO_OPERATOR_OVER) {
|
||||
setup->op = CAIRO_OPERATOR_ADD;
|
||||
status = _cairo_gl_get_shader (ctx,
|
||||
setup->src.type,
|
||||
setup->mask.type,
|
||||
CAIRO_GL_SHADER_IN_CA_SOURCE_ALPHA,
|
||||
&setup->pre_shader);
|
||||
status = _cairo_gl_set_shader_by_type (ctx,
|
||||
setup->src.type,
|
||||
setup->mask.type,
|
||||
CAIRO_GL_SHADER_IN_CA_SOURCE_ALPHA);
|
||||
if (unlikely (status))
|
||||
return status;
|
||||
_cairo_gl_set_shader (ctx, setup->pre_shader);
|
||||
_cairo_gl_composite_bind_to_shader (ctx, setup);
|
||||
setup->pre_shader = ctx->current_shader;
|
||||
}
|
||||
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
|
|
@ -1080,12 +1079,11 @@ _cairo_gl_composite_begin (cairo_gl_context_t *ctx,
|
|||
return status;
|
||||
}
|
||||
|
||||
status = _cairo_gl_get_shader (ctx,
|
||||
setup->src.type,
|
||||
setup->mask.type,
|
||||
setup->has_component_alpha ? CAIRO_GL_SHADER_IN_CA_SOURCE
|
||||
: CAIRO_GL_SHADER_IN_NORMAL,
|
||||
&setup->shader);
|
||||
status = _cairo_gl_set_shader_by_type (ctx,
|
||||
setup->src.type,
|
||||
setup->mask.type,
|
||||
setup->has_component_alpha ? CAIRO_GL_SHADER_IN_CA_SOURCE
|
||||
: CAIRO_GL_SHADER_IN_NORMAL);
|
||||
if (unlikely (status)) {
|
||||
setup->pre_shader = NULL;
|
||||
return status;
|
||||
|
|
@ -1104,7 +1102,6 @@ _cairo_gl_composite_begin (cairo_gl_context_t *ctx,
|
|||
setup->op,
|
||||
setup->has_component_alpha);
|
||||
|
||||
_cairo_gl_set_shader (ctx, setup->shader);
|
||||
_cairo_gl_composite_bind_to_shader (ctx, setup);
|
||||
|
||||
_cairo_gl_operand_setup_texture (ctx, &setup->src, 0);
|
||||
|
|
@ -1153,13 +1150,15 @@ _cairo_gl_composite_draw (cairo_gl_context_t *ctx,
|
|||
if (! setup->pre_shader) {
|
||||
glDrawArrays (GL_TRIANGLES, 0, count);
|
||||
} else {
|
||||
cairo_gl_shader_t *prev_shader = ctx->current_shader;
|
||||
|
||||
_cairo_gl_set_shader (ctx, setup->pre_shader);
|
||||
_cairo_gl_set_operator (setup->dst, CAIRO_OPERATOR_DEST_OUT, TRUE);
|
||||
_cairo_gl_set_src_alpha_operand (ctx, setup);
|
||||
_cairo_gl_set_component_alpha_mask_operand (ctx, setup);
|
||||
glDrawArrays (GL_TRIANGLES, 0, count);
|
||||
|
||||
_cairo_gl_set_shader (ctx, setup->shader);
|
||||
_cairo_gl_set_shader (ctx, prev_shader);
|
||||
_cairo_gl_set_operator (setup->dst, setup->op, TRUE);
|
||||
_cairo_gl_set_src_operand (ctx, setup);
|
||||
_cairo_gl_set_component_alpha_mask_operand (ctx, setup);
|
||||
|
|
@ -1361,7 +1360,6 @@ _cairo_gl_composite_end (cairo_gl_context_t *ctx,
|
|||
glDisable (GL_TEXTURE_1D);
|
||||
glDisable (ctx->tex_target);
|
||||
|
||||
setup->shader = NULL;
|
||||
setup->pre_shader = NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -194,7 +194,6 @@ typedef struct _cairo_gl_composite {
|
|||
|
||||
cairo_gl_operand_t src;
|
||||
cairo_gl_operand_t mask;
|
||||
cairo_gl_shader_t *shader;
|
||||
cairo_gl_shader_t *pre_shader; /* for component alpha */
|
||||
|
||||
char *vb;
|
||||
|
|
@ -397,11 +396,10 @@ _cairo_gl_shader_compile (cairo_gl_context_t *ctx,
|
|||
const char *fragment_text);
|
||||
|
||||
cairo_private cairo_status_t
|
||||
_cairo_gl_get_shader (cairo_gl_context_t *ctx,
|
||||
cairo_gl_operand_type_t source,
|
||||
cairo_gl_operand_type_t mask,
|
||||
cairo_gl_shader_in_t in,
|
||||
cairo_gl_shader_t **out_program);
|
||||
_cairo_gl_set_shader_by_type (cairo_gl_context_t *ctx,
|
||||
cairo_gl_operand_type_t source,
|
||||
cairo_gl_operand_type_t mask,
|
||||
cairo_gl_shader_in_t in);
|
||||
|
||||
cairo_private void
|
||||
_cairo_gl_shader_bind_float (cairo_gl_context_t *ctx,
|
||||
|
|
|
|||
|
|
@ -925,17 +925,15 @@ _cairo_gl_set_shader (cairo_gl_context_t *ctx,
|
|||
}
|
||||
|
||||
cairo_status_t
|
||||
_cairo_gl_get_shader (cairo_gl_context_t *ctx,
|
||||
cairo_gl_operand_type_t source,
|
||||
cairo_gl_operand_type_t mask,
|
||||
cairo_gl_shader_in_t in,
|
||||
cairo_gl_shader_t **out)
|
||||
_cairo_gl_set_shader_by_type (cairo_gl_context_t *ctx,
|
||||
cairo_gl_operand_type_t source,
|
||||
cairo_gl_operand_type_t mask,
|
||||
cairo_gl_shader_in_t in)
|
||||
{
|
||||
cairo_shader_cache_entry_t lookup, *entry;
|
||||
char *fs_source;
|
||||
cairo_status_t status;
|
||||
|
||||
*out = NULL;
|
||||
if (ctx->shader_impl == NULL)
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
|
||||
|
|
@ -949,7 +947,7 @@ _cairo_gl_get_shader (cairo_gl_context_t *ctx,
|
|||
entry = _cairo_cache_lookup (&ctx->shaders, &lookup.base);
|
||||
if (entry) {
|
||||
assert (entry->shader.program);
|
||||
*out = &entry->shader;
|
||||
_cairo_gl_set_shader (ctx, &entry->shader);
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
@ -992,6 +990,7 @@ _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, "source_sampler", 0);
|
||||
}
|
||||
|
|
@ -1001,8 +1000,5 @@ _cairo_gl_get_shader (cairo_gl_context_t *ctx,
|
|||
_cairo_gl_shader_bind_texture (ctx, "mask_sampler", 1);
|
||||
}
|
||||
|
||||
_cairo_gl_set_shader (ctx, NULL);
|
||||
|
||||
*out = &entry->shader;
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue