aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-04-24 18:40:28 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-04-24 18:40:28 -0700
commit2622a2c7c59d0f83f63afe7d3bbbd07ef86f0958 (patch)
treeec4a66da0a12032c35eda5dc4fcd5dcabc1771c9
parentd526babf9654a0f401fa22eb04bcd27d76fc131a (diff)
create unique renderers for user-defined programs
-rw-r--r--src/library_gl.js19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 9bf206f5..5824016f 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -1214,11 +1214,14 @@ var LibraryGL = {
},
setRenderer: function(renderer) {
- this.renderer = renderer;
- if (this.renderers[renderer]) return this.renderers[renderer];
-
- this.createRenderer(renderer);
- return this.renderers[renderer];
+ var name = renderer;
+ if (GL.currProgram) {
+ name = 'UD' + GL.currProgram; // user-defined program renderer
+ }
+ this.renderer = name;
+ if (this.renderers[name]) return this.renderers[name];
+ this.renderers[name] = this.createRenderer(renderer);
+ return this.renderers[name];
},
createRenderer: function(renderer) {
@@ -1246,7 +1249,7 @@ var LibraryGL = {
// TODO: verify vertexSize is equal to the stride in enabled client arrays
// XXX TODO: use bufferSubData to prevent reallocation of new buffers? Or all on GPU and doesn't matter? Anyhow, use DYNAMIC as hint
var useCurrProgram = !!GL.currProgram;
- this.renderers[renderer] = {
+ var ret = {
vertexSize: vertexSize,
hasTexture: textureSize > 0,
init: function() {
@@ -1311,6 +1314,7 @@ var LibraryGL = {
}
Module.ctx.enableVertexAttribArray(this.positionLocation);
+ // TODO: use client texture info
var texture = Module.ctx.getParameter(Module.ctx.TEXTURE_BINDING_2D);
Module.ctx.activeTexture(Module.ctx.TEXTURE0);
Module.ctx.bindTexture(Module.ctx.TEXTURE_2D, texture);
@@ -1320,7 +1324,8 @@ var LibraryGL = {
Module.ctx.uniformMatrix4fv(this.projectionLocation, false, GL.immediate.matrix['p']);
}
};
- this.renderers[renderer].init();
+ ret.init();
+ return ret;
},
// Main functions