forked from enlightenment/efl
Evas filters: Fix blend with color with rgba buffers
- blend { color = red } - blur { color = red } were not working with RGBA input. This patch fixes that. @fix
This commit is contained in:
parent
38c3c5a0d6
commit
8b897144ac
|
@ -927,7 +927,8 @@ evas_filter_command_blur_add(Evas_Filter_Context *ctx, void *drawctx,
|
|||
ERR("Output and input don't have the same format");
|
||||
goto fail;
|
||||
}
|
||||
else if (blend || (in->alpha_only && !out->alpha_only))
|
||||
else if ((blend || (in->alpha_only && !out->alpha_only)) ||
|
||||
(!blend && !in->alpha_only && !out->alpha_only && (color != 0xFFFFFFFF)))
|
||||
{
|
||||
DBG("Adding extra blending step %d --> %d (%s --> %s)", in->id, out->id,
|
||||
in->alpha_only ? "Alpha" : "RGBA",
|
||||
|
|
|
@ -208,7 +208,12 @@ _image_draw_cpu_rgba2rgba(void *data EINA_UNUSED, void *context,
|
|||
|
||||
EINA_SAFETY_ON_FALSE_RETURN_VAL((src_w == dst_w) && (src_h == dst_h), EINA_FALSE);
|
||||
|
||||
func = evas_common_gfx_func_composite_pixel_span_get(src->cache_entry.flags.alpha, src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, 1, dc->render_op);
|
||||
if (!dc->color)
|
||||
return EINA_TRUE;
|
||||
else if (dc->color == 0xFFFFFFFF)
|
||||
func = evas_common_gfx_func_composite_pixel_span_get(src->cache_entry.flags.alpha, src->cache_entry.flags.alpha_sparse, dst->cache_entry.flags.alpha, 1, dc->render_op);
|
||||
else
|
||||
func = evas_common_gfx_func_composite_pixel_color_span_get(src->cache_entry.flags.alpha, src->cache_entry.flags.alpha_sparse, dc->color, dst->cache_entry.flags.alpha, 1, dc->render_op);
|
||||
EINA_SAFETY_ON_NULL_RETURN_VAL(func, EINA_FALSE);
|
||||
|
||||
sw = src->cache_entry.w;
|
||||
|
@ -276,8 +281,11 @@ _filter_blend_cpu_rgba(Evas_Filter_Command *cmd)
|
|||
return EINA_TRUE;
|
||||
|
||||
drawctx = cmd->ENFN->context_new(cmd->ENDT);
|
||||
cmd->ENFN->context_color_set(cmd->ENDT, drawctx, cmd->draw.R, cmd->draw.G,
|
||||
cmd->draw.B, cmd->draw.A);
|
||||
cmd->ENFN->context_color_set(cmd->ENDT, drawctx, 255, 255, 255, 255);
|
||||
if ((cmd->draw.R != 255) || (cmd->draw.G != 255) || (cmd->draw.B != 255) || (cmd->draw.A != 255))
|
||||
cmd->ENFN->context_multiplier_set(cmd->ENDT, drawctx, cmd->draw.R, cmd->draw.G, cmd->draw.B, cmd->draw.A);
|
||||
else
|
||||
cmd->ENFN->context_multiplier_unset(cmd->ENDT, drawctx);
|
||||
cmd->ENFN->context_render_op_set(cmd->ENDT, drawctx, cmd->draw.render_op);
|
||||
|
||||
if (cmd->draw.clip_use)
|
||||
|
|
Loading…
Reference in New Issue