diff options
author | Alexander Orzechowski <alex@ozal.ski> | 2023-05-02 11:43:44 -0400 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2023-05-02 18:31:55 +0200 |
commit | 029b99b4829148ef3e899f21bba4fe2a1d4d0db9 (patch) | |
tree | c1211ce46f432ebe3fe84e95608d62a35e51dcbc /sway/desktop/output.c | |
parent | render: Don't pass matrix into render_texture (diff) | |
download | sway-029b99b4829148ef3e899f21bba4fe2a1d4d0db9.tar.gz sway-029b99b4829148ef3e899f21bba4fe2a1d4d0db9.tar.zst sway-029b99b4829148ef3e899f21bba4fe2a1d4d0db9.zip |
render: Use wlr_render_pass
Diffstat (limited to 'sway/desktop/output.c')
-rw-r--r-- | sway/desktop/output.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c index 02e08bd2..01bc87bb 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c | |||
@@ -6,6 +6,7 @@ | |||
6 | #include <wayland-server-core.h> | 6 | #include <wayland-server-core.h> |
7 | #include <wlr/config.h> | 7 | #include <wlr/config.h> |
8 | #include <wlr/backend/headless.h> | 8 | #include <wlr/backend/headless.h> |
9 | #include <wlr/render/swapchain.h> | ||
9 | #include <wlr/render/wlr_renderer.h> | 10 | #include <wlr/render/wlr_renderer.h> |
10 | #include <wlr/types/wlr_buffer.h> | 11 | #include <wlr/types/wlr_buffer.h> |
11 | #include <wlr/types/wlr_matrix.h> | 12 | #include <wlr/types/wlr_matrix.h> |
@@ -604,9 +605,21 @@ static int output_repaint_timer_handler(void *data) { | |||
604 | } | 605 | } |
605 | } | 606 | } |
606 | 607 | ||
608 | if (!wlr_output_configure_primary_swapchain(wlr_output, NULL, &wlr_output->swapchain)) { | ||
609 | return false; | ||
610 | } | ||
611 | |||
607 | int buffer_age; | 612 | int buffer_age; |
608 | if (!wlr_output_attach_render(output->wlr_output, &buffer_age)) { | 613 | struct wlr_buffer *buffer = wlr_swapchain_acquire(wlr_output->swapchain, &buffer_age); |
609 | return 0; | 614 | if (buffer == NULL) { |
615 | return false; | ||
616 | } | ||
617 | |||
618 | struct wlr_render_pass *render_pass = wlr_renderer_begin_buffer_pass( | ||
619 | wlr_output->renderer, buffer); | ||
620 | if (render_pass == NULL) { | ||
621 | wlr_buffer_unlock(buffer); | ||
622 | return false; | ||
610 | } | 623 | } |
611 | 624 | ||
612 | pixman_region32_t damage; | 625 | pixman_region32_t damage; |
@@ -623,6 +636,7 @@ static int output_repaint_timer_handler(void *data) { | |||
623 | .output_damage = &damage, | 636 | .output_damage = &damage, |
624 | .renderer = wlr_output->renderer, | 637 | .renderer = wlr_output->renderer, |
625 | .output = output, | 638 | .output = output, |
639 | .pass = render_pass, | ||
626 | }; | 640 | }; |
627 | 641 | ||
628 | struct timespec now; | 642 | struct timespec now; |
@@ -632,6 +646,14 @@ static int output_repaint_timer_handler(void *data) { | |||
632 | 646 | ||
633 | pixman_region32_fini(&damage); | 647 | pixman_region32_fini(&damage); |
634 | 648 | ||
649 | if (!wlr_render_pass_submit(render_pass)) { | ||
650 | wlr_buffer_unlock(buffer); | ||
651 | return false; | ||
652 | } | ||
653 | |||
654 | wlr_output_attach_buffer(wlr_output, buffer); | ||
655 | wlr_buffer_unlock(buffer); | ||
656 | |||
635 | if (!wlr_output_commit(wlr_output)) { | 657 | if (!wlr_output_commit(wlr_output)) { |
636 | return 0; | 658 | return 0; |
637 | } | 659 | } |