diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-07-05 17:16:59 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-07-05 17:16:59 -0700 |
commit | bba6899919012b54e4a7a666c451ddbf30bc7797 (patch) | |
tree | 4f82a11ef024f9e560c236a4f2011ef7a28893fd | |
parent | 9aee47c30f90c3d8358a0a8019684a611893b017 (diff) |
bind attribute 0 to user-defined programs when it is free
-rw-r--r-- | src/library_gl.js | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/library_gl.js b/src/library_gl.js index 6daee6fc..c98c7657 100644 --- a/src/library_gl.js +++ b/src/library_gl.js @@ -1191,6 +1191,21 @@ var LibraryGL = { if (program == GL.currProgram) GL.currProgram = 0; }; + // If attribute 0 was not bound, bind it to 0 for WebGL performance reasons. Track if 0 is free for that. + var zeroUsedPrograms = {}; + var glBindAttribLocation = _glBindAttribLocation; + _glBindAttribLocation = function(program, index, name) { + if (index == 0) zeroUsedPrograms[program] = true; + glBindAttribLocation(program, index, name); + }; + var glLinkProgram = _glLinkProgram; + _glLinkProgram = function(program) { + if (!(program in zeroUsedPrograms)) { + Module.ctx.bindAttribLocation(GL.programs[program], 0, 'a_position'); + } + glLinkProgram(program); + }; + var glBindBuffer = _glBindBuffer; _glBindBuffer = function(target, buffer) { glBindBuffer(target, buffer); |