# HG changeset patch # User Patric Stout # Date 2021-02-20 10:15:15 # Node ID 00c1bd78d03335493cf905ae33c70afa1ee3653d # Parent a41e925d9dc7ac2ccf8d68b40baed242050b27e9 Codechange: be consistent in what CheckPaletteAnim() does and when it is called Additionally, make sure this is a class method. Later commits will make use of this. diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -95,7 +95,7 @@ static void InitPalette() UpdatePalette(0, 256); } -static void CheckPaletteAnim() +void VideoDriver_Allegro::CheckPaletteAnim() { if (_cur_palette.count_dirty != 0) { Blitter *blitter = BlitterFactory::GetCurrentBlitter(); @@ -484,8 +484,6 @@ void VideoDriver_Allegro::MainLoop() auto next_game_tick = cur_ticks; auto next_draw_tick = cur_ticks; - CheckPaletteAnim(); - for (;;) { InteractiveRandom(); // randomness @@ -522,7 +520,7 @@ void VideoDriver_Allegro::MainLoop() this->InputLoop(); ::InputLoop(); UpdateWindows(); - CheckPaletteAnim(); + this->CheckPaletteAnim(); this->Paint(); } diff --git a/src/video/allegro_v.h b/src/video/allegro_v.h --- a/src/video/allegro_v.h +++ b/src/video/allegro_v.h @@ -36,6 +36,7 @@ public: protected: void InputLoop() override; void Paint() override; + void CheckPaletteAnim() override; }; /** Factory for the allegro video driver. */ diff --git a/src/video/cocoa/cocoa_v.h b/src/video/cocoa/cocoa_v.h --- a/src/video/cocoa/cocoa_v.h +++ b/src/video/cocoa/cocoa_v.h @@ -76,6 +76,7 @@ protected: float GetDPIScale() override; void InputLoop() override; void Paint() override; + void CheckPaletteAnim() override; private: bool PollEvent(); @@ -88,7 +89,6 @@ private: bool MakeWindow(int width, int height); void UpdatePalette(uint first_color, uint num_colors); - void CheckPaletteAnim(); void BlitIndexedToView32(int left, int top, int right, int bottom); }; diff --git a/src/video/sdl2_v.cpp b/src/video/sdl2_v.cpp --- a/src/video/sdl2_v.cpp +++ b/src/video/sdl2_v.cpp @@ -853,8 +853,6 @@ void VideoDriver_SDL::MainLoop() last_realtime_tick = cur_ticks; next_game_tick = cur_ticks; - this->CheckPaletteAnim(); - if (_draw_threaded) { /* Initialise the mutex first, because that's the thing we *need* * directly in the newly created thread. */ diff --git a/src/video/sdl2_v.h b/src/video/sdl2_v.h --- a/src/video/sdl2_v.h +++ b/src/video/sdl2_v.h @@ -48,6 +48,7 @@ protected: void UnlockVideoBuffer() override; void Paint() override; void PaintThread() override; + void CheckPaletteAnim(); private: int PollEvent(); @@ -55,7 +56,6 @@ private: void MainLoopCleanup(); bool CreateMainSurface(uint w, uint h, bool resize); bool CreateMainWindow(uint w, uint h); - void CheckPaletteAnim(); #ifdef __EMSCRIPTEN__ /* Convert a constant pointer back to a non-constant pointer to a member function. */ diff --git a/src/video/sdl_v.cpp b/src/video/sdl_v.cpp --- a/src/video/sdl_v.cpp +++ b/src/video/sdl_v.cpp @@ -123,8 +123,10 @@ static void InitPalette() UpdatePalette(true); } -static void CheckPaletteAnim() +void VideoDriver_SDL::CheckPaletteAnim() { + _local_palette = _cur_palette; + if (_cur_palette.count_dirty != 0) { Blitter *blitter = BlitterFactory::GetCurrentBlitter(); @@ -183,7 +185,6 @@ void VideoDriver_SDL::PaintThread() _draw_signal->wait(*_draw_mutex); while (_draw_continue) { - CheckPaletteAnim(); /* Then just draw and wait till we stop */ this->Paint(); _draw_signal->wait(lock); @@ -708,8 +709,6 @@ void VideoDriver_SDL::MainLoop() 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* @@ -781,12 +780,11 @@ void VideoDriver_SDL::MainLoop() this->InputLoop(); ::InputLoop(); UpdateWindows(); - _local_palette = _cur_palette; + this->CheckPaletteAnim(); if (_draw_mutex != nullptr && !HasModalProgress()) { _draw_signal->notify_one(); } else { - CheckPaletteAnim(); this->Paint(); } } diff --git a/src/video/sdl_v.h b/src/video/sdl_v.h --- a/src/video/sdl_v.h +++ b/src/video/sdl_v.h @@ -43,6 +43,7 @@ protected: void UnlockVideoBuffer() override; void Paint() override; void PaintThread() override; + void CheckPaletteAnim(); private: std::unique_lock draw_lock; diff --git a/src/video/video_driver.hpp b/src/video/video_driver.hpp --- a/src/video/video_driver.hpp +++ b/src/video/video_driver.hpp @@ -184,6 +184,11 @@ protected: */ virtual void PaintThread() {} + /** + * Process any pending palette animation. + */ + virtual void CheckPaletteAnim() {} + std::chrono::steady_clock::duration GetGameInterval() { return std::chrono::milliseconds(MILLISECONDS_PER_TICK); diff --git a/src/video/win32_v.cpp b/src/video/win32_v.cpp --- a/src/video/win32_v.cpp +++ b/src/video/win32_v.cpp @@ -1201,7 +1201,6 @@ void VideoDriver_Win32::MainLoop() _wnd.running = true; - CheckPaletteAnim(); for (;;) { InteractiveRandom(); // randomness diff --git a/src/video/win32_v.h b/src/video/win32_v.h --- a/src/video/win32_v.h +++ b/src/video/win32_v.h @@ -49,12 +49,11 @@ protected: void UnlockVideoBuffer() override; void Paint() override; void PaintThread() override; + void CheckPaletteAnim() override; private: std::unique_lock draw_lock; - void CheckPaletteAnim(); - static void PaintThreadThunk(VideoDriver_Win32 *drv); };