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.first_dirty = 0;
|
||||||
_cur_palette.count_dirty = 256;
|
_cur_palette.count_dirty = 256;
|
||||||
this->local_palette = _cur_palette;
|
this->local_palette = _cur_palette;
|
||||||
|
_cur_palette.count_dirty = 0;
|
||||||
this->UpdatePalette();
|
this->UpdatePalette();
|
||||||
|
|
||||||
if (_sdl_surface != _sdl_real_surface) {
|
if (_sdl_surface != _sdl_real_surface) {
|
||||||
@@ -100,9 +101,9 @@ void VideoDriver_SDL_Default::Paint()
|
|||||||
{
|
{
|
||||||
PerformanceMeasurer framerate(PFE_VIDEO);
|
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();
|
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||||
|
|
||||||
switch (blitter->UsePaletteAnimation()) {
|
switch (blitter->UsePaletteAnimation()) {
|
||||||
@@ -121,7 +122,7 @@ void VideoDriver_SDL_Default::Paint()
|
|||||||
default:
|
default:
|
||||||
NOT_REACHED();
|
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 };
|
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;
|
if (_cur_palette.count_dirty == 0) return;
|
||||||
|
|
||||||
this->local_palette = _cur_palette;
|
this->local_palette = _cur_palette;
|
||||||
|
_cur_palette.count_dirty = 0;
|
||||||
this->MakeDirty(0, 0, _screen.width, _screen.height);
|
this->MakeDirty(0, 0, _screen.width, _screen.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -818,6 +818,7 @@ void VideoDriver_Win32Base::CheckPaletteAnim()
|
|||||||
if (_cur_palette.count_dirty == 0) return;
|
if (_cur_palette.count_dirty == 0) return;
|
||||||
|
|
||||||
_local_palette = _cur_palette;
|
_local_palette = _cur_palette;
|
||||||
|
_cur_palette.count_dirty = 0;
|
||||||
this->MakeDirty(0, 0, _screen.width, _screen.height);
|
this->MakeDirty(0, 0, _screen.width, _screen.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user