Skip to content

Commit

Permalink
Change: prevent palette updates during copying to the video driver
Browse files Browse the repository at this point in the history
ThreadSanitizer rightfully notices that the game-thread could
update the palette while the draw-thread is copying it for local
use. The odds of this are very small, but nevertheless, it does
carry a very good point.

It wouldn't hurt the application in any way, but it might cause
visual glitches on the screen.
  • Loading branch information
TrueBrain committed Jun 26, 2021
1 parent b900465 commit 606a624
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/gfx.cpp
Expand Up @@ -51,6 +51,8 @@ static byte _stringwidth_table[FS_END][224]; ///< Cache containing width of ofte
DrawPixelInfo *_cur_dpi;
byte _colour_gradient[COLOUR_END][8];

static std::recursive_mutex _palette_mutex; ///< To coordinate access to _cur_palette.

static void GfxMainBlitterViewport(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE);
static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode, const SubSprite *sub = nullptr, SpriteID sprite_id = SPR_CURSOR_MOUSE, ZoomLevel zoom = ZOOM_LVL_NORMAL);

Expand Down Expand Up @@ -1197,6 +1199,7 @@ void DoPaletteAnimations();

void GfxInitPalettes()
{
std::lock_guard<std::recursive_mutex> lock(_palette_mutex);
memcpy(&_cur_palette, &_palette, sizeof(_cur_palette));
DoPaletteAnimations();
}
Expand All @@ -1212,6 +1215,8 @@ void GfxInitPalettes()
*/
bool CopyPalette(Palette &local_palette, bool force_copy)
{
std::lock_guard<std::recursive_mutex> lock(_palette_mutex);

if (!force_copy && _cur_palette.count_dirty == 0) return false;

local_palette = _cur_palette;
Expand All @@ -1230,6 +1235,8 @@ bool CopyPalette(Palette &local_palette, bool force_copy)

void DoPaletteAnimations()
{
std::lock_guard<std::recursive_mutex> lock(_palette_mutex);

/* Animation counter for the palette animation. */
static int palette_animation_counter = 0;
palette_animation_counter += 8;
Expand Down

0 comments on commit 606a624

Please sign in to comment.