| /* |
| * Copyright 2014 The Emscripten Authors. All rights reserved. |
| * Emscripten is available under two separate licenses, the MIT license and the |
| * University of Illinois/NCSA Open Source License. Both these licenses can be |
| * found in the LICENSE file. |
| */ |
| |
| #include <stdio.h> |
| #include <SDL2/SDL.h> |
| #include <emscripten.h> |
| #include <string.h> |
| |
| #define COLOR_COUNT 32 |
| |
| static SDL_Surface *screen; |
| static SDL_Color pal[COLOR_COUNT +1]; |
| |
| void pallete(int red, int green, int blue) { |
| //initialize sdl palette |
| //with gradient colors |
| pal[0].r = 0; |
| pal[0].g = 0; |
| pal[0].b = 0; |
| pal[0].a = 255; |
| |
| for (int i=1; i< 1 + COLOR_COUNT; i++) { |
| pal[i].r = (float) red / COLOR_COUNT * i; |
| pal[i].g = (float) green / COLOR_COUNT * i; |
| pal[i].b = (float) blue / COLOR_COUNT * i; |
| pal[i].a = 255; |
| } |
| |
| SDL_SetPaletteColors(screen->format->palette, pal, 0, 1 + COLOR_COUNT); |
| } |
| |
| int main(int argc, char** argv) { |
| SDL_Init(SDL_INIT_VIDEO); |
| |
| SDL_Window *window; |
| SDL_Renderer *renderer; |
| |
| SDL_CreateWindowAndRenderer(600, 450, 0, &window, &renderer); |
| |
| screen = SDL_CreateRGBSurface(0, 600, 450, 8, 0, 0, 0, 0); |
| |
| //test empty pallete |
| SDL_LockSurface(screen); |
| SDL_UnlockSurface(screen); |
| |
| //Draw gradient |
| SDL_LockSurface(screen); |
| int size = screen->h * screen->pitch; |
| char *color = screen->pixels; |
| int divider = size / COLOR_COUNT; |
| int i = 0; |
| while (i < size) { |
| *color = 1 + (i / divider); //red |
| color++; |
| i++; |
| } |
| SDL_UnlockSurface(screen); |
| |
| //Set pallete |
| if (argc > 1) { |
| printf("%s\n", argv[1]); |
| if (strcmp(argv[1], "-r") == 0) { |
| printf("set [red]\n"); |
| pallete(255, 0, 0); |
| } |
| if (strcmp(argv[1], "-g") == 0) { |
| printf("set [green]\n"); |
| pallete(0, 255, 0); |
| } |
| if (strcmp(argv[1], "-b") == 0) { |
| printf("set [blue]\n"); |
| pallete(0, 0, 255); |
| } |
| } |
| |
| //refreshing |
| SDL_LockSurface(screen); |
| SDL_UnlockSurface(screen); |
| |
| SDL_Texture *screenTexture = SDL_CreateTextureFromSurface(renderer, screen); |
| SDL_RenderClear(renderer); |
| SDL_RenderCopy(renderer, screenTexture, NULL, NULL); |
| SDL_RenderPresent(renderer); |
| |
| // Don't quit - we need to reftest the canvas! SDL_Quit(); |
| |
| return 0; |
| } |
| |