aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJukka Jylänki <jujjyl@gmail.com>2014-01-02 19:46:41 +0200
committerJukka Jylänki <jujjyl@gmail.com>2014-01-09 20:05:29 +0200
commite158bd1e5d861f82efa84ce427034fb0098b6e2f (patch)
treeaa29e7af545d42629747fa02960926c861a24340
parentd302f6121076f6a7c1191d4e5a27e35d3dd149b2 (diff)
Make caching of last bound GL_ARRAY_BUFFER in FFP emulation mode safe and always enable that optimization.
-rw-r--r--src/library_gl.js13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 70ba105e..1c57dd9e 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -1348,7 +1348,7 @@ var LibraryGL = {
#endif
#if LEGACY_GL_EMULATION
if (target == Module.ctx.ARRAY_BUFFER) {
- GL.currArrayBuffer = buffer;
+ GL.immediate.lastArrayBuffer = GL.currArrayBuffer = buffer;
} else if (target == Module.ctx.ELEMENT_ARRAY_BUFFER) {
GL.currElementArrayBuffer = buffer;
}
@@ -3739,20 +3739,17 @@ var LibraryGL = {
#endif
if (!GL.currArrayBuffer) {
// Bind the array buffer and upload data after cleaning up the previous renderer
-#if GL_UNSAFE_OPTS
- // Potentially unsafe, since lastArrayBuffer might not reflect the true array buffer in code that mixes immediate/non-immediate
+
if (arrayBuffer != GL.immediate.lastArrayBuffer) {
-#endif
Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, arrayBuffer);
-#if GL_UNSAFE_OPTS
+ GL.immediate.lastArrayBuffer = arrayBuffer;
}
-#endif
+
Module.ctx.bufferSubData(Module.ctx.ARRAY_BUFFER, start, GL.immediate.vertexData.subarray(start >> 2, end >> 2));
}
#if GL_UNSAFE_OPTS
if (canSkip) return;
GL.immediate.lastRenderer = this;
- GL.immediate.lastArrayBuffer = arrayBuffer;
GL.immediate.lastProgram = GL.currProgram || this.program;
GL.immediate.lastStride == GL.immediate.stride;
GL.immediate.matricesModified = false;
@@ -3894,11 +3891,11 @@ var LibraryGL = {
}
if (!GL.currArrayBuffer) {
Module.ctx.bindBuffer(Module.ctx.ARRAY_BUFFER, null);
+ GL.immediate.lastArrayBuffer = null;
}
#if GL_UNSAFE_OPTS
GL.immediate.lastRenderer = null;
- GL.immediate.lastArrayBuffer = null;
GL.immediate.lastProgram = null;
#endif
GL.immediate.matricesModified = true;