浏览代码

Fixes wrong program reference counting.

tschw 10 年之前
父节点
当前提交
d4191cf082
共有 1 个文件被更改,包括 13 次插入2 次删除
  1. 13 2
      src/renderers/WebGLRenderer.js

+ 13 - 2
src/renderers/WebGLRenderer.js

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