Fix: ensure switching blitter happens in the main thread

This because video-drivers might need to make changes to their
context, which for most video-drivers has to be done in the same
thread as the window was created; main thread in our case.
This commit is contained in:
Patric Stout
2021-03-08 14:50:06 +01:00
committed by Patric Stout
parent e56d2c63c3
commit 8946b41d20
3 changed files with 44 additions and 10 deletions

View File

@@ -35,7 +35,7 @@ class VideoDriver : public Driver {
const uint DEFAULT_WINDOW_HEIGHT = 480u; ///< Default window height.
public:
VideoDriver() : is_game_threaded(true) {}
VideoDriver() : is_game_threaded(true), change_blitter(nullptr) {}
/**
* Mark a particular area dirty.
@@ -161,6 +161,15 @@ public:
return ZOOM_LVL_OUT_4X;
}
/**
* Queue a request to change the blitter. This is not executed immediately,
* but instead on the next draw-tick.
*/
void ChangeBlitter(const char *new_blitter)
{
this->change_blitter = new_blitter;
}
/**
* Get the currently active instance of the video driver.
*/
@@ -303,6 +312,9 @@ protected:
private:
void GameLoop();
void GameThread();
void RealChangeBlitter(const char *repl_blitter);
const char *change_blitter; ///< Request to change the blitter. nullptr if no pending request.
};
#endif /* VIDEO_VIDEO_DRIVER_HPP */