|
|
@@ -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);
|