renderer/gles2: Bail rendering to external buffers when binding them

We can't do it while we're creating them because we'll want to use
gles2 buffers for textures soon.
master
Alexander Orzechowski 1 year ago
parent 0d9cd6932a
commit 484e248446

@ -103,6 +103,7 @@ struct wlr_gles2_buffer {
struct wlr_buffer *buffer; struct wlr_buffer *buffer;
struct wlr_gles2_renderer *renderer; struct wlr_gles2_renderer *renderer;
struct wl_list link; // wlr_gles2_renderer.buffers struct wl_list link; // wlr_gles2_renderer.buffers
bool external_only;
EGLImageKHR image; EGLImageKHR image;
GLuint rbo; GLuint rbo;

@ -94,6 +94,11 @@ static const struct wlr_addon_interface buffer_addon_impl = {
}; };
GLuint gles2_buffer_get_fbo(struct wlr_gles2_buffer *buffer) { GLuint gles2_buffer_get_fbo(struct wlr_gles2_buffer *buffer) {
if (buffer->external_only) {
wlr_log(WLR_ERROR, "DMA-BUF format is external-only");
return 0;
}
if (buffer->fbo) { if (buffer->fbo) {
return buffer->fbo; return buffer->fbo;
} }
@ -148,18 +153,12 @@ static struct wlr_gles2_buffer *get_or_create_buffer(struct wlr_gles2_renderer *
goto error_buffer; goto error_buffer;
} }
bool external_only;
buffer->image = wlr_egl_create_image_from_dmabuf(renderer->egl, buffer->image = wlr_egl_create_image_from_dmabuf(renderer->egl,
&dmabuf, &external_only); &dmabuf, &buffer->external_only);
if (buffer->image == EGL_NO_IMAGE_KHR) { if (buffer->image == EGL_NO_IMAGE_KHR) {
goto error_buffer; goto error_buffer;
} }
if (external_only) {
wlr_log(WLR_ERROR, "DMA-BUF format is external-only");
goto error_image;
}
wlr_addon_init(&buffer->addon, &wlr_buffer->addons, renderer, wlr_addon_init(&buffer->addon, &wlr_buffer->addons, renderer,
&buffer_addon_impl); &buffer_addon_impl);

Loading…
Cancel
Save