diff options
author | Charlie Birks <admin@daftgames.net> | 2014-06-05 15:54:42 +0100 |
---|---|---|
committer | Charlie Birks <admin@daftgames.net> | 2014-06-05 15:54:42 +0100 |
commit | 20b61c1a6d0c8e822e78f10bdd0936d5c4061200 (patch) | |
tree | 30c9634491da2f8c81bceffebca75cd086e6d087 | |
parent | 3b6cd16ed015e90fa54127a903343e7bf65c86ce (diff) |
add emscripten_get_preloaded_image_data
-rw-r--r-- | src/library_browser.js | 29 | ||||
-rw-r--r-- | system/include/emscripten/emscripten.h | 16 |
2 files changed, 45 insertions, 0 deletions
diff --git a/src/library_browser.js b/src/library_browser.js index 4ef7c577..620fd828 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -1175,6 +1175,35 @@ mergeInto(LibraryManager.library, { var info = Browser.workers[id]; if (!info) return -1; return info.awaited; + }, + + emscripten_get_preloaded_image_data: function(path, w, h) { + if (typeof path == "number") { + path = Pointer_stringify(path); + } + + var canvas = Module["preloadedImages"][path]; + if (canvas) { + var ctx = canvas.getContext("2d"); + var image = ctx.getImageData(0, 0, canvas.width, canvas.height); + var buf = _malloc(canvas.width * canvas.height * 4); + + HEAPU8.set(image.data, buf); + + {{{ makeSetValue('w', '0', 'canvas.width', 'i32') }}}; + {{{ makeSetValue('h', '0', 'canvas.height', 'i32') }}}; + return buf; + } + }, + + emscripten_get_preloaded_image_data_from_FILE__deps: ['emscripten_get_preloaded_image_data'], + emscripten_get_preloaded_image_data_from_FILE: function(file, w, h) { + var stream = FS.getStreamFromPtr(file); + if(stream) { + return _emscripten_get_preloaded_image_data(stream.path, w, h); + } + + return 0; } }); diff --git a/system/include/emscripten/emscripten.h b/system/include/emscripten/emscripten.h index 6e1c00d5..56f2e048 100644 --- a/system/include/emscripten/emscripten.h +++ b/system/include/emscripten/emscripten.h @@ -515,6 +515,22 @@ int emscripten_get_compiler_setting(const char *name); */ void emscripten_debugger(); +/* + * Get preloaded image data and the size of the image. + * + * Returns pointer to loaded image or NULL. + * Pointer should be free()'d + */ +char *emscripten_get_preloaded_image_data(char *path, int *w, int *h); + +/* + * Get preloaded image data from a c FILE *. + * + * Returns pointer to loaded image or NULL. + * Pointer should be free()'d + */ +char *emscripten_get_preloaded_image_data_from_FILE(FILE *file, int *w, int *h); + /* ===================================== */ /* Internal APIs. Be careful with these. */ |