diff options
Diffstat (limited to 'types/buffer/buffer.c')
-rw-r--r-- | types/buffer/buffer.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/types/buffer/buffer.c b/types/buffer/buffer.c new file mode 100644 index 0000000..d4c47bc --- /dev/null +++ b/types/buffer/buffer.c @@ -0,0 +1,29 @@ +#include "render/pixel_format.h" +#include "types/wlr_buffer.h" + +bool buffer_is_opaque(struct wlr_buffer *buffer) { + void *data; + uint32_t format; + size_t stride; + struct wlr_dmabuf_attributes dmabuf; + struct wlr_shm_attributes shm; + if (wlr_buffer_get_dmabuf(buffer, &dmabuf)) { + format = dmabuf.format; + } else if (wlr_buffer_get_shm(buffer, &shm)) { + format = shm.format; + } else if (wlr_buffer_begin_data_ptr_access(buffer, + WLR_BUFFER_DATA_PTR_ACCESS_READ, + &data, &format, &stride)) { + wlr_buffer_end_data_ptr_access(buffer); + } else { + return false; + } + + const struct wlr_pixel_format_info *format_info = + drm_get_pixel_format_info(format); + if (format_info == NULL) { + return false; + } + + return !format_info->has_alpha; +} |