Skip to content

Commit b01ef30

Browse files
soreauammen99
authored andcommitted
render-manager: Render software cursors last (#1221)
This is most consistent with hardware cursor plane behavior. Without this, there are bugs such as #1218.
1 parent 8b676e3 commit b01ef30

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

src/output/render-manager.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,23 +1011,15 @@ class wf::render_manager::impl
10111011
* draws the scenegraph */
10121012
render_output();
10131013

1014-
/* Part 3: finalize the scene: overlay effects and sw cursors */
1014+
/* Part 3: overlay effects */
10151015
effects->run_effects(OUTPUT_EFFECT_OVERLAY);
10161016

10171017
if (postprocessing->post_effects.size())
10181018
{
10191019
swap_damage |= output_damage->get_wlr_damage_box();
10201020
}
10211021

1022-
OpenGL::render_begin();
1023-
wlr_renderer_begin(wf::get_core().renderer,
1024-
output->handle->width, output->handle->height);
1025-
wlr_output_render_software_cursors(output->handle,
1026-
swap_damage.to_pixman());
1027-
wlr_renderer_end(wf::get_core().renderer);
1028-
OpenGL::render_end();
1029-
1030-
/* Part 4: postprocessing effects */
1022+
/* Part 4: finalize the scene: postprocessing effects */
10311023
postprocessing->run_post_effects();
10321024
if (output_inhibit_counter)
10331025
{
@@ -1037,7 +1029,18 @@ class wf::render_manager::impl
10371029
OpenGL::render_end();
10381030
}
10391031

1040-
/* Part 5: finalize frame: swap buffers, send frame_done, etc */
1032+
/* Part 5: render sw cursors
1033+
* We render software cursors after everything else
1034+
* for consistency with hardware cursor planes */
1035+
OpenGL::render_begin();
1036+
wlr_renderer_begin(wf::get_core().renderer,
1037+
output->handle->width, output->handle->height);
1038+
wlr_output_render_software_cursors(output->handle,
1039+
swap_damage.to_pixman());
1040+
wlr_renderer_end(wf::get_core().renderer);
1041+
OpenGL::render_end();
1042+
1043+
/* Part 6: finalize frame: swap buffers, send frame_done, etc */
10411044
OpenGL::unbind_output(output);
10421045
output_damage->swap_buffers(swap_damage);
10431046
swap_damage.clear();

0 commit comments

Comments
 (0)