Atlas - testpalette.c
Home / ext / SDL / test Lines: 1 | Size: 18383 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)][FILE BEGIN]1/* 2 Copyright (C) 1997-2025 Sam Lantinga <[email protected]> 3 4 This software is provided 'as-is', without any express or implied 5 warranty. In no event will the authors be held liable for any damages 6 arising from the use of this software. 7 8 Permission is granted to anyone to use this software for any purpose, 9 including commercial applications, and to alter it and redistribute it 10 freely. 11*/ 12/* Simple program: Move N sprites around on the screen as fast as possible */ 13 14#include <SDL3/SDL.h> 15#include <SDL3/SDL_test.h> 16#include <SDL3/SDL_main.h> 17 18#ifdef SDL_PLATFORM_EMSCRIPTEN 19#include <emscripten/emscripten.h> 20#endif 21 22#define WINDOW_WIDTH 640 23#define WINDOW_HEIGHT 480 24 25 26static const SDL_Color Palette[256] = { 27 { 255, 0, 0, SDL_ALPHA_OPAQUE }, 28 { 255, 5, 0, SDL_ALPHA_OPAQUE }, 29 { 255, 11, 0, SDL_ALPHA_OPAQUE }, 30 { 255, 17, 0, SDL_ALPHA_OPAQUE }, 31 { 255, 23, 0, SDL_ALPHA_OPAQUE }, 32 { 255, 29, 0, SDL_ALPHA_OPAQUE }, 33 { 255, 35, 0, SDL_ALPHA_OPAQUE }, 34 { 255, 41, 0, SDL_ALPHA_OPAQUE }, 35 { 255, 47, 0, SDL_ALPHA_OPAQUE }, 36 { 255, 53, 0, SDL_ALPHA_OPAQUE }, 37 { 255, 59, 0, SDL_ALPHA_OPAQUE }, 38 { 255, 65, 0, SDL_ALPHA_OPAQUE }, 39 { 255, 71, 0, SDL_ALPHA_OPAQUE }, 40 { 255, 77, 0, SDL_ALPHA_OPAQUE }, 41 { 255, 83, 0, SDL_ALPHA_OPAQUE }, 42 { 255, 89, 0, SDL_ALPHA_OPAQUE }, 43 { 255, 95, 0, SDL_ALPHA_OPAQUE }, 44 { 255, 101, 0, SDL_ALPHA_OPAQUE }, 45 { 255, 107, 0, SDL_ALPHA_OPAQUE }, 46 { 255, 113, 0, SDL_ALPHA_OPAQUE }, 47 { 255, 119, 0, SDL_ALPHA_OPAQUE }, 48 { 255, 125, 0, SDL_ALPHA_OPAQUE }, 49 { 255, 131, 0, SDL_ALPHA_OPAQUE }, 50 { 255, 137, 0, SDL_ALPHA_OPAQUE }, 51 { 255, 143, 0, SDL_ALPHA_OPAQUE }, 52 { 255, 149, 0, SDL_ALPHA_OPAQUE }, 53 { 255, 155, 0, SDL_ALPHA_OPAQUE }, 54 { 255, 161, 0, SDL_ALPHA_OPAQUE }, 55 { 255, 167, 0, SDL_ALPHA_OPAQUE }, 56 { 255, 173, 0, SDL_ALPHA_OPAQUE }, 57 { 255, 179, 0, SDL_ALPHA_OPAQUE }, 58 { 255, 185, 0, SDL_ALPHA_OPAQUE }, 59 { 255, 191, 0, SDL_ALPHA_OPAQUE }, 60 { 255, 197, 0, SDL_ALPHA_OPAQUE }, 61 { 255, 203, 0, SDL_ALPHA_OPAQUE }, 62 { 255, 209, 0, SDL_ALPHA_OPAQUE }, 63 { 255, 215, 0, SDL_ALPHA_OPAQUE }, 64 { 255, 221, 0, SDL_ALPHA_OPAQUE }, 65 { 255, 227, 0, SDL_ALPHA_OPAQUE }, 66 { 255, 233, 0, SDL_ALPHA_OPAQUE }, 67 { 255, 239, 0, SDL_ALPHA_OPAQUE }, 68 { 255, 245, 0, SDL_ALPHA_OPAQUE }, 69 { 255, 251, 0, SDL_ALPHA_OPAQUE }, 70 { 253, 255, 0, SDL_ALPHA_OPAQUE }, 71 { 247, 255, 0, SDL_ALPHA_OPAQUE }, 72 { 241, 255, 0, SDL_ALPHA_OPAQUE }, 73 { 235, 255, 0, SDL_ALPHA_OPAQUE }, 74 { 229, 255, 0, SDL_ALPHA_OPAQUE }, 75 { 223, 255, 0, SDL_ALPHA_OPAQUE }, 76 { 217, 255, 0, SDL_ALPHA_OPAQUE }, 77 { 211, 255, 0, SDL_ALPHA_OPAQUE }, 78 { 205, 255, 0, SDL_ALPHA_OPAQUE }, 79 { 199, 255, 0, SDL_ALPHA_OPAQUE }, 80 { 193, 255, 0, SDL_ALPHA_OPAQUE }, 81 { 187, 255, 0, SDL_ALPHA_OPAQUE }, 82 { 181, 255, 0, SDL_ALPHA_OPAQUE }, 83 { 175, 255, 0, SDL_ALPHA_OPAQUE }, 84 { 169, 255, 0, SDL_ALPHA_OPAQUE }, 85 { 163, 255, 0, SDL_ALPHA_OPAQUE }, 86 { 157, 255, 0, SDL_ALPHA_OPAQUE }, 87 { 151, 255, 0, SDL_ALPHA_OPAQUE }, 88 { 145, 255, 0, SDL_ALPHA_OPAQUE }, 89 { 139, 255, 0, SDL_ALPHA_OPAQUE }, 90 { 133, 255, 0, SDL_ALPHA_OPAQUE }, 91 { 127, 255, 0, SDL_ALPHA_OPAQUE }, 92 { 121, 255, 0, SDL_ALPHA_OPAQUE }, 93 { 115, 255, 0, SDL_ALPHA_OPAQUE }, 94 { 109, 255, 0, SDL_ALPHA_OPAQUE }, 95 { 103, 255, 0, SDL_ALPHA_OPAQUE }, 96 { 97, 255, 0, SDL_ALPHA_OPAQUE }, 97 { 91, 255, 0, SDL_ALPHA_OPAQUE }, 98 { 85, 255, 0, SDL_ALPHA_OPAQUE }, 99 { 79, 255, 0, SDL_ALPHA_OPAQUE }, 100 { 73, 255, 0, SDL_ALPHA_OPAQUE }, 101 { 67, 255, 0, SDL_ALPHA_OPAQUE }, 102 { 61, 255, 0, SDL_ALPHA_OPAQUE }, 103 { 55, 255, 0, SDL_ALPHA_OPAQUE }, 104 { 49, 255, 0, SDL_ALPHA_OPAQUE }, 105 { 43, 255, 0, SDL_ALPHA_OPAQUE }, 106 { 37, 255, 0, SDL_ALPHA_OPAQUE }, 107 { 31, 255, 0, SDL_ALPHA_OPAQUE }, 108 { 25, 255, 0, SDL_ALPHA_OPAQUE }, 109 { 19, 255, 0, SDL_ALPHA_OPAQUE }, 110 { 13, 255, 0, SDL_ALPHA_OPAQUE }, 111 { 7, 255, 0, SDL_ALPHA_OPAQUE }, 112 { 1, 255, 0, SDL_ALPHA_OPAQUE }, 113 { 0, 255, 3, SDL_ALPHA_OPAQUE }, 114 { 0, 255, 9, SDL_ALPHA_OPAQUE }, 115 { 0, 255, 15, SDL_ALPHA_OPAQUE }, 116 { 0, 255, 21, SDL_ALPHA_OPAQUE }, 117 { 0, 255, 27, SDL_ALPHA_OPAQUE }, 118 { 0, 255, 33, SDL_ALPHA_OPAQUE }, 119 { 0, 255, 39, SDL_ALPHA_OPAQUE }, 120 { 0, 255, 45, SDL_ALPHA_OPAQUE }, 121 { 0, 255, 51, SDL_ALPHA_OPAQUE }, 122 { 0, 255, 57, SDL_ALPHA_OPAQUE }, 123 { 0, 255, 63, SDL_ALPHA_OPAQUE }, 124 { 0, 255, 69, SDL_ALPHA_OPAQUE }, 125 { 0, 255, 75, SDL_ALPHA_OPAQUE }, 126 { 0, 255, 81, SDL_ALPHA_OPAQUE }, 127 { 0, 255, 87, SDL_ALPHA_OPAQUE }, 128 { 0, 255, 93, SDL_ALPHA_OPAQUE }, 129 { 0, 255, 99, SDL_ALPHA_OPAQUE }, 130 { 0, 255, 105, SDL_ALPHA_OPAQUE }, 131 { 0, 255, 111, SDL_ALPHA_OPAQUE }, 132 { 0, 255, 117, SDL_ALPHA_OPAQUE }, 133 { 0, 255, 123, SDL_ALPHA_OPAQUE }, 134 { 0, 255, 129, SDL_ALPHA_OPAQUE }, 135 { 0, 255, 135, SDL_ALPHA_OPAQUE }, 136 { 0, 255, 141, SDL_ALPHA_OPAQUE }, 137 { 0, 255, 147, SDL_ALPHA_OPAQUE }, 138 { 0, 255, 153, SDL_ALPHA_OPAQUE }, 139 { 0, 255, 159, SDL_ALPHA_OPAQUE }, 140 { 0, 255, 165, SDL_ALPHA_OPAQUE }, 141 { 0, 255, 171, SDL_ALPHA_OPAQUE }, 142 { 0, 255, 177, SDL_ALPHA_OPAQUE }, 143 { 0, 255, 183, SDL_ALPHA_OPAQUE }, 144 { 0, 255, 189, SDL_ALPHA_OPAQUE }, 145 { 0, 255, 195, SDL_ALPHA_OPAQUE }, 146 { 0, 255, 201, SDL_ALPHA_OPAQUE }, 147 { 0, 255, 207, SDL_ALPHA_OPAQUE }, 148 { 0, 255, 213, SDL_ALPHA_OPAQUE }, 149 { 0, 255, 219, SDL_ALPHA_OPAQUE }, 150 { 0, 255, 225, SDL_ALPHA_OPAQUE }, 151 { 0, 255, 231, SDL_ALPHA_OPAQUE }, 152 { 0, 255, 237, SDL_ALPHA_OPAQUE }, 153 { 0, 255, 243, SDL_ALPHA_OPAQUE }, 154 { 0, 255, 249, SDL_ALPHA_OPAQUE }, 155 { 0, 255, 255, SDL_ALPHA_OPAQUE }, 156 { 0, 249, 255, SDL_ALPHA_OPAQUE }, 157 { 0, 243, 255, SDL_ALPHA_OPAQUE }, 158 { 0, 237, 255, SDL_ALPHA_OPAQUE }, 159 { 0, 231, 255, SDL_ALPHA_OPAQUE }, 160 { 0, 225, 255, SDL_ALPHA_OPAQUE }, 161 { 0, 219, 255, SDL_ALPHA_OPAQUE }, 162 { 0, 213, 255, SDL_ALPHA_OPAQUE }, 163 { 0, 207, 255, SDL_ALPHA_OPAQUE }, 164 { 0, 201, 255, SDL_ALPHA_OPAQUE }, 165 { 0, 195, 255, SDL_ALPHA_OPAQUE }, 166 { 0, 189, 255, SDL_ALPHA_OPAQUE }, 167 { 0, 183, 255, SDL_ALPHA_OPAQUE }, 168 { 0, 177, 255, SDL_ALPHA_OPAQUE }, 169 { 0, 171, 255, SDL_ALPHA_OPAQUE }, 170 { 0, 165, 255, SDL_ALPHA_OPAQUE }, 171 { 0, 159, 255, SDL_ALPHA_OPAQUE }, 172 { 0, 153, 255, SDL_ALPHA_OPAQUE }, 173 { 0, 147, 255, SDL_ALPHA_OPAQUE }, 174 { 0, 141, 255, SDL_ALPHA_OPAQUE }, 175 { 0, 135, 255, SDL_ALPHA_OPAQUE }, 176 { 0, 129, 255, SDL_ALPHA_OPAQUE }, 177 { 0, 123, 255, SDL_ALPHA_OPAQUE }, 178 { 0, 117, 255, SDL_ALPHA_OPAQUE }, 179 { 0, 111, 255, SDL_ALPHA_OPAQUE }, 180 { 0, 105, 255, SDL_ALPHA_OPAQUE }, 181 { 0, 99, 255, SDL_ALPHA_OPAQUE }, 182 { 0, 93, 255, SDL_ALPHA_OPAQUE }, 183 { 0, 87, 255, SDL_ALPHA_OPAQUE }, 184 { 0, 81, 255, SDL_ALPHA_OPAQUE }, 185 { 0, 75, 255, SDL_ALPHA_OPAQUE }, 186 { 0, 69, 255, SDL_ALPHA_OPAQUE }, 187 { 0, 63, 255, SDL_ALPHA_OPAQUE }, 188 { 0, 57, 255, SDL_ALPHA_OPAQUE }, 189 { 0, 51, 255, SDL_ALPHA_OPAQUE }, 190 { 0, 45, 255, SDL_ALPHA_OPAQUE }, 191 { 0, 39, 255, SDL_ALPHA_OPAQUE }, 192 { 0, 33, 255, SDL_ALPHA_OPAQUE }, 193 { 0, 27, 255, SDL_ALPHA_OPAQUE }, 194 { 0, 21, 255, SDL_ALPHA_OPAQUE }, 195 { 0, 15, 255, SDL_ALPHA_OPAQUE }, 196 { 0, 9, 255, SDL_ALPHA_OPAQUE }, 197 { 0, 3, 255, SDL_ALPHA_OPAQUE }, 198 { 1, 0, 255, SDL_ALPHA_OPAQUE }, 199 { 7, 0, 255, SDL_ALPHA_OPAQUE }, 200 { 13, 0, 255, SDL_ALPHA_OPAQUE }, 201 { 19, 0, 255, SDL_ALPHA_OPAQUE }, 202 { 25, 0, 255, SDL_ALPHA_OPAQUE }, 203 { 31, 0, 255, SDL_ALPHA_OPAQUE }, 204 { 37, 0, 255, SDL_ALPHA_OPAQUE }, 205 { 43, 0, 255, SDL_ALPHA_OPAQUE }, 206 { 49, 0, 255, SDL_ALPHA_OPAQUE }, 207 { 55, 0, 255, SDL_ALPHA_OPAQUE }, 208 { 61, 0, 255, SDL_ALPHA_OPAQUE }, 209 { 67, 0, 255, SDL_ALPHA_OPAQUE }, 210 { 73, 0, 255, SDL_ALPHA_OPAQUE }, 211 { 79, 0, 255, SDL_ALPHA_OPAQUE }, 212 { 85, 0, 255, SDL_ALPHA_OPAQUE }, 213 { 91, 0, 255, SDL_ALPHA_OPAQUE }, 214 { 97, 0, 255, SDL_ALPHA_OPAQUE }, 215 { 103, 0, 255, SDL_ALPHA_OPAQUE }, 216 { 109, 0, 255, SDL_ALPHA_OPAQUE }, 217 { 115, 0, 255, SDL_ALPHA_OPAQUE }, 218 { 121, 0, 255, SDL_ALPHA_OPAQUE }, 219 { 127, 0, 255, SDL_ALPHA_OPAQUE }, 220 { 133, 0, 255, SDL_ALPHA_OPAQUE }, 221 { 139, 0, 255, SDL_ALPHA_OPAQUE }, 222 { 145, 0, 255, SDL_ALPHA_OPAQUE }, 223 { 151, 0, 255, SDL_ALPHA_OPAQUE }, 224 { 157, 0, 255, SDL_ALPHA_OPAQUE }, 225 { 163, 0, 255, SDL_ALPHA_OPAQUE }, 226 { 169, 0, 255, SDL_ALPHA_OPAQUE }, 227 { 175, 0, 255, SDL_ALPHA_OPAQUE }, 228 { 181, 0, 255, SDL_ALPHA_OPAQUE }, 229 { 187, 0, 255, SDL_ALPHA_OPAQUE }, 230 { 193, 0, 255, SDL_ALPHA_OPAQUE }, 231 { 199, 0, 255, SDL_ALPHA_OPAQUE }, 232 { 205, 0, 255, SDL_ALPHA_OPAQUE }, 233 { 211, 0, 255, SDL_ALPHA_OPAQUE }, 234 { 217, 0, 255, SDL_ALPHA_OPAQUE }, 235 { 223, 0, 255, SDL_ALPHA_OPAQUE }, 236 { 229, 0, 255, SDL_ALPHA_OPAQUE }, 237 { 235, 0, 255, SDL_ALPHA_OPAQUE }, 238 { 241, 0, 255, SDL_ALPHA_OPAQUE }, 239 { 247, 0, 255, SDL_ALPHA_OPAQUE }, 240 { 253, 0, 255, SDL_ALPHA_OPAQUE }, 241 { 255, 0, 251, SDL_ALPHA_OPAQUE }, 242 { 255, 0, 245, SDL_ALPHA_OPAQUE }, 243 { 255, 0, 239, SDL_ALPHA_OPAQUE }, 244 { 255, 0, 233, SDL_ALPHA_OPAQUE }, 245 { 255, 0, 227, SDL_ALPHA_OPAQUE }, 246 { 255, 0, 221, SDL_ALPHA_OPAQUE }, 247 { 255, 0, 215, SDL_ALPHA_OPAQUE }, 248 { 255, 0, 209, SDL_ALPHA_OPAQUE }, 249 { 255, 0, 203, SDL_ALPHA_OPAQUE }, 250 { 255, 0, 197, SDL_ALPHA_OPAQUE }, 251 { 255, 0, 191, SDL_ALPHA_OPAQUE }, 252 { 255, 0, 185, SDL_ALPHA_OPAQUE }, 253 { 255, 0, 179, SDL_ALPHA_OPAQUE }, 254 { 255, 0, 173, SDL_ALPHA_OPAQUE }, 255 { 255, 0, 167, SDL_ALPHA_OPAQUE }, 256 { 255, 0, 161, SDL_ALPHA_OPAQUE }, 257 { 255, 0, 155, SDL_ALPHA_OPAQUE }, 258 { 255, 0, 149, SDL_ALPHA_OPAQUE }, 259 { 255, 0, 143, SDL_ALPHA_OPAQUE }, 260 { 255, 0, 137, SDL_ALPHA_OPAQUE }, 261 { 255, 0, 131, SDL_ALPHA_OPAQUE }, 262 { 255, 0, 125, SDL_ALPHA_OPAQUE }, 263 { 255, 0, 119, SDL_ALPHA_OPAQUE }, 264 { 255, 0, 113, SDL_ALPHA_OPAQUE }, 265 { 255, 0, 107, SDL_ALPHA_OPAQUE }, 266 { 255, 0, 101, SDL_ALPHA_OPAQUE }, 267 { 255, 0, 95, SDL_ALPHA_OPAQUE }, 268 { 255, 0, 89, SDL_ALPHA_OPAQUE }, 269 { 255, 0, 83, SDL_ALPHA_OPAQUE }, 270 { 255, 0, 77, SDL_ALPHA_OPAQUE }, 271 { 255, 0, 71, SDL_ALPHA_OPAQUE }, 272 { 255, 0, 65, SDL_ALPHA_OPAQUE }, 273 { 255, 0, 59, SDL_ALPHA_OPAQUE }, 274 { 255, 0, 53, SDL_ALPHA_OPAQUE }, 275 { 255, 0, 47, SDL_ALPHA_OPAQUE }, 276 { 255, 0, 41, SDL_ALPHA_OPAQUE }, 277 { 255, 0, 35, SDL_ALPHA_OPAQUE }, 278 { 255, 0, 29, SDL_ALPHA_OPAQUE }, 279 { 255, 0, 23, SDL_ALPHA_OPAQUE }, 280 { 255, 0, 17, SDL_ALPHA_OPAQUE }, 281 { 255, 0, 11, SDL_ALPHA_OPAQUE }, 282 { 255, 0, 5, SDL_ALPHA_OPAQUE } 283}; 284 285static SDL_Renderer *renderer; 286static SDL_Palette *palette; 287static SDL_Texture *texture; 288static SDL_Texture *black_texture1; 289static SDL_Texture *black_texture2; 290static SDL_Texture *white_texture1; 291static SDL_Texture *white_texture2; 292static int palettePos = 0; 293static int paletteDir = -1; 294static bool done; 295 296static SDL_Texture *CreateTexture(const void *pixels, int pitch) 297{ 298 SDL_Texture *tex = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_INDEX8, SDL_TEXTUREACCESS_STATIC, 256, 1); 299 if (!tex) { 300 return NULL; 301 } 302 SDL_UpdateTexture(tex, NULL, pixels, pitch); 303 SDL_SetTexturePalette(tex, palette); 304 return tex; 305} 306 307static bool CreateTextures() 308{ 309 Uint8 data[256]; 310 int i; 311 312 palette = SDL_CreatePalette(256); 313 if (!palette) { 314 return false; 315 } 316 317 for (i = 0; i < SDL_arraysize(data); i++) { 318 data[i] = i; 319 } 320 321 texture = CreateTexture(data, SDL_arraysize(data)); 322 if (!texture) { 323 return false; 324 } 325 326 black_texture1 = CreateTexture(data, SDL_arraysize(data)); 327 if (!black_texture1) { 328 return false; 329 } 330 SDL_SetTextureScaleMode(black_texture1, SDL_SCALEMODE_NEAREST); 331 332 black_texture2 = CreateTexture(data, SDL_arraysize(data)); 333 if (!black_texture2) { 334 return false; 335 } 336 SDL_SetTextureScaleMode(black_texture2, SDL_SCALEMODE_NEAREST); 337 338 white_texture1 = CreateTexture(data, SDL_arraysize(data)); 339 if (!white_texture1) { 340 return false; 341 } 342 SDL_SetTextureScaleMode(white_texture1, SDL_SCALEMODE_NEAREST); 343 344 white_texture2 = CreateTexture(data, SDL_arraysize(data)); 345 if (!white_texture2) { 346 return false; 347 } 348 SDL_SetTextureScaleMode(white_texture2, SDL_SCALEMODE_NEAREST); 349 350 return true; 351} 352 353static void UpdatePalette(int pos) 354{ 355 int paletteSize = (int)SDL_arraysize(Palette); 356 357 if (pos == 0) { 358 SDL_SetPaletteColors(palette, Palette, 0, paletteSize); 359 } else { 360 SDL_SetPaletteColors(palette, Palette + pos, 0, paletteSize - pos); 361 SDL_SetPaletteColors(palette, Palette, paletteSize - pos, pos); 362 } 363} 364 365static void loop(void) 366{ 367 SDL_Event event; 368 SDL_FRect src = { 1.0f, 0.0f, 1.0f, 1.0f }; 369 SDL_FRect dst1 = { 0.0f, 0.0f, 32.0f, 32.0f }; 370 SDL_FRect dst2 = { 0.0f, WINDOW_HEIGHT - 32.0f, 32.0f, 32.0f }; 371 SDL_FRect dst3 = { WINDOW_WIDTH - 32.0f, 0.0f, 32.0f, 32.0f }; 372 SDL_FRect dst4 = { WINDOW_WIDTH - 32.0f, WINDOW_HEIGHT - 32.0f, 32.0f, 32.0f }; 373 SDL_FRect dst5 = { 0.0f, 32.0f + 2.0f, 32.0f, 32.0f }; 374 SDL_FRect dst6 = { WINDOW_WIDTH - 32.0f, 32.0f + 2.0f, 32.0f, 32.0f }; 375 const SDL_Color black = { 0, 0, 0, SDL_ALPHA_OPAQUE }; 376 const SDL_Color white = { 255, 255, 255, SDL_ALPHA_OPAQUE }; 377 const SDL_Color red = { 255, 0, 0, SDL_ALPHA_OPAQUE }; 378 const SDL_Color blue = { 0, 0, 255, SDL_ALPHA_OPAQUE }; 379 380 /* Check for events */ 381 while (SDL_PollEvent(&event)) { 382 switch (event.type) { 383 case SDL_EVENT_KEY_UP: 384 switch (event.key.key) { 385 case SDLK_LEFT: 386 paletteDir = 1; 387 break; 388 case SDLK_RIGHT: 389 paletteDir = -1; 390 break; 391 case SDLK_ESCAPE: 392 done = true; 393 break; 394 default: 395 break; 396 } 397 break; 398 case SDL_EVENT_QUIT: 399 done = true; 400 break; 401 default: 402 break; 403 } 404 } 405 406 SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); 407 SDL_RenderClear(renderer); 408 409 /* Draw the rainbow texture */ 410 UpdatePalette(palettePos); 411 palettePos += paletteDir; 412 if (palettePos < 0) { 413 palettePos = SDL_arraysize(Palette) - 1; 414 } else if (palettePos >= SDL_arraysize(Palette)) { 415 palettePos = 0; 416 } 417 SDL_RenderTexture(renderer, texture, NULL, NULL); 418 419 /* Draw one square with black, and one square with white 420 * This tests changing palette colors within a single frame 421 */ 422 SDL_SetPaletteColors(palette, &black, 1, 1); 423 SDL_SetRenderDrawColor(renderer, black.r, black.g, black.b, black.a); 424 SDL_RenderDebugText(renderer, dst1.x + 32.0f + 2.0f, dst1.y + 12, "Black"); 425 SDL_RenderTexture(renderer, black_texture1, &src, &dst1); 426 SDL_RenderDebugText(renderer, dst2.x + 32.0f + 2.0f, dst2.y + 12, "Black"); 427 SDL_RenderTexture(renderer, black_texture2, &src, &dst2); 428 SDL_SetPaletteColors(palette, &white, 1, 1); 429 SDL_SetRenderDrawColor(renderer, white.r, white.g, white.b, white.a); 430 SDL_RenderDebugText(renderer, dst3.x - 40.0f - 2.0f, dst3.y + 12, "White"); 431 SDL_RenderTexture(renderer, white_texture1, &src, &dst3); 432 SDL_RenderDebugText(renderer, dst4.x - 40.0f - 2.0f, dst4.y + 12, "White"); 433 SDL_RenderTexture(renderer, white_texture2, &src, &dst4); 434 435 /* Draw the same textures again with different colors */ 436 SDL_SetPaletteColors(palette, &red, 1, 1); 437 SDL_SetRenderDrawColor(renderer, red.r, red.g, red.b, red.a); 438 SDL_RenderDebugText(renderer, dst5.x + 32.0f + 2.0f, dst5.y + 12, "Red"); 439 SDL_RenderTexture(renderer, black_texture1, &src, &dst5); 440 SDL_SetPaletteColors(palette, &blue, 1, 1); 441 SDL_SetRenderDrawColor(renderer, blue.r, blue.g, blue.b, blue.a); 442 SDL_RenderDebugText(renderer, dst6.x - 40.0f - 2.0f, dst6.y + 12, "Blue"); 443 SDL_RenderTexture(renderer, white_texture1, &src, &dst6); 444 445 SDL_RenderPresent(renderer); 446 SDL_Delay(10); 447 448#ifdef SDL_PLATFORM_EMSCRIPTEN 449 if (done) { 450 emscripten_cancel_main_loop(); 451 } 452#endif 453} 454 455int main(int argc, char *argv[]) 456{ 457 SDL_Window *window = NULL; 458 int i, return_code = -1; 459 SDLTest_CommonState *state; 460 461 state = SDLTest_CommonCreateState(argv, 0); 462 if (!state) { 463 goto quit; 464 } 465 466 for (i = 1; i < argc; ) { 467 int consumed = SDLTest_CommonArg(state, i); 468 SDL_Log("consumed=%d", consumed); 469 if (consumed == 0) { 470 if (SDL_strcmp(argv[i], "--renderer") == 0 && argv[i + 1]) { 471 SDL_SetHint(SDL_HINT_RENDER_DRIVER, argv[i + 1]); 472 consumed = 2; 473 } 474 } 475 if (consumed <= 0) { 476 static const char *options[] = { 477 "[--renderer RENDERER]", 478 NULL, 479 }; 480 SDLTest_CommonLogUsage(state, argv[0], options); 481 return_code = 1; 482 goto quit; 483 } 484 i += consumed; 485 } 486 487 if (!SDL_CreateWindowAndRenderer("testpalette", WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_RESIZABLE, &window, &renderer)) { 488 SDL_Log("SDL_CreateWindowAndRenderer failed: %s", SDL_GetError()); 489 return_code = 2; 490 goto quit; 491 } 492 493 if (!CreateTextures()) { 494 SDL_Log("Couldn't create textures: %s", SDL_GetError()); 495 return_code = 3; 496 goto quit; 497 } 498 499 /* Main render loop */ 500 done = false; 501 502#ifdef SDL_PLATFORM_EMSCRIPTEN 503 emscripten_set_main_loop(loop, 0, 1); 504#else 505 while (!done) { 506 loop(); 507 } 508#endif 509 return_code = 0; 510quit: 511 SDL_DestroyPalette(palette); 512 SDL_DestroyRenderer(renderer); 513 SDL_DestroyWindow(window); 514 SDL_Quit(); 515 SDLTest_CommonDestroyState(state); 516 return return_code; 517} 518[FILE END](C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.