diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-04-24 18:40:28 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-04-24 18:40:28 -0700 |
commit | 2622a2c7c59d0f83f63afe7d3bbbd07ef86f0958 (patch) | |
tree | ec4a66da0a12032c35eda5dc4fcd5dcabc1771c9 | |
parent | d526babf9654a0f401fa22eb04bcd27d76fc131a (diff) |
create unique renderers for user-defined programs
-rw-r--r-- | src/library_gl.js | 19 |
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 |