diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index b17ec729ef..d1a915b878 100644 --- a/src/render/SDL_render.c +++ b/src/render/SDL_render.c @@ -1700,8 +1700,22 @@ SDL_Texture *SDL_CreateTexture(SDL_Renderer *renderer, SDL_PixelFormat format, S static bool SDL_UpdateTextureFromSurface(SDL_Texture *texture, SDL_Rect *rect, SDL_Surface *surface) { - bool direct_update; + if (SDL_ISPIXELFORMAT_INDEXED(texture->format) && surface->palette) { + // Copy the palette to the new texture + SDL_Palette *existing = surface->palette; + SDL_Palette *palette = SDL_CreatePalette(existing->ncolors); + if (palette && + SDL_SetPaletteColors(palette, existing->colors, 0, existing->ncolors) && + SDL_SetTexturePalette(texture, palette)) { + // The texture has a reference to the palette now + SDL_DestroyPalette(palette); + } else { + SDL_DestroyPalette(palette); + return false; + } + } + bool direct_update; if (surface->format == texture->format && SDL_GetSurfaceColorspace(surface) == texture->colorspace) { if (SDL_ISPIXELFORMAT_INDEXED(surface->format)) { @@ -1740,21 +1754,6 @@ static bool SDL_UpdateTextureFromSurface(SDL_Texture *texture, SDL_Rect *rect, S } } - if (SDL_ISPIXELFORMAT_INDEXED(texture->format) && surface->palette) { - // Copy the palette to the new texture - SDL_Palette *existing = surface->palette; - SDL_Palette *palette = SDL_CreatePalette(existing->ncolors); - if (palette && - SDL_SetPaletteColors(palette, existing->colors, 0, existing->ncolors) && - SDL_SetTexturePalette(texture, palette)) { - // The texture has a reference to the palette now - SDL_DestroyPalette(palette); - } else { - SDL_DestroyPalette(palette); - return false; - } - } - if (SDL_ISPIXELFORMAT_INDEXED(texture->format) && SDL_SurfaceHasColorKey(surface)) { Uint32 key; SDL_Color col; @@ -1885,7 +1884,6 @@ SDL_Texture *SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *s SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER, SDL_TEXTUREACCESS_STATIC); SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER, surface->w); SDL_SetNumberProperty(props, SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER, surface->h); - SDL_SetPointerProperty(props, SDL_PROP_TEXTURE_CREATE_PALETTE_POINTER, surface->palette); texture = SDL_CreateTextureWithProperties(renderer, props); SDL_DestroyProperties(props);