mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-25 22:25:58 +01:00
compositor: make renderer optional
This is a first step towards moving texture uploading out of wlr_compositor. This commit allows compositors to opt-out of the texture uploading by passing a NULL wlr_renderer. An immediate user of this is gamescope, which currently implements a stub wlr_renderer just to make wlr_compositor happy.
This commit is contained in:
parent
1978a91717
commit
42016fa262
2 changed files with 15 additions and 4 deletions
|
@ -90,7 +90,7 @@ struct wlr_surface_output {
|
||||||
|
|
||||||
struct wlr_surface {
|
struct wlr_surface {
|
||||||
struct wl_resource *resource;
|
struct wl_resource *resource;
|
||||||
struct wlr_renderer *renderer;
|
struct wlr_renderer *renderer; // may be NULL
|
||||||
/**
|
/**
|
||||||
* The surface's buffer, if any. A surface has an attached buffer when it
|
* The surface's buffer, if any. A surface has an attached buffer when it
|
||||||
* commits with a non-null buffer in its pending state. A surface will not
|
* commits with a non-null buffer in its pending state. A surface will not
|
||||||
|
@ -168,7 +168,7 @@ struct wlr_renderer;
|
||||||
|
|
||||||
struct wlr_compositor {
|
struct wlr_compositor {
|
||||||
struct wl_global *global;
|
struct wl_global *global;
|
||||||
struct wlr_renderer *renderer;
|
struct wlr_renderer *renderer; // may be NULL
|
||||||
|
|
||||||
struct wl_listener display_destroy;
|
struct wl_listener display_destroy;
|
||||||
|
|
||||||
|
@ -305,6 +305,9 @@ void wlr_surface_unlock_cached(struct wlr_surface *surface, uint32_t seq);
|
||||||
/**
|
/**
|
||||||
* Create the wl_compositor global, which can be used by clients to create
|
* Create the wl_compositor global, which can be used by clients to create
|
||||||
* surfaces and regions.
|
* surfaces and regions.
|
||||||
|
*
|
||||||
|
* If a renderer is supplied, the compositor will create struct wlr_texture
|
||||||
|
* objects from client buffers on surface commit.
|
||||||
*/
|
*/
|
||||||
struct wlr_compositor *wlr_compositor_create(struct wl_display *display,
|
struct wlr_compositor *wlr_compositor_create(struct wl_display *display,
|
||||||
struct wlr_renderer *renderer);
|
struct wlr_renderer *renderer);
|
||||||
|
|
|
@ -370,6 +370,10 @@ static void surface_apply_damage(struct wlr_surface *surface) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (surface->renderer == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
struct wlr_client_buffer *buffer = wlr_client_buffer_create(
|
struct wlr_client_buffer *buffer = wlr_client_buffer_create(
|
||||||
surface->current.buffer, surface->renderer);
|
surface->current.buffer, surface->renderer);
|
||||||
|
|
||||||
|
@ -699,8 +703,12 @@ static struct wlr_surface *surface_create(struct wl_client *client,
|
||||||
pixman_region32_init(&surface->input_region);
|
pixman_region32_init(&surface->input_region);
|
||||||
wlr_addon_set_init(&surface->addons);
|
wlr_addon_set_init(&surface->addons);
|
||||||
|
|
||||||
wl_signal_add(&renderer->events.destroy, &surface->renderer_destroy);
|
if (renderer != NULL) {
|
||||||
surface->renderer_destroy.notify = surface_handle_renderer_destroy;
|
wl_signal_add(&renderer->events.destroy, &surface->renderer_destroy);
|
||||||
|
surface->renderer_destroy.notify = surface_handle_renderer_destroy;
|
||||||
|
} else {
|
||||||
|
wl_list_init(&surface->renderer_destroy.link);
|
||||||
|
}
|
||||||
|
|
||||||
return surface;
|
return surface;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue