From 2b0a1aeed5246fe41e6268c333f1e00b874fab02 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Fri, 4 Dec 2020 16:41:16 +0100 Subject: output: take a wlr_buffer in set_cursor Instead of passing a wlr_texture to the backend, directly pass a wlr_buffer. Use get_cursor_size and get_cursor_formats to create a wlr_buffer that can be used as a cursor. We don't want to pass a wlr_texture because we want to remove as many rendering bits from the backend as possible. --- include/backend/drm/drm.h | 5 +++-- include/backend/drm/renderer.h | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'include/backend/drm') diff --git a/include/backend/drm/drm.h b/include/backend/drm/drm.h index ec19918b..d742fdd1 100644 --- a/include/backend/drm/drm.h +++ b/include/backend/drm/drm.h @@ -34,9 +34,10 @@ struct wlr_drm_plane { struct wlr_drm_format_set formats; - // Only used by cursor + // Only used by cursor plane bool cursor_enabled; - int32_t cursor_hotspot_x, cursor_hotspot_y; + int cursor_width, cursor_height; + int cursor_hotspot_x, cursor_hotspot_y; union wlr_drm_plane_props props; }; diff --git a/include/backend/drm/renderer.h b/include/backend/drm/renderer.h index c4dee425..468dd41e 100644 --- a/include/backend/drm/renderer.h +++ b/include/backend/drm/renderer.h @@ -43,6 +43,9 @@ bool init_drm_renderer(struct wlr_drm_backend *drm, struct wlr_drm_renderer *renderer); void finish_drm_renderer(struct wlr_drm_renderer *renderer); +bool init_drm_surface(struct wlr_drm_surface *surf, + struct wlr_drm_renderer *renderer, uint32_t width, uint32_t height, + const struct wlr_drm_format *drm_format); bool drm_surface_make_current(struct wlr_drm_surface *surf, int *buffer_age); void drm_surface_unset_current(struct wlr_drm_surface *surf); @@ -53,8 +56,12 @@ void drm_fb_destroy(struct wlr_drm_fb *fb); void drm_fb_clear(struct wlr_drm_fb **fb); void drm_fb_move(struct wlr_drm_fb **new, struct wlr_drm_fb **old); +struct wlr_buffer *drm_surface_blit(struct wlr_drm_surface *surf, + struct wlr_buffer *buffer); bool drm_surface_render_black_frame(struct wlr_drm_surface *surf); +struct wlr_drm_format *drm_plane_pick_render_format( + struct wlr_drm_plane *plane, struct wlr_drm_renderer *renderer); bool drm_plane_init_surface(struct wlr_drm_plane *plane, struct wlr_drm_backend *drm, int32_t width, uint32_t height, bool with_modifiers); -- cgit v1.2.3