diff options
author | Alon Zakai <alonzakai@gmail.com> | 2011-05-13 17:40:25 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2011-05-13 17:40:25 -0700 |
commit | d35a0c7758caec727ffe744f7f264d65233b9d49 (patch) | |
tree | 716a8e887d193529c17737a2ce72fab2c8818846 | |
parent | c5a1ea080c39e0d414207db21ee4fcf9106a91db (diff) |
SDL stuff
-rw-r--r-- | src/library_sdl.js | 58 |
1 files changed, 38 insertions, 20 deletions
diff --git a/src/library_sdl.js b/src/library_sdl.js index 310ff68c..629df786 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -2,14 +2,41 @@ // Module.canvas and at least one of Module.context2D, Module.contextGL. mergeInto(Library, { - SDL_INFO: { - width: 320, - height: 240 + _SDL: { + // Given binary data for an image, in a format like PNG or JPG, we convert it + // to flat pixel data. + _decodeImage: function(image) { + var img = new Image(); + var canvas = document.createElement('canvas'); + img.src = imageToBase64(image); + var ctx = canvas.getContext('2d'); + ctx.drawImage(Module.img,0,0); + var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); + return imageData; + }, + + defaults: { + width: 320, + height: 240 + }, + + surfaces: {}, + + makeSurface: function(width, height, depth, flags) { + var surf = _malloc(14*QUANTUM_SIZE); // SDL_Surface has 14 fields of quantum size + __SDL.surfaces[surf] = { + width: width, + height: height, + canvas: Module.canvas, + context: Module.context2D, + surf: surf, + buffer: _malloc(width*height*4) + }; + return surf; + }, }, - SDL_SURFACES: {}, - - SDL_Init__deps: ['SDL_INFO', 'SDL_SURFACES'], + SDL_Init__deps: ['_SDL'], SDL_Init: function(what) { return 0; // success }, @@ -21,8 +48,8 @@ mergeInto(Library, { IHEAP[ret] = 0; // TODO IHEAP[ret+QUANTUM_SIZE] = 0; // TODO IHEAP[ret+QUANTUM_SIZE*2] = 0; // TODO - IHEAP[ret+QUANTUM_SIZE*3] = _SDL_INFO.width; - IHEAP[ret+QUANTUM_SIZE*4] = _SDL_INFO.height; + IHEAP[ret+QUANTUM_SIZE*3] = __SDL.defaults.width; + IHEAP[ret+QUANTUM_SIZE*4] = __SDL.defaults.height; return ret; }, @@ -35,16 +62,7 @@ mergeInto(Library, { }, SDL_SetVideoMode: function(width, height, depth, flags) { - var surf = _malloc(14*QUANTUM_SIZE); // SDL_Surface has 14 fields of quantum size - _SDL_SURFACES[surf] = { - width: width, - height: height, - canvas: Module.canvas, - context: Module.context2D, - surf: surf, - buffer: _malloc(width*height*4) - }; - return surf; + return __SDL.makeSurface(width, height, depth, flags); }, SDL_Quit: function() { @@ -52,7 +70,7 @@ mergeInto(Library, { }, SDL_LockSurface: function(surf) { - var surfData = _SDL_SURFACES[surf]; + var surfData = __SDL.surfaces[surf]; surfData.image = surfData.context.getImageData(0, 0, surfData.width, surfData.height); // Copy pixel data to somewhere accessible to 'C/C++' var num = surfData.image.data.length; @@ -68,7 +86,7 @@ mergeInto(Library, { }, SDL_UnlockSurface: function(surf) { - var surfData = _SDL_SURFACES[surf]; + var surfData = __SDL.surfaces[surf]; // Copy pixel data to image var num = surfData.image.data.length; for (var i = 0; i < num; i++) { |