From 29291cb47cdaa72d1142a008fef3301dcb86dfac Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 16 Jun 2022 14:43:24 +0200 Subject: render/texture: drop wlr_texture_is_opaque Whether a texture is opaque or not doesn't depend on the renderer at all, it just depends on the source buffer. Instead of forcing all renderers to implement wlr_texture_impl.is_opaque, let's move this in common code and use the wlr_buffer format to know whether a texture will be opaque. --- include/types/wlr_buffer.h | 9 +++++++++ include/wlr/render/interface.h | 1 - include/wlr/render/wlr_texture.h | 5 ----- include/wlr/types/wlr_compositor.h | 2 ++ 4 files changed, 11 insertions(+), 6 deletions(-) (limited to 'include') diff --git a/include/types/wlr_buffer.h b/include/types/wlr_buffer.h index bdb6e5b7..e7097ae2 100644 --- a/include/types/wlr_buffer.h +++ b/include/types/wlr_buffer.h @@ -69,4 +69,13 @@ struct wlr_dmabuf_buffer *dmabuf_buffer_create( */ bool dmabuf_buffer_drop(struct wlr_dmabuf_buffer *buffer); +/** + * Check whether a buffer is fully opaque. + * + * When true is returned, the buffer is guaranteed to be fully opaque, but the + * reverse is not true: false may be returned in cases where the buffer is fully + * opaque. + */ +bool buffer_is_opaque(struct wlr_buffer *buffer); + #endif diff --git a/include/wlr/render/interface.h b/include/wlr/render/interface.h index 4207bd30..7e923353 100644 --- a/include/wlr/render/interface.h +++ b/include/wlr/render/interface.h @@ -54,7 +54,6 @@ void wlr_renderer_init(struct wlr_renderer *renderer, const struct wlr_renderer_impl *impl); struct wlr_texture_impl { - bool (*is_opaque)(struct wlr_texture *texture); bool (*write_pixels)(struct wlr_texture *texture, uint32_t stride, uint32_t width, uint32_t height, uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, diff --git a/include/wlr/render/wlr_texture.h b/include/wlr/render/wlr_texture.h index 93fc221c..0f39b8a8 100644 --- a/include/wlr/render/wlr_texture.h +++ b/include/wlr/render/wlr_texture.h @@ -36,11 +36,6 @@ struct wlr_texture *wlr_texture_from_pixels(struct wlr_renderer *renderer, struct wlr_texture *wlr_texture_from_dmabuf(struct wlr_renderer *renderer, struct wlr_dmabuf_attributes *attribs); -/** - * Returns true if this texture is using a fully opaque format. - */ -bool wlr_texture_is_opaque(struct wlr_texture *texture); - /** * Update a texture with raw pixels. The texture must be mutable, and the input * data must have the same pixel format that the texture was created with. diff --git a/include/wlr/types/wlr_compositor.h b/include/wlr/types/wlr_compositor.h index bff6bc83..034b075b 100644 --- a/include/wlr/types/wlr_compositor.h +++ b/include/wlr/types/wlr_compositor.h @@ -162,6 +162,8 @@ struct wlr_surface { int width, height; int buffer_width, buffer_height; } previous; + + bool opaque; }; struct wlr_renderer; -- cgit v1.2.3