aboutsummaryrefslogtreecommitdiff
path: root/src/library_gl.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-07-16 13:41:37 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-07-16 13:41:37 -0700
commitb0d268d121d8868be33d8633b09499b34a4db45f (patch)
treed67eaf4f5e200b5b5f57099c46a1413d43cbd287 /src/library_gl.js
parent6b730836aa53f6b4896f24dd8a4b456669ae4f1a (diff)
parent475e72dc5539d9c59fc267927441a502c14a178f (diff)
Merge branch 'incoming'
Diffstat (limited to 'src/library_gl.js')
-rw-r--r--src/library_gl.js182
1 files changed, 100 insertions, 82 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 1fa0cc9c..959773bc 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -122,14 +122,6 @@ var LibraryGL = {
}
},
- // Linear lookup in one of the tables (buffers, programs, etc.). TODO: consider using a weakmap to make this faster, if it matters
- scan: function(table, object) {
- for (var item in table) {
- if (table[item] == object) return item;
- }
- return 0;
- },
-
// Find a token in a shader source string
findToken: function(source, token) {
function isIdentChar(ch) {
@@ -402,15 +394,15 @@ var LibraryGL = {
{{{ makeSetValue('p', 'i*4', 'result[i]', 'i32') }}};
}
} else if (result instanceof WebGLBuffer) {
- {{{ makeSetValue('p', '0', 'GL.scan(GL.buffers, result)', 'i32') }}};
+ {{{ makeSetValue('p', '0', 'result.name | 0', 'i32') }}};
} else if (result instanceof WebGLProgram) {
- {{{ makeSetValue('p', '0', 'GL.scan(GL.programs, result)', 'i32') }}};
+ {{{ makeSetValue('p', '0', 'result.name | 0', 'i32') }}};
} else if (result instanceof WebGLFramebuffer) {
- {{{ makeSetValue('p', '0', 'GL.scan(GL.framebuffers, result)', 'i32') }}};
+ {{{ makeSetValue('p', '0', 'result.name | 0', 'i32') }}};
} else if (result instanceof WebGLRenderbuffer) {
- {{{ makeSetValue('p', '0', 'GL.scan(GL.renderbuffers, result)', 'i32') }}};
+ {{{ makeSetValue('p', '0', 'result.name | 0', 'i32') }}};
} else if (result instanceof WebGLTexture) {
- {{{ makeSetValue('p', '0', 'GL.scan(GL.textures, result)', 'i32') }}};
+ {{{ makeSetValue('p', '0', 'result.name | 0', 'i32') }}};
} else {
throw 'Unknown object returned from WebGL getParameter';
}
@@ -445,15 +437,15 @@ var LibraryGL = {
{{{ makeSetValue('p', 'i*4', 'result[i]', 'float') }}};
}
} else if (result instanceof WebGLBuffer) {
- {{{ makeSetValue('p', '0', 'GL.scan(GL.buffers, result)', 'float') }}};
+ {{{ makeSetValue('p', '0', 'result.name | 0', 'float') }}};
} else if (result instanceof WebGLProgram) {
- {{{ makeSetValue('p', '0', 'GL.scan(GL.programs, result)', 'float') }}};
+ {{{ makeSetValue('p', '0', 'result.name | 0', 'float') }}};
} else if (result instanceof WebGLFramebuffer) {
- {{{ makeSetValue('p', '0', 'GL.scan(GL.framebuffers, result)', 'float') }}};
+ {{{ makeSetValue('p', '0', 'result.name | 0', 'float') }}};
} else if (result instanceof WebGLRenderbuffer) {
- {{{ makeSetValue('p', '0', 'GL.scan(GL.renderbuffers, result)', 'float') }}};
+ {{{ makeSetValue('p', '0', 'result.name | 0', 'float') }}};
} else if (result instanceof WebGLTexture) {
- {{{ makeSetValue('p', '0', 'GL.scan(GL.textures, result)', 'float') }}};
+ {{{ makeSetValue('p', '0', 'result.name | 0', 'float') }}};
} else {
throw 'Unknown object returned from WebGL getParameter';
}
@@ -508,7 +500,9 @@ var LibraryGL = {
glGenTextures: function(n, textures) {
for (var i = 0; i < n; i++) {
var id = GL.getNewId(GL.textures);
- GL.textures[id] = Module.ctx.createTexture();
+ var texture = Module.ctx.createTexture();
+ texture.name = id;
+ GL.textures[id] = texture;
{{{ makeSetValue('textures', 'i*4', 'id', 'i32') }}};
}
},
@@ -517,7 +511,9 @@ var LibraryGL = {
glDeleteTextures: function(n, textures) {
for (var i = 0; i < n; i++) {
var id = {{{ makeGetValue('textures', 'i*4', 'i32') }}};
- Module.ctx.deleteTexture(GL.textures[id]);
+ var texture = GL.textures[id];
+ Module.ctx.deleteTexture(texture);
+ texture.name = 0;
GL.textures[id] = null;
}
},
@@ -622,7 +618,9 @@ var LibraryGL = {
glGenBuffers: function(n, buffers) {
for (var i = 0; i < n; i++) {
var id = GL.getNewId(GL.buffers);
- GL.buffers[id] = Module.ctx.createBuffer();
+ var buffer = Module.ctx.createBuffer();
+ buffer.name = id;
+ GL.buffers[id] = buffer;
{{{ makeSetValue('buffers', 'i*4', 'id', 'i32') }}};
}
},
@@ -631,7 +629,9 @@ var LibraryGL = {
glDeleteBuffers: function(n, buffers) {
for (var i = 0; i < n; i++) {
var id = {{{ makeGetValue('buffers', 'i*4', 'i32') }}};
- Module.ctx.deleteBuffer(GL.buffers[id]);
+ var buffer = GL.buffers[id];
+ Module.ctx.deleteBuffer(buffer);
+ buffer.name = 0;
GL.buffers[id] = null;
if (id == GL.currArrayBuffer) GL.currArrayBuffer = 0;
@@ -665,7 +665,9 @@ var LibraryGL = {
glGenRenderbuffers: function(n, renderbuffers) {
for (var i = 0; i < n; i++) {
var id = GL.getNewId(GL.renderbuffers);
- GL.renderbuffers[id] = Module.ctx.createRenderbuffer();
+ var renderbuffer = Module.ctx.createRenderbuffer();
+ renderbuffer.name = id;
+ GL.renderbuffers[id] = renderbuffer;
{{{ makeSetValue('renderbuffers', 'i*4', 'id', 'i32') }}};
}
},
@@ -674,8 +676,10 @@ var LibraryGL = {
glDeleteRenderbuffers: function(n, renderbuffers) {
for (var i = 0; i < n; i++) {
var id = {{{ makeGetValue('renderbuffers', 'i*4', 'i32') }}};
- Module.ctx.deleteRenderbuffer(GL.renderbuffers[id]);
- GL.renderbuffers[id];
+ var renderbuffer = GL.renderbuffers[id];
+ Module.ctx.deleteRenderbuffer(renderbuffer);
+ renderbuffer.name = 0;
+ GL.renderbuffers[id] = null;
}
},
@@ -1139,13 +1143,17 @@ var LibraryGL = {
glCreateProgram__sig: 'i',
glCreateProgram: function() {
var id = GL.getNewId(GL.programs);
- GL.programs[id] = Module.ctx.createProgram();
+ var program = Module.ctx.createProgram();
+ program.name = id;
+ GL.programs[id] = program;
return id;
},
glDeleteProgram__sig: 'vi',
glDeleteProgram: function(program) {
- Module.ctx.deleteProgram(GL.programs[program]);
+ var program = GL.programs[program];
+ Module.ctx.deleteProgram(program);
+ program.name = 0;
GL.programs[program] = null;
GL.uniformTable[program] = null;
},
@@ -1221,7 +1229,9 @@ var LibraryGL = {
glGenFramebuffers: function(n, ids) {
for (var i = 0; i < n; ++i) {
var id = GL.getNewId(GL.framebuffers);
- GL.framebuffers[id] = Module.ctx.createFramebuffer();
+ var framebuffer = Module.ctx.createFramebuffer();
+ framebuffer.name = id;
+ GL.framebuffers[id] = framebuffer;
{{{ makeSetValue('ids', 'i*4', 'id', 'i32') }}};
}
},
@@ -1230,7 +1240,9 @@ var LibraryGL = {
glDeleteFramebuffers: function(n, framebuffers) {
for (var i = 0; i < n; ++i) {
var id = {{{ makeGetValue('framebuffers', 'i*4', 'i32') }}};
- Module.ctx.deleteFramebuffer(GL.framebuffers[id]);
+ var framebuffer = GL.framebuffers[id];
+ Module.ctx.deleteFramebuffer(framebuffer);
+ framebuffer.name = 0;
GL.framebuffers[id] = null;
}
},
@@ -1260,6 +1272,8 @@ var LibraryGL = {
return Module.ctx.isFramebuffer(fb);
},
+#if DISABLE_GL_EMULATION == 0
+
// GL emulation: provides misc. functionality not present in OpenGL ES 2.0 or WebGL
$GLEmulation__postset: 'GLEmulation.init();',
@@ -4139,6 +4153,44 @@ var LibraryGL = {
},
glRotatef: 'glRotated',
+ glDrawBuffer: function() { throw 'glDrawBuffer: TODO' },
+ glReadBuffer: function() { throw 'glReadBuffer: TODO' },
+
+ glLightfv: function() { throw 'glLightfv: TODO' },
+ glLightModelfv: function() { throw 'glLightModelfv: TODO' },
+ glMaterialfv: function() { throw 'glMaterialfv: TODO' },
+
+ glTexGeni: function() { throw 'glTexGeni: TODO' },
+ glTexGenfv: function() { throw 'glTexGenfv: TODO' },
+ glTexEnvi: function() { Runtime.warnOnce('glTexEnvi: TODO') },
+ glTexEnvf: function() { Runtime.warnOnce('glTexEnvf: TODO') },
+ glTexEnvfv: function() { Runtime.warnOnce('glTexEnvfv: TODO') },
+
+ glTexImage1D: function() { throw 'glTexImage1D: TODO' },
+ glTexCoord3f: function() { throw 'glTexCoord3f: TODO' },
+ glGetTexLevelParameteriv: function() { throw 'glGetTexLevelParameteriv: TODO' },
+
+ glShadeModel: function() { Runtime.warnOnce('TODO: glShadeModel') },
+
+ // Open GLES1.1 compatibility
+
+ glGenFramebuffersOES : 'glGenFramebuffers',
+ glGenRenderbuffersOES : 'glGenRenderbuffers',
+ glBindFramebufferOES : 'glBindFramebuffer',
+ glBindRenderbufferOES : 'glBindRenderbuffer',
+ glGetRenderbufferParameterivOES : 'glGetRenderbufferParameteriv',
+ glFramebufferRenderbufferOES : 'glFramebufferRenderbuffer',
+ glRenderbufferStorageOES : 'glRenderbufferStorage',
+ glCheckFramebufferStatusOES : 'glCheckFramebufferStatus',
+ glDeleteFramebuffersOES : 'glDeleteFramebuffers',
+ glDeleteRenderbuffersOES : 'glDeleteRenderbuffers',
+ glGenVertexArraysOES: 'glGenVertexArrays',
+ glDeleteVertexArraysOES: 'glDeleteVertexArrays',
+ glBindVertexArrayOES: 'glBindVertexArray',
+ glFramebufferTexture2DOES: 'glFramebufferTexture2D',
+
+#endif // DISABLE_GL_EMULATION == 0
+
// GLU
gluPerspective: function(fov, aspect, near, far) {
@@ -4205,25 +4257,6 @@ var LibraryGL = {
_glOrtho(left, right, bottom, top, -1, 1);
},
- glDrawBuffer: function() { throw 'glDrawBuffer: TODO' },
- glReadBuffer: function() { throw 'glReadBuffer: TODO' },
-
- glLightfv: function() { throw 'glLightfv: TODO' },
- glLightModelfv: function() { throw 'glLightModelfv: TODO' },
- glMaterialfv: function() { throw 'glMaterialfv: TODO' },
-
- glTexGeni: function() { throw 'glTexGeni: TODO' },
- glTexGenfv: function() { throw 'glTexGenfv: TODO' },
- glTexEnvi: function() { Runtime.warnOnce('glTexEnvi: TODO') },
- glTexEnvf: function() { Runtime.warnOnce('glTexEnvf: TODO') },
- glTexEnvfv: function() { Runtime.warnOnce('glTexEnvfv: TODO') },
-
- glTexImage1D: function() { throw 'glTexImage1D: TODO' },
- glTexCoord3f: function() { throw 'glTexCoord3f: TODO' },
- glGetTexLevelParameteriv: function() { throw 'glGetTexLevelParameteriv: TODO' },
-
- glShadeModel: function() { Runtime.warnOnce('TODO: glShadeModel') },
-
// GLES2 emulation
glVertexAttribPointer__sig: 'viiiiii',
@@ -4351,23 +4384,6 @@ var LibraryGL = {
glGetError__sig: 'i',
glFrontFace__sig: 'vi',
glSampleCoverage__sig: 'vi',
-
- // Open GLES1.1 compatibility
-
- glGenFramebuffersOES : 'glGenFramebuffers',
- glGenRenderbuffersOES : 'glGenRenderbuffers',
- glBindFramebufferOES : 'glBindFramebuffer',
- glBindRenderbufferOES : 'glBindRenderbuffer',
- glGetRenderbufferParameterivOES : 'glGetRenderbufferParameteriv',
- glFramebufferRenderbufferOES : 'glFramebufferRenderbuffer',
- glRenderbufferStorageOES : 'glRenderbufferStorage',
- glCheckFramebufferStatusOES : 'glCheckFramebufferStatus',
- glDeleteFramebuffersOES : 'glDeleteFramebuffers',
- glDeleteRenderbuffersOES : 'glDeleteRenderbuffers',
- glGenVertexArraysOES: 'glGenVertexArrays',
- glDeleteVertexArraysOES: 'glDeleteVertexArrays',
- glBindVertexArrayOES: 'glBindVertexArray',
- glFramebufferTexture2DOES: 'glFramebufferTexture2D',
};
@@ -4409,25 +4425,27 @@ var LibraryGL = {
autoAddDeps(LibraryGL, '$GL');
-// Emulation requires everything else, potentially
-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(-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);
- Functions.unimplementedFunctions[func] = LibraryGL[func.substr(1) + '__sig'];
+if (!DISABLE_GL_EMULATION) {
+ // Emulation requires everything else, potentially
+ 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(-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);
+ Functions.unimplementedFunctions[func] = LibraryGL[func.substr(1) + '__sig'];
+ }
+ });
-if (FORCE_GL_EMULATION) {
- LibraryGL.glDrawElements__deps = LibraryGL.glDrawElements__deps.concat('$GLEmulation');
- LibraryGL.glDrawArrays__deps = LibraryGL.glDrawArrays__deps.concat('$GLEmulation');
+ if (FORCE_GL_EMULATION) {
+ LibraryGL.glDrawElements__deps = LibraryGL.glDrawElements__deps.concat('$GLEmulation');
+ LibraryGL.glDrawArrays__deps = LibraryGL.glDrawArrays__deps.concat('$GLEmulation');
+ }
}
mergeInto(LibraryManager.library, LibraryGL);