Partially fix data race issues around _cur_palette
See: https://github.com/OpenTTD/OpenTTD/issues/8712
This commit is contained in:
@@ -141,6 +141,7 @@ bool VideoDriver_SDL_OpenGL::AllocateBackingStore(int w, int h, bool force)
|
|||||||
_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;
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@@ -165,7 +166,7 @@ void VideoDriver_SDL_OpenGL::Paint()
|
|||||||
{
|
{
|
||||||
PerformanceMeasurer framerate(PFE_VIDEO);
|
PerformanceMeasurer framerate(PFE_VIDEO);
|
||||||
|
|
||||||
if (_cur_palette.count_dirty != 0) {
|
if (this->local_palette.count_dirty != 0) {
|
||||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||||
|
|
||||||
/* Always push a changed palette to OpenGL. */
|
/* Always push a changed palette to OpenGL. */
|
||||||
@@ -174,7 +175,7 @@ void VideoDriver_SDL_OpenGL::Paint()
|
|||||||
blitter->PaletteAnimate(this->local_palette);
|
blitter->PaletteAnimate(this->local_palette);
|
||||||
}
|
}
|
||||||
|
|
||||||
_cur_palette.count_dirty = 0;
|
this->local_palette.count_dirty = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenGLBackend::Get()->Paint();
|
OpenGLBackend::Get()->Paint();
|
||||||
|
|||||||
@@ -887,6 +887,7 @@ void VideoDriver_Win32Base::ClientSizeChanged(int w, int h, bool force)
|
|||||||
_cur_palette.first_dirty = 0;
|
_cur_palette.first_dirty = 0;
|
||||||
_cur_palette.count_dirty = 256;
|
_cur_palette.count_dirty = 256;
|
||||||
_local_palette = _cur_palette;
|
_local_palette = _cur_palette;
|
||||||
|
_cur_palette.count_dirty = 0;
|
||||||
|
|
||||||
BlitterFactory::GetCurrentBlitter()->PostResize();
|
BlitterFactory::GetCurrentBlitter()->PostResize();
|
||||||
|
|
||||||
@@ -1136,7 +1137,7 @@ void VideoDriver_Win32GDI::Paint()
|
|||||||
HBITMAP old_bmp = (HBITMAP)SelectObject(dc2, this->dib_sect);
|
HBITMAP old_bmp = (HBITMAP)SelectObject(dc2, this->dib_sect);
|
||||||
HPALETTE old_palette = SelectPalette(dc, this->gdi_palette, FALSE);
|
HPALETTE old_palette = SelectPalette(dc, this->gdi_palette, FALSE);
|
||||||
|
|
||||||
if (_cur_palette.count_dirty != 0) {
|
if (_local_palette.count_dirty != 0) {
|
||||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||||
|
|
||||||
switch (blitter->UsePaletteAnimation()) {
|
switch (blitter->UsePaletteAnimation()) {
|
||||||
@@ -1155,7 +1156,7 @@ void VideoDriver_Win32GDI::Paint()
|
|||||||
default:
|
default:
|
||||||
NOT_REACHED();
|
NOT_REACHED();
|
||||||
}
|
}
|
||||||
_cur_palette.count_dirty = 0;
|
_local_palette.count_dirty = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
BitBlt(dc, 0, 0, this->width, this->height, dc2, 0, 0, SRCCOPY);
|
BitBlt(dc, 0, 0, this->width, this->height, dc2, 0, 0, SRCCOPY);
|
||||||
@@ -1447,7 +1448,7 @@ void VideoDriver_Win32OpenGL::Paint()
|
|||||||
{
|
{
|
||||||
PerformanceMeasurer framerate(PFE_VIDEO);
|
PerformanceMeasurer framerate(PFE_VIDEO);
|
||||||
|
|
||||||
if (_cur_palette.count_dirty != 0) {
|
if (_local_palette.count_dirty != 0) {
|
||||||
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
|
||||||
|
|
||||||
/* Always push a changed palette to OpenGL. */
|
/* Always push a changed palette to OpenGL. */
|
||||||
@@ -1456,7 +1457,7 @@ void VideoDriver_Win32OpenGL::Paint()
|
|||||||
blitter->PaletteAnimate(_local_palette);
|
blitter->PaletteAnimate(_local_palette);
|
||||||
}
|
}
|
||||||
|
|
||||||
_cur_palette.count_dirty = 0;
|
_local_palette.count_dirty = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
OpenGLBackend::Get()->Paint();
|
OpenGLBackend::Get()->Paint();
|
||||||
|
|||||||
Reference in New Issue
Block a user