aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-08-05 22:43:12 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-08-05 22:43:12 -0700
commit91e088b30623eaf832ba1f35a6a0e9655ad43e3d (patch)
treec782b3b2f28d0317b2c5c0444841d14f463468ae
parentd72ea764436274571c43681c3b4b40b9d021176b (diff)
optimize rendererCache lookups
-rw-r--r--src/library_gl.js21
1 files changed, 11 insertions, 10 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 7058440d..765b3cdb 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -1525,15 +1525,16 @@ var LibraryGL = {
// we maintain a cache of renderers, optimized to not generate garbage
var attributes = GL.immediate.liveClientAttributes;
var cacheItem = GL.immediate.rendererCache;
+ var temp;
for (var i = 0; i < attributes.length; i++) {
var attribute = attributes[i];
- if (!cacheItem[attribute.name]) cacheItem[attribute.name] = GL.immediate.rendererCacheItemTemplate.slice();
- cacheItem = cacheItem[attribute.name];
- if (!cacheItem[attribute.size]) cacheItem[attribute.size] = GL.immediate.rendererCacheItemTemplate.slice();
- cacheItem = cacheItem[attribute.size];
+ temp = cacheItem[attribute.name];
+ cacheItem = temp ? temp : (cacheItem[attribute.name] = GL.immediate.rendererCacheItemTemplate.slice());
+ temp = cacheItem[attribute.size];
+ cacheItem = temp ? temp : (cacheItem[attribute.size] = GL.immediate.rendererCacheItemTemplate.slice());
var typeIndex = attribute.type - GL.immediate.byteSizeByTypeRoot; // ensure it starts at 0 to keep the cache items dense
- if (!cacheItem[typeIndex]) cacheItem[typeIndex] = GL.immediate.rendererCacheItemTemplate.slice();
- cacheItem = cacheItem[typeIndex];
+ temp = cacheItem[typeIndex];
+ cacheItem = temp ? temp : (cacheItem[typeIndex] = GL.immediate.rendererCacheItemTemplate.slice());
}
var fogParam;
if (GLEmulation.fogEnabled) {
@@ -1551,11 +1552,11 @@ var LibraryGL = {
} else {
fogParam = 0;
}
- if (!cacheItem[fogParam]) cacheItem[fogParam] = GL.immediate.rendererCacheItemTemplate.slice();
- cacheItem = cacheItem[fogParam];
+ temp = cacheItem[fogParam];
+ cacheItem = temp ? temp : (cacheItem[fogParam] = GL.immediate.rendererCacheItemTemplate.slice());
if (GL.currProgram) { // Note the order here; this one is last, and optional. Note that we cannot ensure it is dense, sadly
- if (!cacheItem[GL.currProgram]) cacheItem[GL.currProgram] = GL.immediate.rendererCacheItemTemplate.slice();
- cacheItem = cacheItem[GL.currProgram];
+ temp = cacheItem[GL.currProgram];
+ cacheItem = temp ? temp : (cacheItem[GL.currProgram] = GL.immediate.rendererCacheItemTemplate.slice());
}
if (!cacheItem.renderer) {
#if GL_DEBUG