gl-renderer: color transform in blit_shadow_to_output()

Use the blending to output color space transformation when blitting from
the shadow to a framebuffer.

This allows the blending and output color spaces to differ as long as
shadow is used, in case a backend does not off-load the color
transformation.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
dev
Pekka Paalanen 4 years ago committed by Pekka Paalanen
parent e7b43ba3b4
commit b12d4fcb53
  1. 10
      libweston/renderer-gl/gl-renderer.c

@ -1518,11 +1518,10 @@ blit_shadow_to_output(struct weston_output *output,
pixman_region32_t *output_damage) pixman_region32_t *output_damage)
{ {
struct gl_output_state *go = get_output_state(output); struct gl_output_state *go = get_output_state(output);
const struct gl_shader_config sconf = { struct gl_shader_config sconf = {
.req = { .req = {
.variant = SHADER_VARIANT_RGBA, .variant = SHADER_VARIANT_RGBA,
.input_is_premult = true, .input_is_premult = true,
.color_pre_curve = SHADER_COLOR_CURVE_IDENTITY,
}, },
.projection = { .projection = {
.d = { /* transpose */ .d = { /* transpose */
@ -1547,7 +1546,10 @@ blit_shadow_to_output(struct weston_output *output,
pixman_region32_t translated_damage; pixman_region32_t translated_damage;
GLfloat verts[4 * 2]; GLfloat verts[4 * 2];
assert(output->from_blend_to_output == NULL); if (!gl_shader_config_set_color_transform(&sconf, output->from_blend_to_output)) {
weston_log("GL-renderer: %s failed to generate a color transformation.\n", __func__);
return;
}
pixman_region32_init(&translated_damage); pixman_region32_init(&translated_damage);
@ -1612,7 +1614,7 @@ gl_renderer_repaint_output(struct weston_output *output,
struct weston_paint_node *pnode; struct weston_paint_node *pnode;
assert(output->from_blend_to_output_by_backend || assert(output->from_blend_to_output_by_backend ||
output->from_blend_to_output == NULL); output->from_blend_to_output == NULL || shadow_exists(go));
if (use_output(output) < 0) if (use_output(output) < 0)
return; return;

Loading…
Cancel
Save