mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-25 22:25:58 +01:00
render: add wlr_renderer_init_wl_shm
This allows compositors to initialize wl_shm without initializing other globals like linux-dmabuf.
This commit is contained in:
parent
c9f3c2b4f7
commit
77d811a21b
2 changed files with 26 additions and 6 deletions
|
@ -99,13 +99,19 @@ bool wlr_renderer_read_pixels(struct wlr_renderer *r, uint32_t fmt,
|
||||||
uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, void *data);
|
uint32_t src_x, uint32_t src_y, uint32_t dst_x, uint32_t dst_y, void *data);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates necessary shm and invokes the initialization of the implementation.
|
* Initializes wl_shm, linux-dmabuf and other buffer factory protocols.
|
||||||
*
|
*
|
||||||
* Returns false on failure.
|
* Returns false on failure.
|
||||||
*/
|
*/
|
||||||
bool 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);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes wl_shm on the provided wl_display.
|
||||||
|
*/
|
||||||
|
bool wlr_renderer_init_wl_shm(struct wlr_renderer *r,
|
||||||
|
struct wl_display *wl_display);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtains the FD of the DRM device used for rendering, or -1 if unavailable.
|
* Obtains the FD of the DRM device used for rendering, or -1 if unavailable.
|
||||||
*
|
*
|
||||||
|
|
|
@ -202,17 +202,18 @@ bool wlr_renderer_read_pixels(struct wlr_renderer *r, uint32_t fmt,
|
||||||
src_x, src_y, dst_x, dst_y, data);
|
src_x, src_y, dst_x, dst_y, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wlr_renderer_init_wl_display(struct wlr_renderer *r,
|
bool wlr_renderer_init_wl_shm(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) != 0) {
|
||||||
wlr_log(WLR_ERROR, "Failed to initialize shm");
|
wlr_log(WLR_ERROR, "Failed to initialize wl_shm");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t len;
|
size_t len;
|
||||||
const uint32_t *formats = wlr_renderer_get_shm_texture_formats(r, &len);
|
const uint32_t *formats = wlr_renderer_get_shm_texture_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 wl_shm: "
|
||||||
|
"cannot get renderer formats");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,11 +230,24 @@ bool wlr_renderer_init_wl_display(struct wlr_renderer *r,
|
||||||
xrgb8888 = true;
|
xrgb8888 = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
wl_display_add_shm_format(wl_display, fmt);
|
if (wl_display_add_shm_format(wl_display, fmt) == NULL) {
|
||||||
|
wlr_log(WLR_ERROR, "Failed to initialize wl_shm: "
|
||||||
|
"failed to add format");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(argb8888 && xrgb8888);
|
assert(argb8888 && xrgb8888);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wlr_renderer_init_wl_display(struct wlr_renderer *r,
|
||||||
|
struct wl_display *wl_display) {
|
||||||
|
if (!wlr_renderer_init_wl_shm(r, wl_display)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (wlr_renderer_get_dmabuf_texture_formats(r) != NULL) {
|
if (wlr_renderer_get_dmabuf_texture_formats(r) != NULL) {
|
||||||
if (wlr_renderer_get_drm_fd(r) >= 0) {
|
if (wlr_renderer_get_drm_fd(r) >= 0) {
|
||||||
if (wlr_drm_create(wl_display, r) == NULL) {
|
if (wlr_drm_create(wl_display, r) == NULL) {
|
||||||
|
|
Loading…
Reference in a new issue