|
@@ -120,14 +120,16 @@ static void InitPalette()
|
|
|
_local_palette = _cur_palette;
|
|
|
_local_palette.first_dirty = 0;
|
|
|
_local_palette.count_dirty = 256;
|
|
|
UpdatePalette(true);
|
|
|
}
|
|
|
|
|
|
static void CheckPaletteAnim()
|
|
|
void VideoDriver_SDL::CheckPaletteAnim()
|
|
|
{
|
|
|
_local_palette = _cur_palette;
|
|
|
|
|
|
if (_cur_palette.count_dirty != 0) {
|
|
|
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
|
|
|
|
|
switch (blitter->UsePaletteAnimation()) {
|
|
|
case Blitter::PALETTE_ANIMATION_VIDEO_BACKEND:
|
|
|
UpdatePalette();
|
|
@@ -180,13 +182,12 @@ void VideoDriver_SDL::PaintThread()
|
|
|
_draw_signal->notify_one();
|
|
|
|
|
|
/* Now wait for the first thing to draw! */
|
|
|
_draw_signal->wait(*_draw_mutex);
|
|
|
|
|
|
while (_draw_continue) {
|
|
|
CheckPaletteAnim();
|
|
|
/* Then just draw and wait till we stop */
|
|
|
this->Paint();
|
|
|
_draw_signal->wait(lock);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -705,14 +706,12 @@ void VideoDriver_SDL::MainLoop()
|
|
|
{
|
|
|
auto cur_ticks = std::chrono::steady_clock::now();
|
|
|
auto last_realtime_tick = cur_ticks;
|
|
|
auto next_game_tick = cur_ticks;
|
|
|
auto next_draw_tick = cur_ticks;
|
|
|
|
|
|
CheckPaletteAnim();
|
|
|
|
|
|
std::thread draw_thread;
|
|
|
if (_draw_threaded) {
|
|
|
/* Initialise the mutex first, because that's the thing we *need*
|
|
|
* directly in the newly created thread. */
|
|
|
_draw_mutex = new std::recursive_mutex();
|
|
|
if (_draw_mutex == nullptr) {
|
|
@@ -778,18 +777,17 @@ void VideoDriver_SDL::MainLoop()
|
|
|
/* Avoid next_draw_tick getting behind more and more if it cannot keep up. */
|
|
|
if (next_draw_tick < cur_ticks - ALLOWED_DRIFT * this->GetDrawInterval()) next_draw_tick = cur_ticks;
|
|
|
|
|
|
this->InputLoop();
|
|
|
::InputLoop();
|
|
|
UpdateWindows();
|
|
|
_local_palette = _cur_palette;
|
|
|
this->CheckPaletteAnim();
|
|
|
|
|
|
if (_draw_mutex != nullptr && !HasModalProgress()) {
|
|
|
_draw_signal->notify_one();
|
|
|
} else {
|
|
|
CheckPaletteAnim();
|
|
|
this->Paint();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* If we are not in fast-forward, create some time between calls to ease up CPU usage. */
|
|
|
if (!_fast_forward || _pause_mode) {
|