diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-01-20 16:03:20 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-01-20 16:03:20 -0800 |
commit | 98c1cf33a6e53c54e16035378ff8d0ff5a782461 (patch) | |
tree | 692444e950a2ad98076d28e2100b454e6c190e7e | |
parent | b251f29a2efdc1ceaf6490d0bc3cf8bca0ae5589 (diff) |
refactor getProcAddress
-rwxr-xr-x | emscripten.py | 2 | ||||
-rw-r--r-- | src/library_gl.js | 190 | ||||
-rw-r--r-- | src/modules.js | 7 |
3 files changed, 129 insertions, 70 deletions
diff --git a/emscripten.py b/emscripten.py index 9c3fedef..dd6a3ebd 100755 --- a/emscripten.py +++ b/emscripten.py @@ -270,7 +270,7 @@ def emscript(infile, settings, outfile, libraries=[]): indexing = forwarded_json['Functions']['indexedFunctions'] def indexize(js): - return re.sub(r'{{{ FI_([\w\d_$]+) }}}', lambda m: str(indexing[m.groups(0)[0]]), js) + return re.sub(r'"{{ FI_([\w\d_$]+) }}"', lambda m: str(indexing.get(m.groups(0)[0]) or 0), js) blockaddrs = forwarded_json['Functions']['blockAddresses'] def blockaddrsize(js): diff --git a/src/library_gl.js b/src/library_gl.js index 420e8add..23be9b7a 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -364,6 +364,7 @@ var LibraryGL = { } }, + glCompressedTexImage2D__sig: 'viiiiiiii', glCompressedTexImage2D: function(target, level, internalFormat, width, height, border, imageSize, data) { assert(GL.compressionExt); if (data) { @@ -374,6 +375,7 @@ var LibraryGL = { Module.ctx['compressedTexImage2D'](target, level, internalFormat, width, height, border, data); }, + glCompressedTexSubImage2D__sig: 'viiiiiiiii', glCompressedTexSubImage2D: function(target, level, xoffset, yoffset, width, height, format, imageSize, data) { assert(GL.compressionExt); if (data) { @@ -429,6 +431,7 @@ var LibraryGL = { return Module.ctx.isTexture(fb); }, + glGenBuffers__sig: 'vii', glGenBuffers: function(n, buffers) { for (var i = 0; i < n; i++) { var id = GL.getNewId(GL.buffers); @@ -437,6 +440,7 @@ var LibraryGL = { } }, + glDeleteBuffers__sig: 'vii', glDeleteBuffers: function(n, buffers) { for (var i = 0; i < n; i++) { var id = {{{ makeGetValue('buffers', 'i*4', 'i32') }}}; @@ -449,10 +453,12 @@ var LibraryGL = { {{{ makeSetValue('data', '0', 'Module.ctx.getBufferParameter(target, value)', 'i32') }}}; }, + glBufferData__sig: 'viiii', glBufferData: function(target, size, data, usage) { Module.ctx.bufferData(target, HEAPU8.subarray(data, data+size), usage); }, + glBufferSubData__sig: 'viiii', glBufferSubData: function(target, offset, size, data) { Module.ctx.bufferSubData(target, offset, HEAPU8.subarray(data, data+size)); }, @@ -465,6 +471,7 @@ var LibraryGL = { return Module.ctx.isBuffer(fb); }, + glGenRenderbuffers__sig: 'vii', glGenRenderbuffers: function(n, renderbuffers) { for (var i = 0; i < n; i++) { var id = GL.getNewId(GL.renderbuffers); @@ -473,6 +480,7 @@ var LibraryGL = { } }, + glDeleteRenderbuffers__sig: 'vii', glDeleteRenderbuffers: function(n, renderbuffers) { for (var i = 0; i < n; i++) { var id = {{{ makeGetValue('renderbuffers', 'i*4', 'i32') }}}; @@ -481,6 +489,7 @@ var LibraryGL = { } }, + glBindRenderbuffer__sig: 'vii', glBindRenderbuffer: function(target, renderbuffer) { Module.ctx.bindRenderbuffer(target, renderbuffer ? GL.renderbuffers[renderbuffer] : null); }, @@ -519,6 +528,7 @@ var LibraryGL = { } }, + glGetUniformLocation__sig: 'iii', glGetUniformLocation: function(program, name) { name = Pointer_stringify(name); var ptable = GL.uniformTable[program]; @@ -559,6 +569,7 @@ var LibraryGL = { {{{ makeSetValue('pointer', '0', 'Module.ctx.getVertexAttribOffset(index, pname)', 'i32') }}}; }, + glGetActiveUniform__sig: 'viiiiiii', glGetActiveUniform: function(program, index, bufSize, length, size, type, name) { program = GL.programs[program]; var info = Module.ctx.getActiveUniform(program, index); @@ -577,52 +588,62 @@ var LibraryGL = { } }, + glUniform1f__sig: 'vid', glUniform1f: function(location, v0) { location = GL.uniforms[location]; Module.ctx.uniform1f(location, v0); }, + glUniform2f__sig: 'vidd', glUniform2f: function(location, v0, v1) { location = GL.uniforms[location]; Module.ctx.uniform2f(location, v0, v1); }, + glUniform3f__sig: 'viddd', glUniform3f: function(location, v0, v1, v2) { location = GL.uniforms[location]; Module.ctx.uniform3f(location, v0, v1, v2); }, + glUniform4f__sig: 'vidddd', glUniform4f: function(location, v0, v1, v2, v3) { location = GL.uniforms[location]; Module.ctx.uniform4f(location, v0, v1, v2, v3); }, + glUniform1i__sig: 'vii', glUniform1i: function(location, v0) { location = GL.uniforms[location]; Module.ctx.uniform1i(location, v0); }, + glUniform2i__sig: 'viii', glUniform2i: function(location, v0, v1) { location = GL.uniforms[location]; Module.ctx.uniform2i(location, v0, v1); }, + glUniform3i__sig: 'viiii', glUniform3i: function(location, v0, v1, v2) { location = GL.uniforms[location]; Module.ctx.uniform3i(location, v0, v1, v2); }, + glUniform4i__sig: 'viiiii', glUniform4i: function(location, v0, v1, v2, v3) { location = GL.uniforms[location]; Module.ctx.uniform4i(location, v0, v1, v2, v3); }, + glUniform1iv__sig: 'viii', glUniform1iv: function(location, count, value) { location = GL.uniforms[location]; value = {{{ makeHEAPView('32', 'value', 'value+count*4') }}}; Module.ctx.uniform1iv(location, value); }, + glUniform2iv__sig: 'viii', glUniform2iv: function(location, count, value) { location = GL.uniforms[location]; count *= 2; @@ -630,6 +651,7 @@ var LibraryGL = { Module.ctx.uniform2iv(location, value); }, + glUniform3iv__sig: 'viii', glUniform3iv: function(location, count, value) { location = GL.uniforms[location]; count *= 3; @@ -637,6 +659,7 @@ var LibraryGL = { Module.ctx.uniform3iv(location, value); }, + glUniform4iv__sig: 'viii', glUniform4iv: function(location, count, value) { location = GL.uniforms[location]; count *= 4; @@ -644,12 +667,14 @@ var LibraryGL = { Module.ctx.uniform4iv(location, value); }, + glUniform1fv__sig: 'viii', glUniform1fv: function(location, count, value) { location = GL.uniforms[location]; value = {{{ makeHEAPView('F32', 'value', 'value+count*4') }}}; Module.ctx.uniform1fv(location, value); }, + glUniform2fv__sig: 'viii', glUniform2fv: function(location, count, value) { location = GL.uniforms[location]; count *= 2; @@ -657,6 +682,7 @@ var LibraryGL = { Module.ctx.uniform2fv(location, value); }, + glUniform3fv__sig: 'viii', glUniform3fv: function(location, count, value) { location = GL.uniforms[location]; count *= 3; @@ -664,6 +690,7 @@ var LibraryGL = { Module.ctx.uniform3fv(location, value); }, + glUniform4fv__sig: 'viii', glUniform4fv: function(location, count, value) { location = GL.uniforms[location]; count *= 4; @@ -692,6 +719,7 @@ var LibraryGL = { Module.ctx.uniformMatrix4fv(location, transpose, value); }, + glBindBuffer__sig: 'vii', glBindBuffer: function(target, buffer) { Module.ctx.bindBuffer(target, buffer ? GL.buffers[buffer] : null); }, @@ -740,6 +768,7 @@ var LibraryGL = { } }, + glCreateShader__sig: 'ii', glCreateShader: function(shaderType) { var id = GL.getNewId(GL.shaders); GL.shaders[id] = Module.ctx.createShader(shaderType); @@ -768,6 +797,7 @@ var LibraryGL = { } }, + glShaderSource__sig: 'viiii', glShaderSource: function(shader, count, string, length) { var source = GL.getSource(shader, count, string, length); Module.ctx.shaderSource(GL.shaders[shader], source); @@ -782,6 +812,7 @@ var LibraryGL = { } }, + glCompileShader__sig: 'vi', glCompileShader: function(shader) { Module.ctx.compileShader(GL.shaders[shader]); }, @@ -807,6 +838,7 @@ var LibraryGL = { } }, + glGetProgramiv__sig: 'viii', glGetProgramiv : function(program, pname, p) { if (pname == 0x8B84) { // GL_INFO_LOG_LENGTH {{{ makeSetValue('p', '0', 'Module.ctx.getProgramInfoLog(GL.programs[program]).length + 1', 'i32') }}}; @@ -823,6 +855,7 @@ var LibraryGL = { return Module.ctx.isShader(fb); }, + glCreateProgram__sig: 'i', glCreateProgram: function() { var id = GL.getNewId(GL.programs); GL.programs[id] = Module.ctx.createProgram(); @@ -835,6 +868,7 @@ var LibraryGL = { GL.uniformTable[program] = null; }, + glAttachShader__sig: 'vii', glAttachShader: function(program, shader) { Module.ctx.attachShader(GL.programs[program], GL.shaders[shader]); @@ -847,6 +881,7 @@ var LibraryGL = { {{{ makeSetValue('precision', '0', 'result.precision', 'i32') }}}; }, + glLinkProgram__sig: 'vi', glLinkProgram: function(program) { Module.ctx.linkProgram(GL.programs[program]); GL.uniformTable[program] = {}; // uniforms no longer keep the same names after linking @@ -865,6 +900,7 @@ var LibraryGL = { } }, + glUseProgram__sig: 'vi', glUseProgram: function(program) { Module.ctx.useProgram(program ? GL.programs[program] : null); }, @@ -881,15 +917,18 @@ var LibraryGL = { return Module.ctx.isProgram(fb); }, + glBindAttribLocation__sig: 'viii', glBindAttribLocation: function(program, index, name) { name = Pointer_stringify(name); Module.ctx.bindAttribLocation(GL.programs[program], index, name); }, + glBindFramebuffer__sig: 'vii', glBindFramebuffer: function(target, framebuffer) { Module.ctx.bindFramebuffer(target, framebuffer ? GL.framebuffers[framebuffer] : null); }, + glGenFramebuffers__sig: 'vii', glGenFramebuffers: function(n, ids) { for (var i = 0; i < n; ++i) { var id = GL.getNewId(GL.framebuffers); @@ -898,6 +937,7 @@ var LibraryGL = { } }, + glDeleteFramebuffers__sig: 'vii', glDeleteFramebuffers: function(n, framebuffers) { for (var i = 0; i < n; ++i) { var id = {{{ makeGetValue('framebuffers', 'i*4', 'i32') }}}; @@ -906,21 +946,25 @@ var LibraryGL = { } }, + glFramebufferRenderbuffer__sig: 'viiii', glFramebufferRenderbuffer: function(target, attachment, renderbuffertarget, renderbuffer) { Module.ctx.framebufferRenderbuffer(target, attachment, renderbuffertarget, GL.renderbuffers[renderbuffer]); }, + glFramebufferTexture2D__sig: 'viiiii', glFramebufferTexture2D: function(target, attachment, textarget, texture, level) { Module.ctx.framebufferTexture2D(target, attachment, textarget, GL.textures[texture], level); }, + glGetFramebufferAttachmentParameteriv__sig: 'viiii', glGetFramebufferAttachmentParameteriv: function(target, attachment, pname, params) { var result = Module.ctx.getFramebufferAttachmentParameter(target, attachment, pname); {{{ makeSetValue('params', '0', 'params', 'i32') }}}; }, + glIsFramebuffer__sig: 'ii', glIsFramebuffer: function(framebuffer) { var fb = GL.framebuffers[framebuffer]; if (typeof(fb) == 'undefined') { @@ -1275,77 +1319,71 @@ var LibraryGL = { getProcAddress: function(name) { name = name.replace('EXT', '').replace('ARB', ''); // Do the translation carefully because of closure - var sig = '', func; + var ret = 0; switch (name) { - case 'glCreateShaderObject': case 'glCreateShader': func = _glCreateShader; sig = 'ii'; break; - case 'glCreateProgramObject': case 'glCreateProgram': func = _glCreateProgram; sig = 'ii'; break; - case 'glAttachObject': case 'glAttachShader': func = _glAttachShader; sig = 'vi'; break; - case 'glUseProgramObject': case 'glUseProgram': func = _glUseProgram; sig = 'vi'; break; - case 'glDeleteObject': func = _glDeleteObject; sig = 'vi'; break; - case 'glGetObjectParameteriv': func = _glGetObjectParameteriv; sig = 'viii'; break; - case 'glGetInfoLog': func = _glGetInfoLog; sig = 'viiii'; break; - case 'glBindProgram': func = _glBindProgram; sig = 'vii'; break; - case 'glDrawRangeElements': func = _glDrawRangeElements; sig = 'viiiiii'; break; - case 'glShaderSource': func = _glShaderSource; sig = 'viiii'; break; - case 'glCompileShader': func = _glCompileShader; sig = 'vi'; break; - case 'glLinkProgram': func = _glLinkProgram; sig = 'vi'; break; - case 'glGetUniformLocation': func = _glGetUniformLocation; sig = 'iii'; break; - case 'glUniform1f': func = _glUniform1f; sig = 'vid'; break; - case 'glUniform2f': func = _glUniform2f; sig = 'vidd'; break; - case 'glUniform3f': func = _glUniform3f; sig = 'viddd'; break; - case 'glUniform4f': func = _glUniform4f; sig = 'vidddd'; break; - case 'glUniform1fv': func = _glUniform1fv; sig = 'viii'; break; - case 'glUniform2fv': func = _glUniform2fv; sig = 'viii'; break; - case 'glUniform3fv': func = _glUniform3fv; sig = 'viii'; break; - case 'glUniform4fv': func = _glUniform4fv; sig = 'viii'; break; - case 'glUniform1i': func = _glUniform1i; sig = 'vii'; break; - case 'glUniform2i': func = _glUniform2i; sig = 'viii'; break; - case 'glUniform3i': func = _glUniform3i; sig = 'viiii'; break; - case 'glUniform4i': func = _glUniform4i; sig = 'viiii'; break; - case 'glUniform1iv': func = _glUniform1iv; sig = 'viii'; break; - case 'glUniform2iv': func = _glUniform2iv; sig = 'viii'; break; - case 'glUniform3iv': func = _glUniform3iv; sig = 'viii'; break; - case 'glUniform4iv': func = _glUniform4iv; sig = 'viii'; break; - case 'glBindAttribLocation': func = _glBindAttribLocation; sig = 'viii'; break; - case 'glGetActiveUniform': func = _glGetActiveUniform; sig = 'viiiiiii'; break; - case 'glGenBuffers': func = _glGenBuffers; sig = 'iii'; break; - case 'glBindBuffer': func = _glBindBuffer; sig = 'vii'; break; - case 'glBufferData': func = _glBufferData; sig = 'viiii'; break; - case 'glBufferSubData': func = _glBufferSubData; sig = 'viiii'; break; - case 'glDeleteBuffers': func = _glDeleteBuffers; sig = 'vii'; break; - case 'glActiveTexture': func = _glActiveTexture; sig = 'vi'; break; - case 'glClientActiveTexture': func = _glClientActiveTexture; sig = 'vi'; break; - case 'glGetProgramiv': func = _glGetProgramiv; sig = 'viii'; break; - case 'glEnableVertexAttribArray': func = _glEnableVertexAttribArray; sig = 'vi'; break; - case 'glDisableVertexAttribArray': func = _glDisableVertexAttribArray; sig = 'vi'; break; - case 'glVertexAttribPointer': func = _glVertexAttribPointer; sig = 'viiiiii'; break; - case 'glBindRenderbuffer': func = _glBindRenderbuffer; sig = 'vii'; break; - case 'glDeleteRenderbuffers': func = _glDeleteRenderbuffers; sig = 'vii'; break; - case 'glGenRenderbuffers': func = _glGenRenderbuffers; sig = 'vii'; break; - case 'glCompressedTexImage2D': func = _glCompressedTexImage2D; sig = 'viiiiiiii'; break; - case 'glCompressedTexSubImage2D': func = _glCompressedTexSubImage2D; sig = 'viiiiiiiii'; break; - case 'glBindFramebuffer': func = _glBindFramebuffer; sig = 'vii'; break; - case 'glGenFramebuffers': func = _glGenFramebuffers; sig = 'vii'; break; - case 'glDeleteFramebuffers': func = _glDeleteFramebuffers; sig = 'vii'; break; - case 'glFramebufferRenderbuffer': func = _glFramebufferRenderbuffer; sig = 'viiii'; break; - case 'glFramebufferTexture2D': func = _glFramebufferTexture2D; sig = 'viiiii'; break; - case 'glGetFramebufferAttachmentParameteriv': func = _glGetFramebufferAttachmentParameteriv; sig = 'viiii'; break; - case 'glIsFramebuffer': func = _glIsFramebuffer; sig = 'ii'; break; - case 'glCheckFramebufferStatus': func = _glCheckFramebufferStatus; sig = 'ii'; break; - case 'glRenderbufferStorage': func = _glRenderbufferStorage; sig = 'viiii'; break; - default: { - Module.printErr('WARNING: getProcAddress failed for ' + name); - func = function() { - Module.printErr('WARNING: empty replacement for ' + name + ' called, no-op'); - return 0; - }; - sig = 'v'; - } + case 'glCreateShaderObject': case 'glCreateShader': ret = {{{ Functions.getIndex('_glCreateShader', true) }}}; break; + case 'glCreateProgramObject': case 'glCreateProgram': ret = {{{ Functions.getIndex('_glCreateProgram', true) }}}; break; + case 'glAttachObject': case 'glAttachShader': ret = {{{ Functions.getIndex('_glAttachShader', true) }}}; break; + case 'glUseProgramObject': case 'glUseProgram': ret = {{{ Functions.getIndex('_glUseProgram', true) }}}; break; + case 'glDeleteObject': ret = {{{ Functions.getIndex('_glDeleteObject', true) }}}; break; + case 'glGetObjectParameteriv': ret = {{{ Functions.getIndex('_glGetObjectParameteriv', true) }}}; break; + case 'glGetInfoLog': ret = {{{ Functions.getIndex('_glGetInfoLog', true) }}}; break; + case 'glBindProgram': ret = {{{ Functions.getIndex('_glBindProgram', true) }}}; break; + case 'glDrawRangeElements': ret = {{{ Functions.getIndex('_glDrawRangeElements', true) }}}; break; + case 'glShaderSource': ret = {{{ Functions.getIndex('_glShaderSource', true) }}}; break; + case 'glCompileShader': ret = {{{ Functions.getIndex('_glCompileShader', true) }}}; break; + case 'glLinkProgram': ret = {{{ Functions.getIndex('_glLinkProgram', true) }}}; break; + case 'glGetUniformLocation': ret = {{{ Functions.getIndex('_glGetUniformLocation', true) }}}; break; + case 'glUniform1f': ret = {{{ Functions.getIndex('_glUniform1f', true) }}}; break; + case 'glUniform2f': ret = {{{ Functions.getIndex('_glUniform2f', true) }}}; break; + case 'glUniform3f': ret = {{{ Functions.getIndex('_glUniform3f', true) }}}; break; + case 'glUniform4f': ret = {{{ Functions.getIndex('_glUniform4f', true) }}}; break; + case 'glUniform1fv': ret = {{{ Functions.getIndex('_glUniform1fv', true) }}}; break; + case 'glUniform2fv': ret = {{{ Functions.getIndex('_glUniform2fv', true) }}}; break; + case 'glUniform3fv': ret = {{{ Functions.getIndex('_glUniform3fv', true) }}}; break; + case 'glUniform4fv': ret = {{{ Functions.getIndex('_glUniform4fv', true) }}}; break; + case 'glUniform1i': ret = {{{ Functions.getIndex('_glUniform1i', true) }}}; break; + case 'glUniform2i': ret = {{{ Functions.getIndex('_glUniform2i', true) }}}; break; + case 'glUniform3i': ret = {{{ Functions.getIndex('_glUniform3i', true) }}}; break; + case 'glUniform4i': ret = {{{ Functions.getIndex('_glUniform4i', true) }}}; break; + case 'glUniform1iv': ret = {{{ Functions.getIndex('_glUniform1iv', true) }}}; break; + case 'glUniform2iv': ret = {{{ Functions.getIndex('_glUniform2iv', true) }}}; break; + case 'glUniform3iv': ret = {{{ Functions.getIndex('_glUniform3iv', true) }}}; break; + case 'glUniform4iv': ret = {{{ Functions.getIndex('_glUniform4iv', true) }}}; break; + case 'glBindAttribLocation': ret = {{{ Functions.getIndex('_glBindAttribLocation', true) }}}; break; + case 'glGetActiveUniform': ret = {{{ Functions.getIndex('_glGetActiveUniform', true) }}}; break; + case 'glGenBuffers': ret = {{{ Functions.getIndex('_glGenBuffers', true) }}}; break; + case 'glBindBuffer': ret = {{{ Functions.getIndex('_glBindBuffer', true) }}}; break; + case 'glBufferData': ret = {{{ Functions.getIndex('_glBufferData', true) }}}; break; + case 'glBufferSubData': ret = {{{ Functions.getIndex('_glBufferSubData', true) }}}; break; + case 'glDeleteBuffers': ret = {{{ Functions.getIndex('_glDeleteBuffers', true) }}}; break; + case 'glActiveTexture': ret = {{{ Functions.getIndex('_glActiveTexture', true) }}}; break; + case 'glClientActiveTexture': ret = {{{ Functions.getIndex('_glClientActiveTexture', true) }}}; break; + case 'glGetProgramiv': ret = {{{ Functions.getIndex('_glGetProgramiv', true) }}}; break; + case 'glEnableVertexAttribArray': ret = {{{ Functions.getIndex('_glEnableVertexAttribArray', true) }}}; break; + case 'glDisableVertexAttribArray': ret = {{{ Functions.getIndex('_glDisableVertexAttribArray', true) }}}; break; + case 'glVertexAttribPointer': ret = {{{ Functions.getIndex('_glVertexAttribPointer', true) }}}; break; + case 'glBindRenderbuffer': ret = {{{ Functions.getIndex('_glBindRenderbuffer', true) }}}; break; + case 'glDeleteRenderbuffers': ret = {{{ Functions.getIndex('_glDeleteRenderbuffers', true) }}}; break; + case 'glGenRenderbuffers': ret = {{{ Functions.getIndex('_glGenRenderbuffers', true) }}}; break; + case 'glCompressedTexImage2D': ret = {{{ Functions.getIndex('_glCompressedTexImage2D', true) }}}; break; + case 'glCompressedTexSubImage2D': ret = {{{ Functions.getIndex('_glCompressedTexSubImage2D', true) }}}; break; + case 'glBindFramebuffer': ret = {{{ Functions.getIndex('_glBindFramebuffer', true) }}}; break; + case 'glGenFramebuffers': ret = {{{ Functions.getIndex('_glGenFramebuffers', true) }}}; break; + case 'glDeleteFramebuffers': ret = {{{ Functions.getIndex('_glDeleteFramebuffers', true) }}}; break; + case 'glFramebufferRenderbuffer': ret = {{{ Functions.getIndex('_glFramebufferRenderbuffer', true) }}}; break; + case 'glFramebufferTexture2D': ret = {{{ Functions.getIndex('_glFramebufferTexture2D', true) }}}; break; + case 'glGetFramebufferAttachmentParameteriv': ret = {{{ Functions.getIndex('_glGetFramebufferAttachmentParameteriv', true) }}}; break; + case 'glIsFramebuffer': ret = {{{ Functions.getIndex('_glIsFramebuffer', true) }}}; break; + case 'glCheckFramebufferStatus': ret = {{{ Functions.getIndex('_glCheckFramebufferStatus', true) }}}; break; + case 'glRenderbufferStorage': ret = {{{ Functions.getIndex('_glRenderbufferStorage', true) }}}; break; } - return Runtime.addFunction(func, sig); + if (!ret) Module.printErr('WARNING: getProcAddress failed for ' + name); + return ret; } }, + glDeleteObject__sig: 'vi', glDeleteObject: function(id) { if (GL.programs[id]) { _glDeleteProgram(id); @@ -1356,6 +1394,7 @@ var LibraryGL = { } }, + glGetObjectParameteriv__sig: 'viii', glGetObjectParameteriv: function(id, type, result) { if (GL.programs[id]) { if (type == 0x8B84) { // GL_OBJECT_INFO_LOG_LENGTH_ARB @@ -1374,6 +1413,7 @@ var LibraryGL = { } }, + glGetInfoLog__sig: 'viiii', glGetInfoLog: function(id, maxLength, length, infoLog) { if (GL.programs[id]) { _glGetProgramInfoLog(id, maxLength, length, infoLog); @@ -1384,6 +1424,7 @@ var LibraryGL = { } }, + glBindProgram__sig: 'vii', glBindProgram: function(type, id) { assert(id == 0); }, @@ -2246,6 +2287,7 @@ var LibraryGL = { // Additional non-GLES rendering calls + glDrawRangeElements__sig: 'viiiiii', glDrawRangeElements: function(mode, start, end, count, type, indices) { _glDrawElements(mode, count, type, indices, start, end); }, @@ -2293,6 +2335,7 @@ var LibraryGL = { GL.immediate.setClientAttribute(GL.immediate.COLOR, size, type, stride, pointer); }, + glClientActiveTexture__sig: 'vi', glClientActiveTexture: function(texture) { GL.immediate.clientActiveTexture = texture - 0x84C0; // GL_TEXTURE0 }, @@ -2476,7 +2519,15 @@ var LibraryGL = { gluOrtho2D: function(left, right, bottom, top) { _glOrtho(left, right, bottom, top, -1, 1); - } + }, + + // signatures of simple pass-through functions, see later + glActiveTexture__sig: 'vi', + glEnableVertexAttribArray__sig: 'vi', + glDisableVertexAttribArray__sig: 'vi', + glVertexAttribPointer__sig: 'viiiiii', + glCheckFramebufferStatus__sig: 'ii', + glRenderbufferStorage__sig: 'viiii', }; // Simple pass-through functions. Starred ones have return values. [X] ones have X in the C name but not in the JS name @@ -2516,11 +2567,14 @@ autoAddDeps(LibraryGL, '$GL'); LibraryGL.$GLEmulation__deps = LibraryGL.$GLEmulation__deps.slice(0); // the __deps object is shared var glFuncs = []; for (var item in LibraryGL) { - if (item != '$GLEmulation' && item.substr(-6) != '__deps' && item.substr(-9) != '__postset' && item.substr(0, 2) == 'gl') { + if (item != '$GLEmulation' && item.substr(-6) != '__deps' && item.substr(-9) != '__postset' && item.substr(-5) != '__sig' && item.substr(0, 2) == 'gl') { glFuncs.push(item); } } LibraryGL.$GLEmulation__deps = LibraryGL.$GLEmulation__deps.concat(glFuncs); +LibraryGL.$GLEmulation__deps.push(function() { + for (var func in Functions.getIndex.tentative) Functions.getIndex(func); +}); mergeInto(LibraryManager.library, LibraryGL); diff --git a/src/modules.js b/src/modules.js index d4d86510..325730dd 100644 --- a/src/modules.js +++ b/src/modules.js @@ -240,12 +240,17 @@ var Functions = { // Mark a function as needing indexing. Python will coordinate them all getIndex: function(ident, doNotCreate) { + if (doNotCreate && !(ident in this.indexedFunctions)) { + if (!Functions.getIndex.tentative) Functions.getIndex.tentative = {}; // only used by GL emulation; TODO: generalize when needed + Functions.getIndex.tentative[ident] = 0; + } if (phase != 'post' && singlePhase) { if (!doNotCreate) this.indexedFunctions[ident] = 0; // tell python we need this indexized - return '{{{ FI_' + ident + ' }}}'; // something python will replace later + return '"{{ FI_' + ident + ' }}"'; // something python will replace later } else { var ret = this.indexedFunctions[ident]; if (!ret) { + if (doNotCreate) return '0'; ret = this.nextIndex; this.nextIndex += 2; // Need to have indexes be even numbers, see |polymorph| test this.indexedFunctions[ident] = ret; |