render/gles2: remove assumptions about supported formats

We were assuming GL_BGRA_EXT was always supported.

We now check that it's supported for rendering. We fail if it isn't because
this format is specified as "always supported" by the Wayland protocol.

We also check if it's supported for reading pixels. A new preferred_read_format
function returns the preferred format that can be used to read pixels. This is
used by the screencopy protocol.
This commit is contained in:
emersion 2018-10-31 17:20:27 +01:00
parent 675cf8457e
commit 62d646f2b8
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
7 changed files with 139 additions and 23 deletions

View file

@ -139,6 +139,15 @@ int wlr_renderer_get_dmabuf_modifiers(struct wlr_renderer *r, int format,
return r->impl->get_dmabuf_modifiers(r, format, modifiers);
}
bool wlr_renderer_preferred_read_format(struct wlr_renderer *r,
enum wl_shm_format *fmt) {
if (!r->impl->preferred_read_format || !r->impl->read_pixels) {
return false;
}
*fmt = r->impl->preferred_read_format(r);
return true;
}
bool wlr_renderer_read_pixels(struct wlr_renderer *r, enum wl_shm_format fmt,
uint32_t *flags, 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,