Add official fx renderer (#3)

This commit is contained in:
William McKinnon 2022-08-13 02:14:23 -04:00 committed by GitHub
parent 06f19c81a4
commit cf1ed777ae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 497 additions and 33 deletions

View file

@ -9,6 +9,7 @@
#include <wlr/backend/multi.h>
#include <wlr/backend/session.h>
#include <wlr/config.h>
#include <wlr/render/gles2.h>
#include <wlr/render/wlr_renderer.h>
#include <wlr/types/wlr_compositor.h>
#include <wlr/types/wlr_data_control_v1.h>
@ -38,6 +39,7 @@
#include "list.h"
#include "log.h"
#include "sway/config.h"
#include "sway/desktop/fx_renderer.h"
#include "sway/desktop/idle_inhibit_v1.h"
#include "sway/input/input-manager.h"
#include "sway/output.h"
@ -75,29 +77,35 @@ static void handle_drm_lease_request(struct wl_listener *listener, void *data) {
bool server_init(struct sway_server *server) {
sway_log(SWAY_DEBUG, "Initializing Wayland server");
server->renderer = wlr_renderer_autocreate(server->backend);
server->wlr_renderer = wlr_renderer_autocreate(server->backend);
if (!server->wlr_renderer) {
sway_log(SWAY_ERROR, "Failed to create wlr_renderer");
return false;
}
struct wlr_egl *egl = wlr_gles2_renderer_get_egl(server->wlr_renderer);
server->renderer = fx_renderer_create(egl);
if (!server->renderer) {
sway_log(SWAY_ERROR, "Failed to create renderer");
sway_log(SWAY_ERROR, "Failed to create fx_renderer");
return false;
}
wlr_renderer_init_wl_shm(server->renderer, server->wl_display);
wlr_renderer_init_wl_shm(server->wlr_renderer, server->wl_display);
if (wlr_renderer_get_dmabuf_texture_formats(server->renderer) != NULL) {
wlr_drm_create(server->wl_display, server->renderer);
if (wlr_renderer_get_dmabuf_texture_formats(server->wlr_renderer) != NULL) {
wlr_drm_create(server->wl_display, server->wlr_renderer);
server->linux_dmabuf_v1 =
wlr_linux_dmabuf_v1_create(server->wl_display, server->renderer);
wlr_linux_dmabuf_v1_create(server->wl_display, server->wlr_renderer);
}
server->allocator = wlr_allocator_autocreate(server->backend,
server->renderer);
server->wlr_renderer);
if (!server->allocator) {
sway_log(SWAY_ERROR, "Failed to create allocator");
return false;
}
server->compositor = wlr_compositor_create(server->wl_display,
server->renderer);
server->wlr_renderer);
server->compositor_new_surface.notify = handle_compositor_new_surface;
wl_signal_add(&server->compositor->events.new_surface,
&server->compositor_new_surface);