diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-03-23 18:42:42 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-03-23 18:42:42 -0700 |
commit | 339ae3f79475fd15f2a479a2d65094777b982f03 (patch) | |
tree | 9d1c34e53f61bb0333c68ab4fa4da0bc2f38864f | |
parent | 3ca9645e0b214fce990f2cf63b9c3294fa6b0179 (diff) |
optimize SDL_FillRect
-rw-r--r-- | src/library_sdl.js | 21 | ||||
-rwxr-xr-x | tests/runner.py | 8 | ||||
-rw-r--r-- | tests/sdl_canvas.c (renamed from tests/sdl_font.c) | 20 |
3 files changed, 23 insertions, 26 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index 21c1292e..f2faa028 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -154,6 +154,10 @@ mergeInto(LibraryManager.library, { return 'rgb(' + (rgba&255) + ',' + ((rgba >> 8)&255) + ',' + ((rgba >> 16)&255) + ')'; }, + translateColorToCSS: function(rgba) { + return 'rgb(' + ((rgba >> 24)&255) + ',' + ((rgba >> 16)&255) + ',' + ((rgba >> 8)&255) + ')'; + }, + makeSurface: function(width, height, flags, usePageCanvas, source) { flags = flags || 0; var surf = _malloc(14*Runtime.QUANTUM_SIZE); // SDL_Surface has 14 fields of quantum size @@ -503,21 +507,10 @@ mergeInto(LibraryManager.library, { SDL_FillRect: function(surf, rect, color) { console.log('WARNING: SDL_FillRect not optimized yet'); var surfData = SDL.surfaces[surf]; - var c1 = color & 0xff; - var c2 = (color >> 8) & 0xff; - var c3 = (color >> 16) & 0xff; + assert(!surfData.locked); // but we could unlock and re-lock if we must.. var r = SDL.loadRect(rect); - var data = surfData.image.data; - var width = surfData.width; - for (var y = r.y; y < r.y + r.h; y++) { - var base = y*width*4; - for (var x = r.x; x < r.x + r.w; x++) { - var start = x*4 + base; - data[start] = c1; - data[start+1] = c2; - data[start+2] = c3; - } - } + surfData.ctx.fillStyle = SDL.translateColorToCSS(color); + surfData.ctx.fillRect(r.x, r.y, r.w, r.h); }, SDL_BlitSurface__deps: ['SDL_UpperBlit'], diff --git a/tests/runner.py b/tests/runner.py index 7691d41b..bf4161da 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -6375,11 +6375,11 @@ f.close() shutil.move(os.path.join(self.get_dir(), basename), basename + '.renamedsoitcannotbefound'); self.run_browser('page.html', '', '/report_result?' + str(width)) - def test_sdl_font(self): - open(os.path.join(self.get_dir(), 'sdl_font.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_font.c')).read())) + def test_sdl_canvas(self): + open(os.path.join(self.get_dir(), 'sdl_canvas.c'), 'w').write(self.with_report_result(open(path_from_root('tests', 'sdl_canvas.c')).read())) - Popen(['python', EMCC, os.path.join(self.get_dir(), 'sdl_font.c'), '-o', 'page.html']).communicate() - self.run_browser('page.html', '', '/report_result?80') + Popen(['python', EMCC, os.path.join(self.get_dir(), 'sdl_canvas.c'), '-o', 'page.html']).communicate() + self.run_browser('page.html', '', '/report_result?3900') def test_sdl_key(self): open(os.path.join(self.get_dir(), 'pre.js'), 'w').write(''' diff --git a/tests/sdl_font.c b/tests/sdl_canvas.c index f4f26355..a73c4351 100644 --- a/tests/sdl_font.c +++ b/tests/sdl_canvas.c @@ -15,13 +15,6 @@ int main() { SDL_Color color = { 0xff, 0x99, 0x00, 0x77 }; SDL_Surface *text = TTF_RenderText_Solid(font, "hello orange world", color); - SDL_LockSurface(text); - int sum = 0; - for (int i = 0; i < text->h; i++) { - sum += *((char*)text->pixels + i*text->w*4 + i*4 + 0); - } - printf("Sum: %d\n", sum); - SDL_UnlockSurface(text); SDL_Color color2 = { 0xbb, 0, 0xff, 0 }; SDL_Surface *text2 = TTF_RenderText_Solid(font, "a second line, purple", color2); @@ -32,9 +25,20 @@ int main() { dest.y = 100; SDL_BlitSurface (text2, NULL, screen, &dest); + // fill stuff + SDL_Rect rect = { 200, 200, 175, 125 }; + SDL_FillRect(screen, &rect, 0x2222ff00); + SDL_Flip(screen); - printf("you should see two lines of text in different colors.\n"); + SDL_LockSurface(screen); + int sum = 0; + for (int i = 0; i < screen->h; i++) { + sum += *((char*)screen->pixels + i*screen->w*4 + i*4 + 0); + } + printf("Sum: %d\n", sum); + + printf("you should see two lines of text in different colors and a blue rectangle\n"); SDL_Quit(); |