aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-02-10 10:16:46 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-02-10 10:16:46 -0800
commit9059287d1e5351a76599633b0a66d69468595313 (patch)
tree26eaf45ae5c465b20fa8f38d8b6f524e1bcdd53e
parent8d402d08d773af276f1b3741b88ae70d7e174149 (diff)
parent8ed1c2529bee4ed63e8ca8c30d4dcaaec6eb41aa (diff)
Merge pull request #232 from FishingCactus/opengles_wip
Opengles fixes
-rw-r--r--src/library.js16
-rw-r--r--src/library_gl.js28
-rwxr-xr-xtests/runner.py32
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