diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/runner.py | 13 | ||||
-rw-r--r-- | tests/sdl_canvas_palette.c | 61 | ||||
-rw-r--r-- | tests/sdl_canvas_palette_2.c | 77 |
3 files changed, 151 insertions, 0 deletions
diff --git a/tests/runner.py b/tests/runner.py index 779e51da..49991498 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -7448,6 +7448,19 @@ elif 'browser' in str(sys.argv): Popen(['python', EMCC, os.path.join(self.get_dir(), 'sdl_canvas.c'), '-o', 'page.html']).communicate() self.run_browser('page.html', '', '/report_result?1') + def test_sdl_canvas_palette(self): + open(os.path.join(self.get_dir(), 'sdl_canvas_palette.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_canvas_palette.c')).read())) + + Popen(['python', EMCC, os.path.join(self.get_dir(), 'sdl_canvas_palette.c'), '-o', 'page.html']).communicate() + self.run_browser('page.html', '') + + def test_sdl_canvas_palette_2(self): + open(os.path.join(self.get_dir(), 'sdl_canvas_palette_2.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_canvas_palette_2.c')).read())) + open(os.path.join(self.get_dir(), 'pre.js'), 'w').write('Module[\'preRun\'] = function() { SDL.defaults.copyOnLock = false }') + + Popen(['python', EMCC, os.path.join(self.get_dir(), 'sdl_canvas_palette_2.c'), '-o', 'page.html', '--pre-js', 'pre.js']).communicate() + self.run_browser('page.html', '') + def test_sdl_key(self): open(os.path.join(self.get_dir(), 'pre.js'), 'w').write(''' Module.postRun = function() { diff --git a/tests/sdl_canvas_palette.c b/tests/sdl_canvas_palette.c new file mode 100644 index 00000000..1ba07760 --- /dev/null +++ b/tests/sdl_canvas_palette.c @@ -0,0 +1,61 @@ +#include <stdio.h> +#include <SDL/SDL.h> +#include <emscripten.h> + +int main() { + SDL_Init(SDL_INIT_VIDEO); + SDL_Surface *screen = SDL_SetVideoMode(600, 400, 8, SDL_HWSURFACE | SDL_HWPALETTE); + + //initialize sdl palette + //with red green and blue + //colors + SDL_Color pal[3]; + pal[0].r = 255; + pal[0].g = 0; + pal[0].b = 0; + pal[0].unused = 0; + + pal[1].r = 0; + pal[1].g = 255; + pal[1].b = 0; + pal[1].unused = 0; + + pal[2].r = 0; + pal[2].g = 0; + pal[2].b = 255; + pal[2].unused = 0; + + SDL_SetColors(screen, pal, 0, 3); + + { + SDL_Rect rect = { 0, 0, 300, 200 }; + SDL_FillRect(screen, &rect, 0); + } + + { + SDL_Rect rect = { 300, 0, 300, 200 }; + SDL_FillRect(screen, &rect, 1); + } + + { + SDL_Rect rect = { 0, 200, 600, 200 }; + SDL_FillRect(screen, &rect, 2); + } + + //changing green color + //to yellow + pal[1].r = 255; + SDL_SetColors(screen, pal, 1, 1); + + { + SDL_Rect rect = { 300, 200, 300, 200 }; + SDL_FillRect(screen, &rect, 1); + } + + printf("you should see red, blue and yellow rectangle\n"); + + SDL_Quit(); + + return 0; +} + diff --git a/tests/sdl_canvas_palette_2.c b/tests/sdl_canvas_palette_2.c new file mode 100644 index 00000000..db051b2b --- /dev/null +++ b/tests/sdl_canvas_palette_2.c @@ -0,0 +1,77 @@ +#include <stdio.h> +#include <SDL/SDL.h> +#include <emscripten.h> + +static const int COLOR_COUNT = 32; + +static SDL_Surface *screen; +static SDL_Color pal[COLOR_COUNT +1]; + +void initializePalette() { + //initialize sdl palette + //with red green and blue + //colors + pal[0].r = 0; + pal[0].g = 0; + pal[0].b = 0; + pal[0].unused = 0; + + for (int i=1; i< 1 + COLOR_COUNT; i++) { + pal[i].r = 255 / COLOR_COUNT * i; + pal[i].g = 0; + pal[i].b = 0; + pal[i].unused = 0; + } + + SDL_SetColors(screen, pal, 0, 1 + COLOR_COUNT); +} + +void animatePalette() { + SDL_Color temporary; + temporary = pal[1]; + for (int i=2; i< 1 + COLOR_COUNT; i++) { + pal[i-1] = pal[i]; + } + pal[COLOR_COUNT] = temporary; + + SDL_SetColors(screen, pal, 1, COLOR_COUNT); + + //refreshing + SDL_LockSurface(screen); + SDL_UnlockSurface(screen); + + printf("yet another cycle\n"); +} + +int main() { + SDL_Init(SDL_INIT_VIDEO); + screen = SDL_SetVideoMode(600, 400, 8, SDL_HWSURFACE | SDL_HWPALETTE); + + //test empty pallete + SDL_LockSurface(screen); + SDL_UnlockSurface(screen); + + initializePalette(); + + //palette is red yellow blue + 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); + + //Animation + printf("you should see red gradient animation\n"); + emscripten_set_main_loop(animatePalette, 0); + + SDL_Quit(); + + return 0; +} + |