From 10c5199d85f54079a759f5de37574ccf8ae30825 Mon Sep 17 00:00:00 2001 From: Simon Zeni Date: Tue, 20 Apr 2021 14:48:22 -0400 Subject: [PATCH] render/gles2: introduce wlr_gles2_renderer_create_with_drm_fd --- include/wlr/render/gles2.h | 1 + render/gles2/renderer.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/wlr/render/gles2.h b/include/wlr/render/gles2.h index 5a3e9d5c..5bdf6edb 100644 --- a/include/wlr/render/gles2.h +++ b/include/wlr/render/gles2.h @@ -15,6 +15,7 @@ struct wlr_egl; +struct wlr_renderer *wlr_gles2_renderer_create_with_drm_fd(int drm_fd); struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_egl *egl); struct wlr_egl *wlr_gles2_renderer_get_egl(struct wlr_renderer *renderer); diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index 5f1dfa4a..212289e6 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -717,6 +718,32 @@ extern const GLchar tex_fragment_src_rgba[]; extern const GLchar tex_fragment_src_rgbx[]; extern const GLchar tex_fragment_src_external[]; +struct wlr_renderer *wlr_gles2_renderer_create_with_drm_fd(int drm_fd) { + struct gbm_device *gbm_device = gbm_create_device(drm_fd); + if (!gbm_device) { + wlr_log(WLR_ERROR, "Failed to create GBM device"); + return NULL; + } + + struct wlr_egl *egl = wlr_egl_create(EGL_PLATFORM_GBM_KHR, gbm_device); + if (egl == NULL) { + wlr_log(WLR_ERROR, "Could not initialize EGL"); + gbm_device_destroy(gbm_device); + return NULL; + } + + egl->gbm_device = gbm_device; + + struct wlr_renderer *renderer = wlr_gles2_renderer_create(egl); + if (!renderer) { + wlr_log(WLR_ERROR, "Failed to create GLES2 renderer"); + wlr_egl_destroy(egl); + return NULL; + } + + return renderer; +} + struct wlr_renderer *wlr_gles2_renderer_create(struct wlr_egl *egl) { if (!wlr_egl_make_current(egl)) { return NULL;