1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 05:57:44 +00:00

WindowServer: Coordinate double-buffering with the BochsVGA card.

Use the BochsVGA card's virtual-height + virtual-y features to implement
a "hardware double buffering" type scheme.

This is a performance degradation since we now draw a bunch more than before.
But there's also no tearing or cursor flickering. I'm gonna commit this and
try to improve upon it. :^)
This commit is contained in:
Andreas Kling 2019-02-07 08:53:57 +01:00
parent 1f159eaab0
commit 443d1c2237
6 changed files with 52 additions and 15 deletions

View file

@ -7,6 +7,7 @@
#include <AK/InlineLinkedList.h>
#include <AK/WeakPtr.h>
#include <AK/Lock.h>
#include <AK/CircularQueue.h>
#include "WSMessageReceiver.h"
class WSScreen;
@ -29,6 +30,7 @@ public:
void move_to_front(WSWindow&);
void invalidate_cursor();
void draw_cursor();
void invalidate(const WSWindow&);
@ -54,6 +56,7 @@ private:
void compose();
void paint_window_frame(WSWindow&);
void flip_buffers();
WSScreen& m_screen;
Rect m_screen_rect;
@ -105,4 +108,5 @@ private:
mutable Lock m_lock;
bool m_flash_flush { false };
bool m_buffers_are_flipped { false };
};