aboutsummaryrefslogtreecommitdiffstats
path: root/sway/desktop/output.c
diff options
context:
space:
mode:
authorLibravatar Alexander Orzechowski <alex@ozal.ski>2023-05-02 11:43:44 -0400
committerLibravatar Simon Ser <contact@emersion.fr>2023-05-02 18:31:55 +0200
commit029b99b4829148ef3e899f21bba4fe2a1d4d0db9 (patch)
treec1211ce46f432ebe3fe84e95608d62a35e51dcbc /sway/desktop/output.c
parentrender: Don't pass matrix into render_texture (diff)
downloadsway-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.c26
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 }