diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-02-10 10:16:46 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-02-10 10:16:46 -0800 |
commit | 9059287d1e5351a76599633b0a66d69468595313 (patch) | |
tree | 26eaf45ae5c465b20fa8f38d8b6f524e1bcdd53e | |
parent | 8d402d08d773af276f1b3741b88ae70d7e174149 (diff) | |
parent | 8ed1c2529bee4ed63e8ca8c30d4dcaaec6eb41aa (diff) |
Merge pull request #232 from FishingCactus/opengles_wip
Opengles fixes
-rw-r--r-- | src/library.js | 16 | ||||
-rw-r--r-- | src/library_gl.js | 28 | ||||
-rwxr-xr-x | tests/runner.py | 32 |
3 files changed, 59 insertions, 17 deletions
diff --git a/src/library.js b/src/library.js index 86c499a7..7eb26461 100644 --- a/src/library.js +++ b/src/library.js @@ -512,16 +512,24 @@ LibraryManager.library = { if (loc < -2 || loc >= entries) { {{{ makeSetValue('result', '0', '0', 'i8*') }}} } else { - var name, inode; + var name, inode, type; if (loc === -2) { name = '.'; inode = 1; // Really undefined. + type = 4; //DT_DIR } else if (loc === -1) { name = '..'; inode = 1; // Really undefined. + type = 4; //DT_DIR } else { + var object; name = stream.contents[loc]; - inode = stream.object.contents[name].inodeNumber; + object = stream.object.contents[name]; + inode = object.inodeNumber; + type = object.isDevice ? 2 // DT_CHR, character device. + : object.isFolder ? 4 // DT_DIR, directory. + : object.link !== undefined ? 10 // DT_LNK, symbolic link. + : 8; // DT_REG, regular file. } stream.position++; var offsets = ___dirent_struct_layout; @@ -532,10 +540,6 @@ LibraryManager.library = { {{{ makeSetValue('entry + offsets.d_name', 'i', 'name.charCodeAt(i)', 'i8') }}} } {{{ makeSetValue('entry + offsets.d_name', 'i', '0', 'i8') }}} - var type = stream.object.isDevice ? 2 // DT_CHR, character device. - : stream.object.isFolder ? 4 // DT_DIR, directory. - : stream.object.link !== undefined ? 10 // DT_LNK, symbolic link. - : 8; // DT_REG, regular file. {{{ makeSetValue('entry', 'offsets.d_type', 'type', 'i8') }}} {{{ makeSetValue('result', '0', 'entry', 'i8*') }}} } diff --git a/src/library_gl.js b/src/library_gl.js index 84c49d83..1d5168fb 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -11,19 +11,21 @@ var LibraryGL = { if (!(name in this._hashtables)) { this._hashtables[name] = { table: {}, - counter: 0, + counter: 1, add: function(obj) { var id = this.counter++; this.table[id] = obj; return id; }, get: function(id) { + if( id == 0 ) return null; #if ASSERTIONS assert(id < this.counter, "Invalid id " + id + " for the hashtable " + name); #endif return this.table[id]; }, remove: function(id) { + if( id == 0 ) return; #if ASSERTIONS assert(id < this.counter, "Invalid id " + id + " for the hashtable " + name); #endif @@ -49,13 +51,7 @@ var LibraryGL = { }, glGetIntegerv: function(name_, p) { - switch(name_) { - case Module.ctx.MAX_TEXTURE_SIZE: - {{{ makeSetValue('p', '0', 'Module.ctx.getParameter(name_)', 'i32') }}}; - break; - default: - throw 'Failure: Invalid glGetIntegerv value: ' + name_; - } + {{{ makeSetValue('p', '0', 'Module.ctx.getParameter(name_)', 'i32') }}}; }, glGenTextures__deps: ['$GL'], @@ -308,6 +304,16 @@ var LibraryGL = { {{{ makeSetValue('length', 'i', 'log.length', 'i32') }}} } }, + + glGetShaderiv_deps: ['$GL'], + glGetShaderiv : function(shader, pname, p) { + {{{ makeSetValue('p', '0', 'Module.ctx.getShaderParameter(GL.hashtable("shader").get(shader),pname)', 'i32') }}}; + }, + + glGetProgramiv_deps: ['$GL'], + glGetProgramiv : function(program, pname, p) { + {{{ makeSetValue('p', '0', 'Module.ctx.getProgramParameter(GL.hashtable("program").get(program),pname)', 'i32') }}}; + }, glCreateProgram_deps: ['$GL'], glCreateProgram: function() { @@ -350,9 +356,9 @@ var LibraryGL = { Module.ctx.bindAttribLocation(GL.hashtable("program").get(program), index, name); }, - glBindFrameBuffer_deps: ['$GL'], - glBindFrameBuffer: function(target, framebuffer) { - Module.ctx.bindFrameBuffer(target, GL.hashtable("framebuffer").get(framebuffer)); + glBindFramebuffer_deps: ['$GL'], + glBindFramebuffer: function(target, framebuffer) { + Module.ctx.bindFramebuffer(target, GL.hashtable("framebuffer").get(framebuffer)); }, glGenFramebuffers_deps: ['$GL'], diff --git a/tests/runner.py b/tests/runner.py index ecd5082f..fd447863 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -3847,6 +3847,38 @@ def process(filename): ''' self.do_run(src, "1 2 3") + def test_readdir(self): + + add_pre_run = ''' +def process(filename): + src = open(filename, 'r').read().replace( + '// {{PRE_RUN_ADDITIONS}}', + "FS.createFolder('', 'test', true, true);\\nFS.createLazyFile( 'test', 'some_file', 'http://localhost/some_file', true, false);\\nFS.createFolder('test', 'some_directory', true, true);" + ) + open(filename, 'w').write(src) + ''' + + src = ''' + #include <dirent.h> + #include <stdio.h> + + int main() + { + DIR * dir; + dirent * entity; + + dir = opendir( "test" ); + + while( ( entity = readdir( dir ) ) ) + { + printf( "%s is a %s\\n", entity->d_name, entity->d_type & DT_DIR ? "directory" : "file" ); + } + + return 0; + } + + ''' + self.do_run(src, ". is a directory\n.. is a directory\nsome_file is a file\nsome_directory is a directory", post_build=add_pre_run) def test_fs_base(self): Settings.INCLUDE_FULL_LIBRARY = 1 |