mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-02 03:45:58 +01:00
Return failure of wlr_renderer_init_wl_display()
This makes it easier for the user of this library to properly handle failure of this function. The signature of wlr_renderer_impl.init_wl_display was also modified to allow for proper error propagation.
This commit is contained in:
parent
34303e1b47
commit
c682d97841
4 changed files with 21 additions and 8 deletions
|
@ -62,7 +62,7 @@ struct wlr_renderer_impl {
|
||||||
struct wlr_texture *(*texture_from_dmabuf)(struct wlr_renderer *renderer,
|
struct wlr_texture *(*texture_from_dmabuf)(struct wlr_renderer *renderer,
|
||||||
struct wlr_dmabuf_attributes *attribs);
|
struct wlr_dmabuf_attributes *attribs);
|
||||||
void (*destroy)(struct wlr_renderer *renderer);
|
void (*destroy)(struct wlr_renderer *renderer);
|
||||||
void (*init_wl_display)(struct wlr_renderer *renderer,
|
bool (*init_wl_display)(struct wlr_renderer *renderer,
|
||||||
struct wl_display *wl_display);
|
struct wl_display *wl_display);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,12 @@ bool wlr_renderer_read_pixels(struct wlr_renderer *r, enum wl_shm_format fmt,
|
||||||
*/
|
*/
|
||||||
bool wlr_renderer_format_supported(struct wlr_renderer *r,
|
bool wlr_renderer_format_supported(struct wlr_renderer *r,
|
||||||
enum wl_shm_format fmt);
|
enum wl_shm_format fmt);
|
||||||
void wlr_renderer_init_wl_display(struct wlr_renderer *r,
|
/**
|
||||||
|
* Creates necessary shm and invokes the initialization of the implementation.
|
||||||
|
*
|
||||||
|
* Returns false on failure.
|
||||||
|
*/
|
||||||
|
bool wlr_renderer_init_wl_display(struct wlr_renderer *r,
|
||||||
struct wl_display *wl_display);
|
struct wl_display *wl_display);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -351,13 +351,15 @@ static struct wlr_texture *gles2_texture_from_dmabuf(
|
||||||
return wlr_gles2_texture_from_dmabuf(renderer->egl, attribs);
|
return wlr_gles2_texture_from_dmabuf(renderer->egl, attribs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gles2_init_wl_display(struct wlr_renderer *wlr_renderer,
|
static bool gles2_init_wl_display(struct wlr_renderer *wlr_renderer,
|
||||||
struct wl_display *wl_display) {
|
struct wl_display *wl_display) {
|
||||||
struct wlr_gles2_renderer *renderer =
|
struct wlr_gles2_renderer *renderer =
|
||||||
gles2_get_renderer(wlr_renderer);
|
gles2_get_renderer(wlr_renderer);
|
||||||
if (!wlr_egl_bind_display(renderer->egl, wl_display)) {
|
if (!wlr_egl_bind_display(renderer->egl, wl_display)) {
|
||||||
wlr_log(WLR_INFO, "failed to bind wl_display to EGL");
|
wlr_log(WLR_INFO, "failed to bind wl_display to EGL");
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wlr_egl *wlr_gles2_renderer_get_egl(struct wlr_renderer *wlr_renderer) {
|
struct wlr_egl *wlr_gles2_renderer_get_egl(struct wlr_renderer *wlr_renderer) {
|
||||||
|
|
|
@ -160,18 +160,18 @@ bool wlr_renderer_format_supported(struct wlr_renderer *r,
|
||||||
return r->impl->format_supported(r, fmt);
|
return r->impl->format_supported(r, fmt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wlr_renderer_init_wl_display(struct wlr_renderer *r,
|
bool wlr_renderer_init_wl_display(struct wlr_renderer *r,
|
||||||
struct wl_display *wl_display) {
|
struct wl_display *wl_display) {
|
||||||
if (wl_display_init_shm(wl_display)) {
|
if (wl_display_init_shm(wl_display)) {
|
||||||
wlr_log(WLR_ERROR, "Failed to initialize shm");
|
wlr_log(WLR_ERROR, "Failed to initialize shm");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t len;
|
size_t len;
|
||||||
const enum wl_shm_format *formats = wlr_renderer_get_formats(r, &len);
|
const enum wl_shm_format *formats = wlr_renderer_get_formats(r, &len);
|
||||||
if (formats == NULL) {
|
if (formats == NULL) {
|
||||||
wlr_log(WLR_ERROR, "Failed to initialize shm: cannot get formats");
|
wlr_log(WLR_ERROR, "Failed to initialize shm: cannot get formats");
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < len; ++i) {
|
for (size_t i = 0; i < len; ++i) {
|
||||||
|
@ -183,14 +183,20 @@ void wlr_renderer_init_wl_display(struct wlr_renderer *r,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r->impl->texture_from_dmabuf) {
|
if (r->impl->texture_from_dmabuf) {
|
||||||
wlr_linux_dmabuf_v1_create(wl_display, r);
|
if (wlr_linux_dmabuf_v1_create(wl_display, r) == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r->impl->init_wl_display) {
|
if (r->impl->init_wl_display) {
|
||||||
r->impl->init_wl_display(r, wl_display);
|
if (!r->impl->init_wl_display(r, wl_display)) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
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) {
|
||||||
|
|
Loading…
Reference in a new issue