aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-07-05 17:16:59 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-07-05 17:16:59 -0700
commitbba6899919012b54e4a7a666c451ddbf30bc7797 (patch)
tree4f82a11ef024f9e560c236a4f2011ef7a28893fd
parent9aee47c30f90c3d8358a0a8019684a611893b017 (diff)
bind attribute 0 to user-defined programs when it is free
-rw-r--r--src/library_gl.js15
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);