mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-09 04:48:04 +02:00
renderer-gl: Merge solid-buffer and placeholder paths
Now that paint nodes handle solid buffers properly, we can use the same codepath through gl-renderer for all solid buffers, regardless of whether they're a single-pixel buffer from clients, or a weston_curtain, or a temporary placeholder due to content-protection or direct-display. Signed-off-by: Daniel Stone <daniels@collabora.com>
This commit is contained in:
parent
c6b519ab12
commit
6ffb4358e1
1 changed files with 15 additions and 46 deletions
|
|
@ -3654,46 +3654,32 @@ gl_renderer_import_dmabuf(struct weston_compositor *ec,
|
|||
}
|
||||
|
||||
static struct gl_buffer_state *
|
||||
ensure_renderer_gl_buffer_state(struct weston_surface *surface,
|
||||
struct weston_buffer *buffer)
|
||||
gl_renderer_attach_solid(struct weston_surface *surface,
|
||||
struct weston_paint_node *pnode,
|
||||
struct weston_buffer *buffer)
|
||||
{
|
||||
struct gl_renderer *gr = get_renderer(surface->compositor);
|
||||
struct gl_surface_state *gs = get_surface_state(surface);
|
||||
struct gl_buffer_state *gb = buffer->renderer_private;
|
||||
|
||||
if (gb) {
|
||||
gs->buffer = gb;
|
||||
return gb;
|
||||
if (!gb) {
|
||||
gb = zalloc(sizeof(*gb));
|
||||
gb->gr = gr;
|
||||
pixman_region32_init(&gb->texture_damage);
|
||||
buffer->renderer_private = gb;
|
||||
gb->destroy_listener.notify = handle_buffer_destroy;
|
||||
wl_signal_add(&buffer->destroy_signal, &gb->destroy_listener);
|
||||
}
|
||||
|
||||
gb = zalloc(sizeof(*gb));
|
||||
gb->gr = gr;
|
||||
pixman_region32_init(&gb->texture_damage);
|
||||
buffer->renderer_private = gb;
|
||||
gb->destroy_listener.notify = handle_buffer_destroy;
|
||||
wl_signal_add(&buffer->destroy_signal, &gb->destroy_listener);
|
||||
|
||||
gs->buffer = gb;
|
||||
|
||||
return gb;
|
||||
}
|
||||
|
||||
static void
|
||||
attach_direct_display_placeholder(struct weston_paint_node *pnode)
|
||||
{
|
||||
struct weston_surface *surface = pnode->surface;
|
||||
struct weston_buffer *buffer = surface->buffer_ref.buffer;
|
||||
struct gl_buffer_state *gb;
|
||||
|
||||
gb = ensure_renderer_gl_buffer_state(surface, buffer);
|
||||
|
||||
/* uses the same color as the content-protection placeholder */
|
||||
gb->color[0] = pnode->solid.r;
|
||||
gb->color[1] = pnode->solid.g;
|
||||
gb->color[2] = pnode->solid.b;
|
||||
gb->color[3] = pnode->solid.a;
|
||||
|
||||
gb->shader_variant = SHADER_VARIANT_SOLID;
|
||||
|
||||
return gb;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -3794,22 +3780,6 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
gl_renderer_attach_solid(struct weston_surface *surface,
|
||||
struct weston_buffer *buffer)
|
||||
{
|
||||
struct gl_buffer_state *gb;
|
||||
|
||||
gb = ensure_renderer_gl_buffer_state(surface, buffer);
|
||||
|
||||
gb->color[0] = buffer->solid.r;
|
||||
gb->color[1] = buffer->solid.g;
|
||||
gb->color[2] = buffer->solid.b;
|
||||
gb->color[3] = buffer->solid.a;
|
||||
|
||||
gb->shader_variant = SHADER_VARIANT_SOLID;
|
||||
}
|
||||
|
||||
static void
|
||||
gl_renderer_attach(struct weston_paint_node *pnode)
|
||||
{
|
||||
|
|
@ -3839,8 +3809,8 @@ gl_renderer_attach(struct weston_paint_node *pnode)
|
|||
if (!buffer)
|
||||
goto out;
|
||||
|
||||
if (pnode->is_direct) {
|
||||
attach_direct_display_placeholder(pnode);
|
||||
if (pnode->draw_solid) {
|
||||
gl_renderer_attach_solid(es, pnode, buffer);
|
||||
goto success;
|
||||
}
|
||||
|
||||
|
|
@ -3853,8 +3823,7 @@ gl_renderer_attach(struct weston_paint_node *pnode)
|
|||
gl_renderer_attach_buffer(es, buffer);
|
||||
break;
|
||||
case WESTON_BUFFER_SOLID:
|
||||
gl_renderer_attach_solid(es, buffer);
|
||||
break;
|
||||
unreachable("solid buffer should not get here");
|
||||
default:
|
||||
weston_log("unhandled buffer type!\n");
|
||||
weston_buffer_send_server_error(buffer,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue