diff options
-rw-r--r-- | src/library.js | 9 | ||||
-rw-r--r-- | src/library_browser.js | 12 | ||||
-rw-r--r-- | src/library_gl.js | 5 | ||||
-rw-r--r-- | src/library_sdl.js | 4 | ||||
-rw-r--r-- | src/preamble.js | 24 | ||||
-rw-r--r-- | tests/files.cpp | 9 | ||||
-rw-r--r-- | tests/runner.py | 7 |
7 files changed, 55 insertions, 15 deletions
diff --git a/src/library.js b/src/library.js index e3b6f964..eaa2332d 100644 --- a/src/library.js +++ b/src/library.js @@ -290,7 +290,14 @@ var Library = { }, open: function(filename) { var stream = _STDIO.filenames[filename]; - if (!stream) return -1; // assert(false, 'No information for file: ' + filename); + if (!stream) { + // Not already cached; try to load it right now + try { + return _STDIO.prepare(filename, readBinary(filename)); + } catch(e) { + return 0; + } + } var info = _STDIO.streams[stream]; info.position = info.error = info.eof = 0; return stream; diff --git a/src/library_browser.js b/src/library_browser.js index 08d206ae..d24854f9 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -2,18 +2,6 @@ mergeInto(Library, { $Browser: { - syncLoad: function(url) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", url, false); - xhr.overrideMimeType('text/plain; charset=x-user-defined'); - xhr.send(null); - var ret = new Uint8Array(xhr.responseText.length); - for (var i = 0; i < xhr.responseText.length; i++) { - ret[i] = xhr.responseText.charCodeAt(i); - } - return ret; - }, - // Given binary data for an image, in a format like PNG or JPG, we convert it // to flat pixel data. We do so using the browser's native code. decodeImage: function(pixels, format) { diff --git a/src/library_gl.js b/src/library_gl.js index 8e4159af..d1c21fa1 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -59,12 +59,17 @@ var LibraryGL = { } Module.ctxGL.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels); }, + + glBindTexture: function(target, texture) { + Module.ctxGL.bindTexture(target, GL.textures[texture]); + }, }; // Simple pass-through functions [[0, 'shadeModel fogi fogfv'], [1, 'clearDepth depthFunc enable disable frontFace cullFace'], [2, 'pixelStorei'], + [3, 'texParameteri texParameterf'], [4, 'viewport clearColor']].forEach(function(data) { var num = data[0]; var names = data[1]; diff --git a/src/library_sdl.js b/src/library_sdl.js index 648f0014..ca477a1b 100644 --- a/src/library_sdl.js +++ b/src/library_sdl.js @@ -57,6 +57,8 @@ mergeInto(Library, { return 0; // success }, + SDL_WasInit: function() { return 0 }, // TODO + SDL_GetVideoInfo: function() { // %struct.SDL_VideoInfo = type { i32, i32, %struct.SDL_PixelFormat*, i32, i32 } - 5 fields of quantum size var ret = _malloc(5*QUANTUM_SIZE); @@ -176,7 +178,7 @@ mergeInto(Library, { IMG_Load: function(filename) { filename = Pointer_stringify(filename); var format = filename.split('.').slice(-1)[0]; - var data = Browser.syncLoad(filename); + var data = readBinary(filename); var raw = Browser.decodeImage(data, format); var surf = SDL.makeSurface(raw.width, raw.height, 0); // XXX Extremely inefficient! diff --git a/src/preamble.js b/src/preamble.js index 44f5c876..6babdfda 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -383,5 +383,29 @@ function intArrayToString(array) { var unSign = {{{ unSign.toString() }}} var reSign = {{{ reSign.toString() }}} +// Use console read if available, otherwise we are in a browser, use an XHR +try { + read; +} catch(e) { + this['read'] = function(url) { + // TODO: use mozResponseArrayBuffer/responseStream/etc. if available + var xhr = new XMLHttpRequest(); + xhr.open("GET", url, false); + xhr.overrideMimeType('text/plain; charset=x-user-defined'); // ask for binary data + xhr.send(null); + return xhr.responseText; + } +} + +function readBinary(filename) { + var stringy = read(filename); + var data = new Array(stringy.length+1); + for (var i = 0; i < stringy.length; i++) { + data[i] = stringy.charCodeAt(i) & 0xff; + } + data[stringy.length] = 0; + return data; +} + // === Body === diff --git a/tests/files.cpp b/tests/files.cpp index 5d915e01..99eddec5 100644 --- a/tests/files.cpp +++ b/tests/files.cpp @@ -46,6 +46,15 @@ int main() fclose(inf); printf("%d : %d,%d,%d,%d,%d\n", num, data2[0], data2[1], data2[2], data2[3], data2[4]); + // Test reading a file that has not been cached + + FILE *other = fopen("test.file", "r"); + assert(other); + char otherData[1000]; + fread(otherData, 1, 10, other); + fclose(other); + printf("other=%s.\n", otherData); + return 0; } diff --git a/tests/runner.py b/tests/runner.py index a2864aac..7bb5f5ab 100644 --- a/tests/runner.py +++ b/tests/runner.py @@ -1650,8 +1650,13 @@ if 'benchmark' not in sys.argv: '''this._STDIO.prepare('somefile.binary', [100, 200, 50, 25, 10, 77, 123]);''' # 200 becomes -56, since signed chars are used in memory ) open(filename, 'w').write(src) + + other = open(os.path.join(self.get_dir(), 'test.file'), 'w') + other.write('some data'); + other.close() + src = open(path_from_root('tests', 'files.cpp'), 'r').read() - self.do_test(src, 'size: 7\ndata: 100,-56,50,25,10,77,123\ntexto\ntexte\n5 : 10,30,20,11,88\n', post_build=post) + self.do_test(src, 'size: 7\ndata: 100,-56,50,25,10,77,123\ntexto\ntexte\n5 : 10,30,20,11,88\nother=some data.\n', post_build=post) ### 'Big' tests |