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:
committed by
Patric Stout
parent
e56d2c63c3
commit
8946b41d20
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user