Partially fix data race issues around _cur_palette
See: https://github.com/OpenTTD/OpenTTD/issues/8712
This commit is contained in:
@@ -69,6 +69,7 @@ void VideoDriver_SDL_Default::MakePalette()
|
||||
_cur_palette.first_dirty = 0;
|
||||
_cur_palette.count_dirty = 256;
|
||||
this->local_palette = _cur_palette;
|
||||
_cur_palette.count_dirty = 0;
|
||||
this->UpdatePalette();
|
||||
|
||||
if (_sdl_surface != _sdl_real_surface) {
|
||||
@@ -100,9 +101,9 @@ void VideoDriver_SDL_Default::Paint()
|
||||
{
|
||||
PerformanceMeasurer framerate(PFE_VIDEO);
|
||||
|
||||
if (IsEmptyRect(this->dirty_rect) && _cur_palette.count_dirty == 0) return;
|
||||
if (IsEmptyRect(this->dirty_rect) && this->local_palette.count_dirty == 0) return;
|
||||
|
||||
if (_cur_palette.count_dirty != 0) {
|
||||
if (this->local_palette.count_dirty != 0) {
|
||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||
|
||||
switch (blitter->UsePaletteAnimation()) {
|
||||
@@ -121,7 +122,7 @@ void VideoDriver_SDL_Default::Paint()
|
||||
default:
|
||||
NOT_REACHED();
|
||||
}
|
||||
_cur_palette.count_dirty = 0;
|
||||
this->local_palette.count_dirty = 0;
|
||||
}
|
||||
|
||||
SDL_Rect r = { this->dirty_rect.left, this->dirty_rect.top, this->dirty_rect.right - this->dirty_rect.left, this->dirty_rect.bottom - this->dirty_rect.top };
|
||||
|
@@ -257,6 +257,7 @@ void VideoDriver_SDL_Base::CheckPaletteAnim()
|
||||
if (_cur_palette.count_dirty == 0) return;
|
||||
|
||||
this->local_palette = _cur_palette;
|
||||
_cur_palette.count_dirty = 0;
|
||||
this->MakeDirty(0, 0, _screen.width, _screen.height);
|
||||
}
|
||||
|
||||
|
@@ -818,6 +818,7 @@ void VideoDriver_Win32Base::CheckPaletteAnim()
|
||||
if (_cur_palette.count_dirty == 0) return;
|
||||
|
||||
_local_palette = _cur_palette;
|
||||
_cur_palette.count_dirty = 0;
|
||||
this->MakeDirty(0, 0, _screen.width, _screen.height);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user