aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-10-19 16:14:18 -0700
committerAlon Zakai <alonzakai@gmail.com>2011-10-19 16:14:18 -0700
commit687ca01ddef89fc405b8422eb69ca453d8ece2c6 (patch)
treea5fc2044750ba2631b651f15c95f911b80956ab1
parent50b263040597f52aae0706ebe7ffc6a44f016d11 (diff)
optimize SDL pixel loop for ta2, and other minor fixes
-rw-r--r--src/library_sdl.js20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js
index af94301a..5ca049fe 100644
--- a/src/library_sdl.js
+++ b/src/library_sdl.js
@@ -255,6 +255,8 @@ mergeInto(LibraryManager.library, {
},
SDL_SetVideoMode: function(width, height, depth, flags) {
+ Module['canvas'].width = width;
+ Module['canvas'].height = height;
return SDL.screen = SDL.makeSurface(width, height, flags);
},
@@ -268,7 +270,7 @@ mergeInto(LibraryManager.library, {
}
surfData.ctx.putImageData(surfData.image, 0, 0);
}
- _SDL_CloseAudio(); // make sure we don't leave our audio timer running
+ if (SDL.audio) _SDL_CloseAudio(); // make sure we don't leave our audio timer running
__shutdownRuntime__();
throw 'SDL_Quit!';
},
@@ -304,11 +306,27 @@ mergeInto(LibraryManager.library, {
if (!surfData.colors) {
var data = surfData.image.data;
var buffer = surfData.buffer;
+#if USE_TYPED_ARRAYS == 2
+ assert(buffer % 4 == 0, 'Invalid buffer offset: ' + buffer);
+ var src = buffer >> 2;
+ var dst = 0;
+ while (dst < num) {
+ var val = HEAP32[src]; // This is optimized. Instead, we could do {{{ makeGetValue('buffer', 'dst', 'i32') }}};
+ data[dst] = val & 0xff;
+ data[dst+1] = (val >> 8) & 0xff;
+ data[dst+2] = (val >> 16) & 0xff;
+ data[dst+3] = 0xff;
+ src++;
+ dst += 4;
+ }
+#else
for (var i = 0; i < num; i++) {
// We may need to correct signs here. Potentially you can hardcode a write of 255 to alpha, say, and
// the compiler may decide to write -1 in the llvm bitcode...
data[i] = {{{ makeGetValue('buffer', 'i', 'i8') + (CORRECT_SIGNS ? '&0xff' : '') }}};
+ if (i % 4 == 3) data[i] = 0xff;
}
+#endif
} else {
var width = Module['canvas'].width;
var height = Module['canvas'].height;