mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-05 17:36:25 +00:00
Test changing the palette for a single texture
This commit is contained in:
@@ -728,6 +728,10 @@ static bool UpdateTexturePalette(SDL_Texture *texture)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if (!FlushRenderCommandsIfTextureNeeded(texture)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!renderer->UpdateTexturePalette(renderer, texture)) {
|
if (!renderer->UpdateTexturePalette(renderer, texture)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -299,7 +299,6 @@ static SDL_Texture *CreateTexture(const void *pixels, int pitch)
|
|||||||
if (!tex) {
|
if (!tex) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
SDL_SetTextureBlendMode(tex, SDL_BLENDMODE_NONE);
|
|
||||||
SDL_UpdateTexture(tex, NULL, pixels, pitch);
|
SDL_UpdateTexture(tex, NULL, pixels, pitch);
|
||||||
SDL_SetTexturePalette(tex, palette);
|
SDL_SetTexturePalette(tex, palette);
|
||||||
return tex;
|
return tex;
|
||||||
@@ -367,8 +366,12 @@ static void loop(void)
|
|||||||
SDL_FRect dst2 = { 0.0f, WINDOW_HEIGHT - 32.0f, 32.0f, 32.0f };
|
SDL_FRect dst2 = { 0.0f, WINDOW_HEIGHT - 32.0f, 32.0f, 32.0f };
|
||||||
SDL_FRect dst3 = { WINDOW_WIDTH - 32.0f, 0.0f, 32.0f, 32.0f };
|
SDL_FRect dst3 = { WINDOW_WIDTH - 32.0f, 0.0f, 32.0f, 32.0f };
|
||||||
SDL_FRect dst4 = { WINDOW_WIDTH - 32.0f, WINDOW_HEIGHT - 32.0f, 32.0f, 32.0f };
|
SDL_FRect dst4 = { WINDOW_WIDTH - 32.0f, WINDOW_HEIGHT - 32.0f, 32.0f, 32.0f };
|
||||||
|
SDL_FRect dst5 = { 0.0f, 32.0f + 2.0f, 32.0f, 32.0f };
|
||||||
|
SDL_FRect dst6 = { WINDOW_WIDTH - 32.0f, 32.0f + 2.0f, 32.0f, 32.0f };
|
||||||
const SDL_Color black = { 0, 0, 0, SDL_ALPHA_OPAQUE };
|
const SDL_Color black = { 0, 0, 0, SDL_ALPHA_OPAQUE };
|
||||||
const SDL_Color white = { 255, 255, 255, SDL_ALPHA_OPAQUE };
|
const SDL_Color white = { 255, 255, 255, SDL_ALPHA_OPAQUE };
|
||||||
|
const SDL_Color red = { 255, 0, 0, SDL_ALPHA_OPAQUE };
|
||||||
|
const SDL_Color blue = { 0, 0, 255, SDL_ALPHA_OPAQUE };
|
||||||
|
|
||||||
/* Check for events */
|
/* Check for events */
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
@@ -396,6 +399,7 @@ static void loop(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
/* Draw the rainbow texture */
|
/* Draw the rainbow texture */
|
||||||
@@ -412,18 +416,28 @@ static void loop(void)
|
|||||||
* This tests changing palette colors within a single frame
|
* This tests changing palette colors within a single frame
|
||||||
*/
|
*/
|
||||||
SDL_SetPaletteColors(palette, &black, 1, 1);
|
SDL_SetPaletteColors(palette, &black, 1, 1);
|
||||||
SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
|
SDL_SetRenderDrawColor(renderer, black.r, black.g, black.b, black.a);
|
||||||
SDL_RenderDebugText(renderer, dst1.x + 32.0f + 2.0f, dst1.y + 12, "Black");
|
SDL_RenderDebugText(renderer, dst1.x + 32.0f + 2.0f, dst1.y + 12, "Black");
|
||||||
SDL_RenderTexture(renderer, black_texture1, &src, &dst1);
|
SDL_RenderTexture(renderer, black_texture1, &src, &dst1);
|
||||||
SDL_RenderDebugText(renderer, dst2.x + 32.0f + 2.0f, dst2.y + 12, "Black");
|
SDL_RenderDebugText(renderer, dst2.x + 32.0f + 2.0f, dst2.y + 12, "Black");
|
||||||
SDL_RenderTexture(renderer, black_texture2, &src, &dst2);
|
SDL_RenderTexture(renderer, black_texture2, &src, &dst2);
|
||||||
SDL_SetPaletteColors(palette, &white, 1, 1);
|
SDL_SetPaletteColors(palette, &white, 1, 1);
|
||||||
SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE);
|
SDL_SetRenderDrawColor(renderer, white.r, white.g, white.b, white.a);
|
||||||
SDL_RenderDebugText(renderer, dst3.x - 40.0f - 2.0f, dst3.y + 12, "White");
|
SDL_RenderDebugText(renderer, dst3.x - 40.0f - 2.0f, dst3.y + 12, "White");
|
||||||
SDL_RenderTexture(renderer, white_texture1, &src, &dst3);
|
SDL_RenderTexture(renderer, white_texture1, &src, &dst3);
|
||||||
SDL_RenderDebugText(renderer, dst4.x - 40.0f - 2.0f, dst4.y + 12, "White");
|
SDL_RenderDebugText(renderer, dst4.x - 40.0f - 2.0f, dst4.y + 12, "White");
|
||||||
SDL_RenderTexture(renderer, white_texture2, &src, &dst4);
|
SDL_RenderTexture(renderer, white_texture2, &src, &dst4);
|
||||||
|
|
||||||
|
/* Draw the same textures again with different colors */
|
||||||
|
SDL_SetPaletteColors(palette, &red, 1, 1);
|
||||||
|
SDL_SetRenderDrawColor(renderer, red.r, red.g, red.b, red.a);
|
||||||
|
SDL_RenderDebugText(renderer, dst5.x + 32.0f + 2.0f, dst5.y + 12, "Red");
|
||||||
|
SDL_RenderTexture(renderer, black_texture1, &src, &dst5);
|
||||||
|
SDL_SetPaletteColors(palette, &blue, 1, 1);
|
||||||
|
SDL_SetRenderDrawColor(renderer, blue.r, blue.g, blue.b, blue.a);
|
||||||
|
SDL_RenderDebugText(renderer, dst6.x - 40.0f - 2.0f, dst6.y + 12, "Blue");
|
||||||
|
SDL_RenderTexture(renderer, white_texture1, &src, &dst6);
|
||||||
|
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
SDL_Delay(10);
|
SDL_Delay(10);
|
||||||
|
|
||||||
@@ -438,23 +452,34 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
SDL_Window *window = NULL;
|
SDL_Window *window = NULL;
|
||||||
int return_code = -1;
|
int return_code = -1;
|
||||||
|
bool pixelart = false;
|
||||||
|
|
||||||
SDLTest_TrackAllocations();
|
SDLTest_TrackAllocations();
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argv[1]) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "USAGE: %s", argv[0]);
|
if (SDL_strcmp(argv[1], "--pixelart") == 0) {
|
||||||
|
pixelart = true;
|
||||||
|
} else {
|
||||||
|
SDL_Log("Usage: %s [--pixelart]", argv[0]);
|
||||||
return_code = 1;
|
return_code = 1;
|
||||||
goto quit;
|
goto quit;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!SDL_CreateWindowAndRenderer("testpalette", WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_RESIZABLE, &window, &renderer)) {
|
if (!SDL_CreateWindowAndRenderer("testpalette", WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_RESIZABLE, &window, &renderer)) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL_CreateWindowAndRenderer failed: %s", SDL_GetError());
|
SDL_Log("SDL_CreateWindowAndRenderer failed: %s", SDL_GetError());
|
||||||
return_code = 2;
|
return_code = 2;
|
||||||
goto quit;
|
goto quit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pixelart) {
|
||||||
|
SDL_SetDefaultTextureScaleMode(renderer, SDL_SCALEMODE_PIXELART);
|
||||||
|
} else {
|
||||||
|
SDL_SetDefaultTextureScaleMode(renderer, SDL_SCALEMODE_NEAREST);
|
||||||
|
}
|
||||||
|
|
||||||
if (!CreateTextures()) {
|
if (!CreateTextures()) {
|
||||||
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create textures: %s", SDL_GetError());
|
SDL_Log("Couldn't create textures: %s", SDL_GetError());
|
||||||
return_code = 3;
|
return_code = 3;
|
||||||
goto quit;
|
goto quit;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user