Codechange: Generalise the delayed blitter change to a generic video driver command queue.
This commit is contained in:
@@ -97,27 +97,6 @@ void VideoDriver::StopGameThread()
|
||||
this->game_thread.join();
|
||||
}
|
||||
|
||||
void VideoDriver::RealChangeBlitter(const char *repl_blitter)
|
||||
{
|
||||
const char *cur_blitter = BlitterFactory::GetCurrentBlitter()->GetName();
|
||||
|
||||
DEBUG(driver, 1, "Switching blitter from '%s' to '%s'... ", cur_blitter, repl_blitter);
|
||||
Blitter *new_blitter = BlitterFactory::SelectBlitter(repl_blitter);
|
||||
if (new_blitter == nullptr) NOT_REACHED();
|
||||
DEBUG(driver, 1, "Successfully switched to %s.", repl_blitter);
|
||||
|
||||
if (!this->AfterBlitterChange()) {
|
||||
/* Failed to switch blitter, let's hope we can return to the old one. */
|
||||
if (BlitterFactory::SelectBlitter(cur_blitter) == nullptr || !this->AfterBlitterChange()) usererror("Failed to reinitialize video driver. Specify a fixed blitter in the config");
|
||||
}
|
||||
|
||||
/* Clear caches that might have sprites for another blitter. */
|
||||
this->ClearSystemSprites();
|
||||
ClearFontCache();
|
||||
GfxClearSpriteCache();
|
||||
ReInitAllWindows(false);
|
||||
}
|
||||
|
||||
void VideoDriver::Tick()
|
||||
{
|
||||
if (!this->is_game_threaded && std::chrono::steady_clock::now() >= this->next_game_tick) {
|
||||
@@ -159,10 +138,7 @@ void VideoDriver::Tick()
|
||||
|
||||
this->LockVideoBuffer();
|
||||
|
||||
if (this->change_blitter != nullptr) {
|
||||
this->RealChangeBlitter(this->change_blitter);
|
||||
this->change_blitter = nullptr;
|
||||
}
|
||||
this->DrainCommandQueue();
|
||||
|
||||
while (this->PollEvent()) {}
|
||||
::InputLoop();
|
||||
|
||||
Reference in New Issue
Block a user