diff options
author | Simon Ser <contact@emersion.fr> | 2020-03-10 17:07:49 +0100 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2020-04-22 22:40:54 +0200 |
commit | 40513f1a0ec3cb2b2fdc4b0dbd4765d152ef76ce (patch) | |
tree | ee27e078cda6e8a3ec53d317d4d1ddc715ebfcdf /backend/headless/backend.c | |
parent | 5dc3a9c7544e0436494bcc316cfaf4ca93094c6d (diff) |
backend/headless: use FBOs instead of pbuffers
Diffstat (limited to 'backend/headless/backend.c')
-rw-r--r-- | backend/headless/backend.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/backend/headless/backend.c b/backend/headless/backend.c index 19c62078..73ec9ebd 100644 --- a/backend/headless/backend.c +++ b/backend/headless/backend.c @@ -1,9 +1,10 @@ #include <assert.h> +#include <GLES2/gl2.h> +#include <GLES2/gl2ext.h> #include <stdlib.h> #include <wlr/interfaces/wlr_input_device.h> #include <wlr/interfaces/wlr_output.h> #include <wlr/render/egl.h> -#include <wlr/render/gles2.h> #include <wlr/util/log.h> #include "backend/headless.h" #include "util/signal.h" @@ -100,9 +101,8 @@ struct wlr_backend *wlr_headless_backend_create(struct wl_display *display, wl_list_init(&backend->input_devices); static const EGLint config_attribs[] = { - EGL_SURFACE_TYPE, EGL_PBUFFER_BIT, + EGL_SURFACE_TYPE, 0, EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL_ALPHA_SIZE, 0, EGL_BLUE_SIZE, 1, EGL_GREEN_SIZE, 1, EGL_RED_SIZE, 1, @@ -118,14 +118,31 @@ struct wlr_backend *wlr_headless_backend_create(struct wl_display *display, (EGLint*)config_attribs, 0); if (!backend->renderer) { wlr_log(WLR_ERROR, "Failed to create renderer"); - free(backend); - return NULL; + goto error_backend; + } + + if (wlr_gles2_renderer_check_ext(backend->renderer, "GL_OES_rgb8_rgba8") || + wlr_gles2_renderer_check_ext(backend->renderer, + "GL_OES_required_internalformat") || + wlr_gles2_renderer_check_ext(backend->renderer, "GL_ARM_rgba8")) { + backend->internal_format = GL_RGBA8_OES; + } else { + wlr_log(WLR_INFO, "GL_RGBA8_OES not supported, " + "falling back to GL_RGBA4 internal format " + "(performance may be affected)"); + backend->internal_format = GL_RGBA4; } backend->display_destroy.notify = handle_display_destroy; wl_display_add_destroy_listener(display, &backend->display_destroy); return &backend->backend; + +error_renderer: + wlr_renderer_destroy(backend->renderer); +error_backend: + free(backend); + return NULL; } bool wlr_backend_is_headless(struct wlr_backend *backend) { |