diff options
-rw-r--r-- | include/sway/server.h | 1 | ||||
-rw-r--r-- | sway/desktop/output.c | 25 | ||||
-rw-r--r-- | sway/server.c | 18 |
3 files changed, 23 insertions, 21 deletions
diff --git a/include/sway/server.h b/include/sway/server.h index 25eb64fe..db81932f 100644 --- a/include/sway/server.h +++ b/include/sway/server.h | |||
@@ -18,7 +18,6 @@ struct sway_server { | |||
18 | const char *socket; | 18 | const char *socket; |
19 | 19 | ||
20 | struct wlr_backend *backend; | 20 | struct wlr_backend *backend; |
21 | struct wlr_renderer *renderer; | ||
22 | 21 | ||
23 | struct wlr_compositor *compositor; | 22 | struct wlr_compositor *compositor; |
24 | struct wlr_data_device_manager *data_device_manager; | 23 | struct wlr_data_device_manager *data_device_manager; |
diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 87eb80fe..f3416c03 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c | |||
@@ -41,6 +41,9 @@ static void rotate_child_position(double *sx, double *sy, double sw, double sh, | |||
41 | static void render_surface(struct wlr_surface *surface, | 41 | static void render_surface(struct wlr_surface *surface, |
42 | struct wlr_output *wlr_output, struct timespec *when, | 42 | struct wlr_output *wlr_output, struct timespec *when, |
43 | double lx, double ly, float rotation) { | 43 | double lx, double ly, float rotation) { |
44 | struct wlr_renderer *renderer = | ||
45 | wlr_backend_get_renderer(wlr_output->backend); | ||
46 | |||
44 | if (!wlr_surface_has_buffer(surface)) { | 47 | if (!wlr_surface_has_buffer(surface)) { |
45 | return; | 48 | return; |
46 | } | 49 | } |
@@ -65,8 +68,8 @@ static void render_surface(struct wlr_surface *surface, | |||
65 | float matrix[9]; | 68 | float matrix[9]; |
66 | wlr_matrix_project_box(matrix, &render_box, surface->current->transform, | 69 | wlr_matrix_project_box(matrix, &render_box, surface->current->transform, |
67 | 0, wlr_output->transform_matrix); | 70 | 0, wlr_output->transform_matrix); |
68 | wlr_render_texture_with_matrix(server.renderer, surface->texture, | 71 | wlr_render_texture_with_matrix(renderer, surface->texture, matrix, |
69 | matrix, 1.0f); // TODO: configurable alpha | 72 | 1.0f); // TODO: configurable alpha |
70 | 73 | ||
71 | wlr_surface_send_frame_done(surface, when); | 74 | wlr_surface_send_frame_done(surface, when); |
72 | } | 75 | } |
@@ -192,15 +195,14 @@ static void render_layer(struct sway_output *output, | |||
192 | } | 195 | } |
193 | } | 196 | } |
194 | 197 | ||
195 | static void output_frame_notify(struct wl_listener *listener, void *data) { | 198 | static void handle_output_frame(struct wl_listener *listener, void *data) { |
196 | struct sway_output *soutput = wl_container_of(listener, soutput, frame); | 199 | struct sway_output *soutput = wl_container_of(listener, soutput, frame); |
197 | struct wlr_output *wlr_output = data; | 200 | struct wlr_output *wlr_output = data; |
198 | struct sway_server *server = soutput->server; | 201 | struct wlr_renderer *renderer = |
199 | struct wlr_renderer *renderer = wlr_backend_get_renderer(wlr_output->backend); | 202 | wlr_backend_get_renderer(wlr_output->backend); |
200 | 203 | ||
201 | int buffer_age = -1; | 204 | wlr_output_make_current(wlr_output, NULL); |
202 | wlr_output_make_current(wlr_output, &buffer_age); | 205 | wlr_renderer_begin(renderer, wlr_output->width, wlr_output->height); |
203 | wlr_renderer_begin(server->renderer, wlr_output->width, wlr_output->height); | ||
204 | 206 | ||
205 | float clear_color[] = {0.25f, 0.25f, 0.25f, 1.0f}; | 207 | float clear_color[] = {0.25f, 0.25f, 0.25f, 1.0f}; |
206 | wlr_renderer_clear(renderer, clear_color); | 208 | wlr_renderer_clear(renderer, clear_color); |
@@ -218,7 +220,8 @@ static void output_frame_notify(struct wl_listener *listener, void *data) { | |||
218 | &soutput->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]); | 220 | &soutput->layers[ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM]); |
219 | 221 | ||
220 | struct sway_seat *seat = input_manager_current_seat(input_manager); | 222 | struct sway_seat *seat = input_manager_current_seat(input_manager); |
221 | struct sway_container *focus = sway_seat_get_focus_inactive(seat, soutput->swayc); | 223 | struct sway_container *focus = |
224 | sway_seat_get_focus_inactive(seat, soutput->swayc); | ||
222 | struct sway_container *workspace = (focus->type == C_WORKSPACE ? | 225 | struct sway_container *workspace = (focus->type == C_WORKSPACE ? |
223 | focus : | 226 | focus : |
224 | container_parent(focus, C_WORKSPACE)); | 227 | container_parent(focus, C_WORKSPACE)); |
@@ -248,7 +251,7 @@ static void output_frame_notify(struct wl_listener *listener, void *data) { | |||
248 | render_layer(soutput, output_box, &now, | 251 | render_layer(soutput, output_box, &now, |
249 | &soutput->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]); | 252 | &soutput->layers[ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY]); |
250 | 253 | ||
251 | wlr_renderer_end(server->renderer); | 254 | wlr_renderer_end(renderer); |
252 | wlr_output_swap_buffers(wlr_output, &now, NULL); | 255 | wlr_output_swap_buffers(wlr_output, &now, NULL); |
253 | soutput->last_frame = now; | 256 | soutput->last_frame = now; |
254 | } | 257 | } |
@@ -306,7 +309,7 @@ void handle_new_output(struct wl_listener *listener, void *data) { | |||
306 | sway_input_manager_configure_xcursor(input_manager); | 309 | sway_input_manager_configure_xcursor(input_manager); |
307 | 310 | ||
308 | wl_signal_add(&wlr_output->events.frame, &output->frame); | 311 | wl_signal_add(&wlr_output->events.frame, &output->frame); |
309 | output->frame.notify = output_frame_notify; | 312 | output->frame.notify = handle_output_frame; |
310 | wl_signal_add(&wlr_output->events.destroy, &output->destroy); | 313 | wl_signal_add(&wlr_output->events.destroy, &output->destroy); |
311 | output->destroy.notify = handle_output_destroy; | 314 | output->destroy.notify = handle_output_destroy; |
312 | wl_signal_add(&wlr_output->events.mode, &output->mode); | 315 | wl_signal_add(&wlr_output->events.mode, &output->mode); |
diff --git a/sway/server.c b/sway/server.c index 3fba019d..728e624e 100644 --- a/sway/server.c +++ b/sway/server.c | |||
@@ -1,19 +1,19 @@ | |||
1 | #define _POSIX_C_SOURCE 200112L | 1 | #define _POSIX_C_SOURCE 200112L |
2 | #include <stdlib.h> | 2 | #include <assert.h> |
3 | #include <stdbool.h> | 3 | #include <stdbool.h> |
4 | #include <stdlib.h> | ||
4 | #include <wayland-server.h> | 5 | #include <wayland-server.h> |
5 | #include <wlr/backend.h> | 6 | #include <wlr/backend.h> |
6 | #include <wlr/backend/session.h> | 7 | #include <wlr/backend/session.h> |
7 | #include <wlr/render/wlr_renderer.h> | 8 | #include <wlr/render/wlr_renderer.h> |
8 | #include <wlr/render/gles2.h> | ||
9 | #include <wlr/types/wlr_compositor.h> | 9 | #include <wlr/types/wlr_compositor.h> |
10 | #include <wlr/types/wlr_gamma_control.h> | ||
10 | #include <wlr/types/wlr_layer_shell.h> | 11 | #include <wlr/types/wlr_layer_shell.h> |
11 | #include <wlr/types/wlr_screenshooter.h> | 12 | #include <wlr/types/wlr_screenshooter.h> |
12 | #include <wlr/types/wlr_gamma_control.h> | ||
13 | #include <wlr/types/wlr_wl_shell.h> | 13 | #include <wlr/types/wlr_wl_shell.h> |
14 | #include <wlr/util/log.h> | ||
14 | // TODO WLR: make Xwayland optional | 15 | // TODO WLR: make Xwayland optional |
15 | #include <wlr/xwayland.h> | 16 | #include <wlr/xwayland.h> |
16 | #include <wlr/util/log.h> | ||
17 | #include "sway/commands.h" | 17 | #include "sway/commands.h" |
18 | #include "sway/config.h" | 18 | #include "sway/config.h" |
19 | #include "sway/server.h" | 19 | #include "sway/server.h" |
@@ -42,11 +42,12 @@ bool server_init(struct sway_server *server) { | |||
42 | server->wl_event_loop = wl_display_get_event_loop(server->wl_display); | 42 | server->wl_event_loop = wl_display_get_event_loop(server->wl_display); |
43 | server->backend = wlr_backend_autocreate(server->wl_display); | 43 | server->backend = wlr_backend_autocreate(server->wl_display); |
44 | 44 | ||
45 | server->renderer = wlr_gles2_renderer_create(server->backend); | 45 | struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend); |
46 | assert(renderer); | ||
47 | |||
46 | wl_display_init_shm(server->wl_display); | 48 | wl_display_init_shm(server->wl_display); |
47 | 49 | ||
48 | server->compositor = wlr_compositor_create( | 50 | server->compositor = wlr_compositor_create(server->wl_display, renderer); |
49 | server->wl_display, server->renderer); | ||
50 | server->data_device_manager = | 51 | server->data_device_manager = |
51 | wlr_data_device_manager_create(server->wl_display); | 52 | wlr_data_device_manager_create(server->wl_display); |
52 | 53 | ||
@@ -95,8 +96,7 @@ bool server_init(struct sway_server *server) { | |||
95 | } | 96 | } |
96 | 97 | ||
97 | void server_fini(struct sway_server *server) { | 98 | void server_fini(struct sway_server *server) { |
98 | // TODO WLR: tear down more stuff | 99 | // TODO |
99 | wlr_backend_destroy(server->backend); | ||
100 | } | 100 | } |
101 | 101 | ||
102 | void server_run(struct sway_server *server) { | 102 | void server_run(struct sway_server *server) { |