mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-02 03:45:58 +01:00
render: correctly set EGL_RENDERABLE_TYPE
This should be set to EGL_OPENGL_ES2_BIT. Also fixes EGL config attributes in the headless and X11 backends.
This commit is contained in:
parent
ca570fa63c
commit
09550032b7
3 changed files with 37 additions and 6 deletions
|
@ -103,10 +103,9 @@ struct wlr_backend *wlr_headless_backend_create(struct wl_display *display,
|
||||||
static const EGLint config_attribs[] = {
|
static const EGLint config_attribs[] = {
|
||||||
EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
|
EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
|
||||||
EGL_ALPHA_SIZE, 0,
|
EGL_ALPHA_SIZE, 0,
|
||||||
EGL_BLUE_SIZE, 8,
|
EGL_BLUE_SIZE, 1,
|
||||||
EGL_GREEN_SIZE, 8,
|
EGL_GREEN_SIZE, 1,
|
||||||
EGL_RED_SIZE, 8,
|
EGL_RED_SIZE, 1,
|
||||||
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
|
|
||||||
EGL_NONE,
|
EGL_NONE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -282,8 +282,17 @@ struct wlr_backend *wlr_x11_backend_create(struct wl_display *display,
|
||||||
create_renderer_func = wlr_renderer_autocreate;
|
create_renderer_func = wlr_renderer_autocreate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static EGLint config_attribs[] = {
|
||||||
|
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
|
||||||
|
EGL_RED_SIZE, 1,
|
||||||
|
EGL_GREEN_SIZE, 1,
|
||||||
|
EGL_BLUE_SIZE, 1,
|
||||||
|
EGL_ALPHA_SIZE, 0,
|
||||||
|
EGL_NONE,
|
||||||
|
};
|
||||||
|
|
||||||
x11->renderer = create_renderer_func(&x11->egl, EGL_PLATFORM_X11_KHR,
|
x11->renderer = create_renderer_func(&x11->egl, EGL_PLATFORM_X11_KHR,
|
||||||
x11->xlib_conn, NULL, x11->screen->root_visual);
|
x11->xlib_conn, config_attribs, x11->screen->root_visual);
|
||||||
|
|
||||||
if (x11->renderer == NULL) {
|
if (x11->renderer == NULL) {
|
||||||
wlr_log(WLR_ERROR, "Failed to create renderer");
|
wlr_log(WLR_ERROR, "Failed to create renderer");
|
||||||
|
|
|
@ -198,7 +198,30 @@ void wlr_renderer_init_wl_display(struct wlr_renderer *r,
|
||||||
struct wlr_renderer *wlr_renderer_autocreate(struct wlr_egl *egl,
|
struct wlr_renderer *wlr_renderer_autocreate(struct wlr_egl *egl,
|
||||||
EGLenum platform, void *remote_display, EGLint *config_attribs,
|
EGLenum platform, void *remote_display, EGLint *config_attribs,
|
||||||
EGLint visual_id) {
|
EGLint visual_id) {
|
||||||
if (!wlr_egl_init(egl, platform, remote_display, config_attribs, visual_id)) {
|
// Append GLES2-specific bits to the provided EGL config attributes
|
||||||
|
EGLint gles2_config_attribs[] = {
|
||||||
|
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
|
||||||
|
EGL_NONE,
|
||||||
|
};
|
||||||
|
|
||||||
|
size_t config_attribs_len = 0; // not including terminating EGL_NONE
|
||||||
|
while (config_attribs != NULL &&
|
||||||
|
config_attribs[config_attribs_len] != EGL_NONE) {
|
||||||
|
++config_attribs_len;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t all_config_attribs_len = config_attribs_len +
|
||||||
|
sizeof(gles2_config_attribs) / sizeof(gles2_config_attribs[0]);
|
||||||
|
EGLint all_config_attribs[all_config_attribs_len];
|
||||||
|
if (config_attribs_len > 0) {
|
||||||
|
memcpy(all_config_attribs, config_attribs,
|
||||||
|
config_attribs_len * sizeof(EGLint));
|
||||||
|
}
|
||||||
|
memcpy(&all_config_attribs[config_attribs_len], gles2_config_attribs,
|
||||||
|
sizeof(gles2_config_attribs));
|
||||||
|
|
||||||
|
if (!wlr_egl_init(egl, platform, remote_display, all_config_attribs,
|
||||||
|
visual_id)) {
|
||||||
wlr_log(WLR_ERROR, "Could not initialize EGL");
|
wlr_log(WLR_ERROR, "Could not initialize EGL");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue