diff --git a/src/renderers/WebGLRenderer.js b/src/renderers/WebGLRenderer.js index fbef89050d49b612f9ceecee1c2a0e4ae5d998c1..e1eb4b95dfb5b0ebb90d22a6d04b3c4a5c0d139d 100644 --- a/src/renderers/WebGLRenderer.js +++ b/src/renderers/WebGLRenderer.js @@ -1927,6 +1927,7 @@ THREE.WebGLRenderer = function ( parameters ) { } var code = chunks.join(); + var programChange = true; if ( !materialProperties.program ) { @@ -1940,7 +1941,7 @@ THREE.WebGLRenderer = function ( parameters ) { } else if ( shaderID !== undefined ) { - // same glsl + // same glsl and uniform list return; } else if ( materialProperties.__webglShader.uniforms === material.uniforms ) { @@ -1948,6 +1949,11 @@ THREE.WebGLRenderer = function ( parameters ) { // same uniforms (container object) return; + } else { + + // only rebuild uniform list + programChange = false; + } if ( shaderID ) { @@ -1983,7 +1989,12 @@ THREE.WebGLRenderer = function ( parameters ) { if ( programInfo.code === code ) { program = programInfo; - program.usedTimes ++; + + if ( programChange ) { + + program.usedTimes ++; + + } break;