123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499 |
- /*
- Copyright (C) 1997-2025 Sam Lantinga <[email protected]>
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely.
- */
- /* Simple program: Move N sprites around on the screen as fast as possible */
- #include <SDL3/SDL.h>
- #include <SDL3/SDL_test_memory.h>
- #include <SDL3/SDL_main.h>
- #ifdef SDL_PLATFORM_EMSCRIPTEN
- #include <emscripten/emscripten.h>
- #endif
- #define WINDOW_WIDTH 640
- #define WINDOW_HEIGHT 480
- static const SDL_Color Palette[256] = {
- { 255, 0, 0, SDL_ALPHA_OPAQUE },
- { 255, 5, 0, SDL_ALPHA_OPAQUE },
- { 255, 11, 0, SDL_ALPHA_OPAQUE },
- { 255, 17, 0, SDL_ALPHA_OPAQUE },
- { 255, 23, 0, SDL_ALPHA_OPAQUE },
- { 255, 29, 0, SDL_ALPHA_OPAQUE },
- { 255, 35, 0, SDL_ALPHA_OPAQUE },
- { 255, 41, 0, SDL_ALPHA_OPAQUE },
- { 255, 47, 0, SDL_ALPHA_OPAQUE },
- { 255, 53, 0, SDL_ALPHA_OPAQUE },
- { 255, 59, 0, SDL_ALPHA_OPAQUE },
- { 255, 65, 0, SDL_ALPHA_OPAQUE },
- { 255, 71, 0, SDL_ALPHA_OPAQUE },
- { 255, 77, 0, SDL_ALPHA_OPAQUE },
- { 255, 83, 0, SDL_ALPHA_OPAQUE },
- { 255, 89, 0, SDL_ALPHA_OPAQUE },
- { 255, 95, 0, SDL_ALPHA_OPAQUE },
- { 255, 101, 0, SDL_ALPHA_OPAQUE },
- { 255, 107, 0, SDL_ALPHA_OPAQUE },
- { 255, 113, 0, SDL_ALPHA_OPAQUE },
- { 255, 119, 0, SDL_ALPHA_OPAQUE },
- { 255, 125, 0, SDL_ALPHA_OPAQUE },
- { 255, 131, 0, SDL_ALPHA_OPAQUE },
- { 255, 137, 0, SDL_ALPHA_OPAQUE },
- { 255, 143, 0, SDL_ALPHA_OPAQUE },
- { 255, 149, 0, SDL_ALPHA_OPAQUE },
- { 255, 155, 0, SDL_ALPHA_OPAQUE },
- { 255, 161, 0, SDL_ALPHA_OPAQUE },
- { 255, 167, 0, SDL_ALPHA_OPAQUE },
- { 255, 173, 0, SDL_ALPHA_OPAQUE },
- { 255, 179, 0, SDL_ALPHA_OPAQUE },
- { 255, 185, 0, SDL_ALPHA_OPAQUE },
- { 255, 191, 0, SDL_ALPHA_OPAQUE },
- { 255, 197, 0, SDL_ALPHA_OPAQUE },
- { 255, 203, 0, SDL_ALPHA_OPAQUE },
- { 255, 209, 0, SDL_ALPHA_OPAQUE },
- { 255, 215, 0, SDL_ALPHA_OPAQUE },
- { 255, 221, 0, SDL_ALPHA_OPAQUE },
- { 255, 227, 0, SDL_ALPHA_OPAQUE },
- { 255, 233, 0, SDL_ALPHA_OPAQUE },
- { 255, 239, 0, SDL_ALPHA_OPAQUE },
- { 255, 245, 0, SDL_ALPHA_OPAQUE },
- { 255, 251, 0, SDL_ALPHA_OPAQUE },
- { 253, 255, 0, SDL_ALPHA_OPAQUE },
- { 247, 255, 0, SDL_ALPHA_OPAQUE },
- { 241, 255, 0, SDL_ALPHA_OPAQUE },
- { 235, 255, 0, SDL_ALPHA_OPAQUE },
- { 229, 255, 0, SDL_ALPHA_OPAQUE },
- { 223, 255, 0, SDL_ALPHA_OPAQUE },
- { 217, 255, 0, SDL_ALPHA_OPAQUE },
- { 211, 255, 0, SDL_ALPHA_OPAQUE },
- { 205, 255, 0, SDL_ALPHA_OPAQUE },
- { 199, 255, 0, SDL_ALPHA_OPAQUE },
- { 193, 255, 0, SDL_ALPHA_OPAQUE },
- { 187, 255, 0, SDL_ALPHA_OPAQUE },
- { 181, 255, 0, SDL_ALPHA_OPAQUE },
- { 175, 255, 0, SDL_ALPHA_OPAQUE },
- { 169, 255, 0, SDL_ALPHA_OPAQUE },
- { 163, 255, 0, SDL_ALPHA_OPAQUE },
- { 157, 255, 0, SDL_ALPHA_OPAQUE },
- { 151, 255, 0, SDL_ALPHA_OPAQUE },
- { 145, 255, 0, SDL_ALPHA_OPAQUE },
- { 139, 255, 0, SDL_ALPHA_OPAQUE },
- { 133, 255, 0, SDL_ALPHA_OPAQUE },
- { 127, 255, 0, SDL_ALPHA_OPAQUE },
- { 121, 255, 0, SDL_ALPHA_OPAQUE },
- { 115, 255, 0, SDL_ALPHA_OPAQUE },
- { 109, 255, 0, SDL_ALPHA_OPAQUE },
- { 103, 255, 0, SDL_ALPHA_OPAQUE },
- { 97, 255, 0, SDL_ALPHA_OPAQUE },
- { 91, 255, 0, SDL_ALPHA_OPAQUE },
- { 85, 255, 0, SDL_ALPHA_OPAQUE },
- { 79, 255, 0, SDL_ALPHA_OPAQUE },
- { 73, 255, 0, SDL_ALPHA_OPAQUE },
- { 67, 255, 0, SDL_ALPHA_OPAQUE },
- { 61, 255, 0, SDL_ALPHA_OPAQUE },
- { 55, 255, 0, SDL_ALPHA_OPAQUE },
- { 49, 255, 0, SDL_ALPHA_OPAQUE },
- { 43, 255, 0, SDL_ALPHA_OPAQUE },
- { 37, 255, 0, SDL_ALPHA_OPAQUE },
- { 31, 255, 0, SDL_ALPHA_OPAQUE },
- { 25, 255, 0, SDL_ALPHA_OPAQUE },
- { 19, 255, 0, SDL_ALPHA_OPAQUE },
- { 13, 255, 0, SDL_ALPHA_OPAQUE },
- { 7, 255, 0, SDL_ALPHA_OPAQUE },
- { 1, 255, 0, SDL_ALPHA_OPAQUE },
- { 0, 255, 3, SDL_ALPHA_OPAQUE },
- { 0, 255, 9, SDL_ALPHA_OPAQUE },
- { 0, 255, 15, SDL_ALPHA_OPAQUE },
- { 0, 255, 21, SDL_ALPHA_OPAQUE },
- { 0, 255, 27, SDL_ALPHA_OPAQUE },
- { 0, 255, 33, SDL_ALPHA_OPAQUE },
- { 0, 255, 39, SDL_ALPHA_OPAQUE },
- { 0, 255, 45, SDL_ALPHA_OPAQUE },
- { 0, 255, 51, SDL_ALPHA_OPAQUE },
- { 0, 255, 57, SDL_ALPHA_OPAQUE },
- { 0, 255, 63, SDL_ALPHA_OPAQUE },
- { 0, 255, 69, SDL_ALPHA_OPAQUE },
- { 0, 255, 75, SDL_ALPHA_OPAQUE },
- { 0, 255, 81, SDL_ALPHA_OPAQUE },
- { 0, 255, 87, SDL_ALPHA_OPAQUE },
- { 0, 255, 93, SDL_ALPHA_OPAQUE },
- { 0, 255, 99, SDL_ALPHA_OPAQUE },
- { 0, 255, 105, SDL_ALPHA_OPAQUE },
- { 0, 255, 111, SDL_ALPHA_OPAQUE },
- { 0, 255, 117, SDL_ALPHA_OPAQUE },
- { 0, 255, 123, SDL_ALPHA_OPAQUE },
- { 0, 255, 129, SDL_ALPHA_OPAQUE },
- { 0, 255, 135, SDL_ALPHA_OPAQUE },
- { 0, 255, 141, SDL_ALPHA_OPAQUE },
- { 0, 255, 147, SDL_ALPHA_OPAQUE },
- { 0, 255, 153, SDL_ALPHA_OPAQUE },
- { 0, 255, 159, SDL_ALPHA_OPAQUE },
- { 0, 255, 165, SDL_ALPHA_OPAQUE },
- { 0, 255, 171, SDL_ALPHA_OPAQUE },
- { 0, 255, 177, SDL_ALPHA_OPAQUE },
- { 0, 255, 183, SDL_ALPHA_OPAQUE },
- { 0, 255, 189, SDL_ALPHA_OPAQUE },
- { 0, 255, 195, SDL_ALPHA_OPAQUE },
- { 0, 255, 201, SDL_ALPHA_OPAQUE },
- { 0, 255, 207, SDL_ALPHA_OPAQUE },
- { 0, 255, 213, SDL_ALPHA_OPAQUE },
- { 0, 255, 219, SDL_ALPHA_OPAQUE },
- { 0, 255, 225, SDL_ALPHA_OPAQUE },
- { 0, 255, 231, SDL_ALPHA_OPAQUE },
- { 0, 255, 237, SDL_ALPHA_OPAQUE },
- { 0, 255, 243, SDL_ALPHA_OPAQUE },
- { 0, 255, 249, SDL_ALPHA_OPAQUE },
- { 0, 255, 255, SDL_ALPHA_OPAQUE },
- { 0, 249, 255, SDL_ALPHA_OPAQUE },
- { 0, 243, 255, SDL_ALPHA_OPAQUE },
- { 0, 237, 255, SDL_ALPHA_OPAQUE },
- { 0, 231, 255, SDL_ALPHA_OPAQUE },
- { 0, 225, 255, SDL_ALPHA_OPAQUE },
- { 0, 219, 255, SDL_ALPHA_OPAQUE },
- { 0, 213, 255, SDL_ALPHA_OPAQUE },
- { 0, 207, 255, SDL_ALPHA_OPAQUE },
- { 0, 201, 255, SDL_ALPHA_OPAQUE },
- { 0, 195, 255, SDL_ALPHA_OPAQUE },
- { 0, 189, 255, SDL_ALPHA_OPAQUE },
- { 0, 183, 255, SDL_ALPHA_OPAQUE },
- { 0, 177, 255, SDL_ALPHA_OPAQUE },
- { 0, 171, 255, SDL_ALPHA_OPAQUE },
- { 0, 165, 255, SDL_ALPHA_OPAQUE },
- { 0, 159, 255, SDL_ALPHA_OPAQUE },
- { 0, 153, 255, SDL_ALPHA_OPAQUE },
- { 0, 147, 255, SDL_ALPHA_OPAQUE },
- { 0, 141, 255, SDL_ALPHA_OPAQUE },
- { 0, 135, 255, SDL_ALPHA_OPAQUE },
- { 0, 129, 255, SDL_ALPHA_OPAQUE },
- { 0, 123, 255, SDL_ALPHA_OPAQUE },
- { 0, 117, 255, SDL_ALPHA_OPAQUE },
- { 0, 111, 255, SDL_ALPHA_OPAQUE },
- { 0, 105, 255, SDL_ALPHA_OPAQUE },
- { 0, 99, 255, SDL_ALPHA_OPAQUE },
- { 0, 93, 255, SDL_ALPHA_OPAQUE },
- { 0, 87, 255, SDL_ALPHA_OPAQUE },
- { 0, 81, 255, SDL_ALPHA_OPAQUE },
- { 0, 75, 255, SDL_ALPHA_OPAQUE },
- { 0, 69, 255, SDL_ALPHA_OPAQUE },
- { 0, 63, 255, SDL_ALPHA_OPAQUE },
- { 0, 57, 255, SDL_ALPHA_OPAQUE },
- { 0, 51, 255, SDL_ALPHA_OPAQUE },
- { 0, 45, 255, SDL_ALPHA_OPAQUE },
- { 0, 39, 255, SDL_ALPHA_OPAQUE },
- { 0, 33, 255, SDL_ALPHA_OPAQUE },
- { 0, 27, 255, SDL_ALPHA_OPAQUE },
- { 0, 21, 255, SDL_ALPHA_OPAQUE },
- { 0, 15, 255, SDL_ALPHA_OPAQUE },
- { 0, 9, 255, SDL_ALPHA_OPAQUE },
- { 0, 3, 255, SDL_ALPHA_OPAQUE },
- { 1, 0, 255, SDL_ALPHA_OPAQUE },
- { 7, 0, 255, SDL_ALPHA_OPAQUE },
- { 13, 0, 255, SDL_ALPHA_OPAQUE },
- { 19, 0, 255, SDL_ALPHA_OPAQUE },
- { 25, 0, 255, SDL_ALPHA_OPAQUE },
- { 31, 0, 255, SDL_ALPHA_OPAQUE },
- { 37, 0, 255, SDL_ALPHA_OPAQUE },
- { 43, 0, 255, SDL_ALPHA_OPAQUE },
- { 49, 0, 255, SDL_ALPHA_OPAQUE },
- { 55, 0, 255, SDL_ALPHA_OPAQUE },
- { 61, 0, 255, SDL_ALPHA_OPAQUE },
- { 67, 0, 255, SDL_ALPHA_OPAQUE },
- { 73, 0, 255, SDL_ALPHA_OPAQUE },
- { 79, 0, 255, SDL_ALPHA_OPAQUE },
- { 85, 0, 255, SDL_ALPHA_OPAQUE },
- { 91, 0, 255, SDL_ALPHA_OPAQUE },
- { 97, 0, 255, SDL_ALPHA_OPAQUE },
- { 103, 0, 255, SDL_ALPHA_OPAQUE },
- { 109, 0, 255, SDL_ALPHA_OPAQUE },
- { 115, 0, 255, SDL_ALPHA_OPAQUE },
- { 121, 0, 255, SDL_ALPHA_OPAQUE },
- { 127, 0, 255, SDL_ALPHA_OPAQUE },
- { 133, 0, 255, SDL_ALPHA_OPAQUE },
- { 139, 0, 255, SDL_ALPHA_OPAQUE },
- { 145, 0, 255, SDL_ALPHA_OPAQUE },
- { 151, 0, 255, SDL_ALPHA_OPAQUE },
- { 157, 0, 255, SDL_ALPHA_OPAQUE },
- { 163, 0, 255, SDL_ALPHA_OPAQUE },
- { 169, 0, 255, SDL_ALPHA_OPAQUE },
- { 175, 0, 255, SDL_ALPHA_OPAQUE },
- { 181, 0, 255, SDL_ALPHA_OPAQUE },
- { 187, 0, 255, SDL_ALPHA_OPAQUE },
- { 193, 0, 255, SDL_ALPHA_OPAQUE },
- { 199, 0, 255, SDL_ALPHA_OPAQUE },
- { 205, 0, 255, SDL_ALPHA_OPAQUE },
- { 211, 0, 255, SDL_ALPHA_OPAQUE },
- { 217, 0, 255, SDL_ALPHA_OPAQUE },
- { 223, 0, 255, SDL_ALPHA_OPAQUE },
- { 229, 0, 255, SDL_ALPHA_OPAQUE },
- { 235, 0, 255, SDL_ALPHA_OPAQUE },
- { 241, 0, 255, SDL_ALPHA_OPAQUE },
- { 247, 0, 255, SDL_ALPHA_OPAQUE },
- { 253, 0, 255, SDL_ALPHA_OPAQUE },
- { 255, 0, 251, SDL_ALPHA_OPAQUE },
- { 255, 0, 245, SDL_ALPHA_OPAQUE },
- { 255, 0, 239, SDL_ALPHA_OPAQUE },
- { 255, 0, 233, SDL_ALPHA_OPAQUE },
- { 255, 0, 227, SDL_ALPHA_OPAQUE },
- { 255, 0, 221, SDL_ALPHA_OPAQUE },
- { 255, 0, 215, SDL_ALPHA_OPAQUE },
- { 255, 0, 209, SDL_ALPHA_OPAQUE },
- { 255, 0, 203, SDL_ALPHA_OPAQUE },
- { 255, 0, 197, SDL_ALPHA_OPAQUE },
- { 255, 0, 191, SDL_ALPHA_OPAQUE },
- { 255, 0, 185, SDL_ALPHA_OPAQUE },
- { 255, 0, 179, SDL_ALPHA_OPAQUE },
- { 255, 0, 173, SDL_ALPHA_OPAQUE },
- { 255, 0, 167, SDL_ALPHA_OPAQUE },
- { 255, 0, 161, SDL_ALPHA_OPAQUE },
- { 255, 0, 155, SDL_ALPHA_OPAQUE },
- { 255, 0, 149, SDL_ALPHA_OPAQUE },
- { 255, 0, 143, SDL_ALPHA_OPAQUE },
- { 255, 0, 137, SDL_ALPHA_OPAQUE },
- { 255, 0, 131, SDL_ALPHA_OPAQUE },
- { 255, 0, 125, SDL_ALPHA_OPAQUE },
- { 255, 0, 119, SDL_ALPHA_OPAQUE },
- { 255, 0, 113, SDL_ALPHA_OPAQUE },
- { 255, 0, 107, SDL_ALPHA_OPAQUE },
- { 255, 0, 101, SDL_ALPHA_OPAQUE },
- { 255, 0, 95, SDL_ALPHA_OPAQUE },
- { 255, 0, 89, SDL_ALPHA_OPAQUE },
- { 255, 0, 83, SDL_ALPHA_OPAQUE },
- { 255, 0, 77, SDL_ALPHA_OPAQUE },
- { 255, 0, 71, SDL_ALPHA_OPAQUE },
- { 255, 0, 65, SDL_ALPHA_OPAQUE },
- { 255, 0, 59, SDL_ALPHA_OPAQUE },
- { 255, 0, 53, SDL_ALPHA_OPAQUE },
- { 255, 0, 47, SDL_ALPHA_OPAQUE },
- { 255, 0, 41, SDL_ALPHA_OPAQUE },
- { 255, 0, 35, SDL_ALPHA_OPAQUE },
- { 255, 0, 29, SDL_ALPHA_OPAQUE },
- { 255, 0, 23, SDL_ALPHA_OPAQUE },
- { 255, 0, 17, SDL_ALPHA_OPAQUE },
- { 255, 0, 11, SDL_ALPHA_OPAQUE },
- { 255, 0, 5, SDL_ALPHA_OPAQUE }
- };
- static SDL_Renderer *renderer;
- static SDL_Palette *palette;
- static SDL_Texture *texture;
- static SDL_Texture *black_texture1;
- static SDL_Texture *black_texture2;
- static SDL_Texture *white_texture1;
- static SDL_Texture *white_texture2;
- static int palettePos = 0;
- static int paletteDir = -1;
- static bool done;
- static SDL_Texture *CreateTexture(const void *pixels, int pitch)
- {
- SDL_Texture *tex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_INDEX8, SDL_TEXTUREACCESS_STATIC, 256, 1);
- if (!tex) {
- return NULL;
- }
- SDL_UpdateTexture(tex, NULL, pixels, pitch);
- SDL_SetTexturePalette(tex, palette);
- return tex;
- }
- static bool CreateTextures()
- {
- Uint8 data[256];
- int i;
- palette = SDL_CreatePalette(256);
- if (!palette) {
- return false;
- }
- for (i = 0; i < SDL_arraysize(data); i++) {
- data[i] = i;
- }
- texture = CreateTexture(data, SDL_arraysize(data));
- if (!texture) {
- return false;
- }
- black_texture1 = CreateTexture(data, SDL_arraysize(data));
- if (!black_texture1) {
- return false;
- }
- black_texture2 = CreateTexture(data, SDL_arraysize(data));
- if (!black_texture2) {
- return false;
- }
- white_texture1 = CreateTexture(data, SDL_arraysize(data));
- if (!white_texture1) {
- return false;
- }
- white_texture2 = CreateTexture(data, SDL_arraysize(data));
- if (!white_texture2) {
- return false;
- }
- return true;
- }
- static void UpdatePalette(int pos)
- {
- int paletteSize = (int)SDL_arraysize(Palette);
- if (pos == 0) {
- SDL_SetPaletteColors(palette, Palette, 0, paletteSize);
- } else {
- SDL_SetPaletteColors(palette, Palette + pos, 0, paletteSize - pos);
- SDL_SetPaletteColors(palette, Palette, paletteSize - pos, pos);
- }
- }
- static void loop(void)
- {
- SDL_Event event;
- SDL_FRect src = { 1.0f, 0.0f, 1.0f, 1.0f };
- SDL_FRect dst1 = { 0.0f, 0.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 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 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 */
- while (SDL_PollEvent(&event)) {
- switch (event.type) {
- case SDL_EVENT_KEY_UP:
- switch (event.key.key) {
- case SDLK_LEFT:
- paletteDir = 1;
- break;
- case SDLK_RIGHT:
- paletteDir = -1;
- break;
- case SDLK_ESCAPE:
- done = true;
- break;
- default:
- break;
- }
- break;
- case SDL_EVENT_QUIT:
- done = true;
- break;
- default:
- break;
- }
- }
- SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
- SDL_RenderClear(renderer);
- /* Draw the rainbow texture */
- UpdatePalette(palettePos);
- palettePos += paletteDir;
- if (palettePos < 0) {
- palettePos = SDL_arraysize(Palette) - 1;
- } else if (palettePos >= SDL_arraysize(Palette)) {
- palettePos = 0;
- }
- SDL_RenderTexture(renderer, texture, NULL, NULL);
- /* Draw one square with black, and one square with white
- * This tests changing palette colors within a single frame
- */
- SDL_SetPaletteColors(palette, &black, 1, 1);
- 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_RenderTexture(renderer, black_texture1, &src, &dst1);
- SDL_RenderDebugText(renderer, dst2.x + 32.0f + 2.0f, dst2.y + 12, "Black");
- SDL_RenderTexture(renderer, black_texture2, &src, &dst2);
- SDL_SetPaletteColors(palette, &white, 1, 1);
- 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_RenderTexture(renderer, white_texture1, &src, &dst3);
- SDL_RenderDebugText(renderer, dst4.x - 40.0f - 2.0f, dst4.y + 12, "White");
- 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_Delay(10);
- #ifdef SDL_PLATFORM_EMSCRIPTEN
- if (done) {
- emscripten_cancel_main_loop();
- }
- #endif
- }
- int main(int argc, char *argv[])
- {
- SDL_Window *window = NULL;
- int i, return_code = -1;
- SDLTest_TrackAllocations();
- for (i = 1; i < argc; ++i) {
- if (SDL_strcmp(argv[1], "--renderer") == 0 && argv[i + 1]) {
- ++i;
- SDL_SetHint(SDL_HINT_RENDER_DRIVER, argv[i]);
- } else {
- SDL_Log("Usage: %s [--renderer driver]", argv[0]);
- return_code = 1;
- goto quit;
- }
- }
- if (!SDL_CreateWindowAndRenderer("testpalette", WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_RESIZABLE, &window, &renderer)) {
- SDL_Log("SDL_CreateWindowAndRenderer failed: %s", SDL_GetError());
- return_code = 2;
- goto quit;
- }
- if (!CreateTextures()) {
- SDL_Log("Couldn't create textures: %s", SDL_GetError());
- return_code = 3;
- goto quit;
- }
- /* Main render loop */
- done = false;
- #ifdef SDL_PLATFORM_EMSCRIPTEN
- emscripten_set_main_loop(loop, 0, 1);
- #else
- while (!done) {
- loop();
- }
- #endif
- return_code = 0;
- quit:
- SDL_DestroyPalette(palette);
- SDL_DestroyRenderer(renderer);
- SDL_DestroyWindow(window);
- SDL_Quit();
- SDLTest_LogAllocations();
- return return_code;
- }
|