diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-08-05 22:43:12 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-08-05 22:43:12 -0700 |
commit | 91e088b30623eaf832ba1f35a6a0e9655ad43e3d (patch) | |
tree | c782b3b2f28d0317b2c5c0444841d14f463468ae | |
parent | d72ea764436274571c43681c3b4b40b9d021176b (diff) |
optimize rendererCache lookups
-rw-r--r-- | src/library_gl.js | 21 |
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 |