patch 8.0.1449: slow redrawing with DirectX
Problem: Slow redrawing with DirectX.
Solution: Avoid calling gui_mch_flush() unnecessarily, especially when
updating the cursor. (Ken Takata, closes #2560)
diff --git a/src/screen.c b/src/screen.c
index 6b69d13..9256fbd 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -468,16 +468,14 @@
setcursor();
}
cursor_on();
- out_flush();
#ifdef FEAT_GUI
- if (gui.in_use)
- {
+ if (gui.in_use && !gui_mch_is_blink_off())
/* Don't update the cursor when it is blinking and off to avoid
* flicker. */
- if (!gui_mch_is_blink_off())
- gui_update_cursor(FALSE, FALSE);
- gui_mch_flush();
- }
+ out_flush_cursor(FALSE, FALSE);
+ else
+#else
+ out_flush();
#endif
--redrawing_for_callback;
@@ -800,9 +798,12 @@
* done. */
if (gui.in_use)
{
- out_flush(); /* required before updating the cursor */
if (did_undraw && !gui_mch_is_blink_off())
{
+ mch_disable_flush();
+ out_flush(); /* required before updating the cursor */
+ mch_enable_flush();
+
/* Put the GUI position where the cursor was, gui_update_cursor()
* uses that. */
gui.col = gui_cursor_col;
@@ -811,9 +812,12 @@
gui.col = mb_fix_col(gui.col, gui.row);
# endif
gui_update_cursor(FALSE, FALSE);
+ gui_may_flush();
screen_cur_col = gui.col;
screen_cur_row = gui.row;
}
+ else
+ out_flush();
gui_update_scrollbars(FALSE);
}
#endif
@@ -863,8 +867,7 @@
* done. */
if (gui.in_use)
{
- out_flush(); /* required before updating the cursor */
- gui_update_cursor(FALSE, FALSE);
+ out_flush_cursor(FALSE, FALSE);
gui_update_scrollbars(FALSE);
}
# endif