Răsfoiți Sursa

WebGLRenderer: Safer _currentGeometry(Group)Hash. See #5811.

Mr.doob 10 ani în urmă
părinte
comite
6f871dd8a1
1 a modificat fișierele cu 11 adăugiri și 11 ștergeri
  1. 11 11
      src/renderers/WebGLRenderer.js

+ 11 - 11
src/renderers/WebGLRenderer.js

@@ -112,7 +112,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 	_currentProgram = null,
 	_currentProgram = null,
 	_currentFramebuffer = null,
 	_currentFramebuffer = null,
 	_currentMaterialId = - 1,
 	_currentMaterialId = - 1,
-	_currentGeometryGroupHash = - 1,
+	_currentGeometryProgram = '',
 	_currentCamera = null,
 	_currentCamera = null,
 
 
 	_usedTextureUnits = 0,
 	_usedTextureUnits = 0,
@@ -283,7 +283,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 		_oldDepthWrite = - 1;
 		_oldDepthWrite = - 1;
 		_oldDoubleSided = - 1;
 		_oldDoubleSided = - 1;
 		_oldFlipSided = - 1;
 		_oldFlipSided = - 1;
-		_currentGeometryGroupHash = - 1;
+		_currentGeometryProgram = '';
 		_currentMaterialId = - 1;
 		_currentMaterialId = - 1;
 
 
 		_lightsNeedUpdate = true;
 		_lightsNeedUpdate = true;
@@ -845,7 +845,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 		// TOFIX: Workaround for deleted geometry being currently bound
 		// TOFIX: Workaround for deleted geometry being currently bound
 
 
-		_currentGeometryGroupHash = - 1;
+		_currentGeometryProgram = '';
 
 
 	};
 	};
 
 
@@ -2476,11 +2476,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 		var updateBuffers = false,
 		var updateBuffers = false,
 			wireframeBit = material.wireframe ? 1 : 0,
 			wireframeBit = material.wireframe ? 1 : 0,
-			geometryHash = ( geometry.id * 0x1000000 ) + ( program.id * 4 ) + 2 + wireframeBit;
+			geometryProgram = 'direct_' + geometry.id + '_' + program.id + '_' + wireframeBit;
 
 
-		if ( geometryHash !== _currentGeometryGroupHash ) {
+		if ( geometryProgram !== _currentGeometryProgram ) {
 
 
-			_currentGeometryGroupHash = geometryHash;
+			_currentGeometryProgram = geometryProgram;
 			updateBuffers = true;
 			updateBuffers = true;
 
 
 		}
 		}
@@ -2821,11 +2821,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 		var updateBuffers = false,
 		var updateBuffers = false,
 			wireframeBit = material.wireframe ? 1 : 0,
 			wireframeBit = material.wireframe ? 1 : 0,
-			geometryGroupHash = ( geometryGroup.id * 0x1000000 ) + ( program.id * 4 ) + wireframeBit;
+			geometryProgram = geometryGroup.id + '_' + program.id + '_' + wireframeBit;
 
 
-		if ( geometryGroupHash !== _currentGeometryGroupHash ) {
+		if ( geometryProgram !== _currentGeometryProgram ) {
 
 
-			_currentGeometryGroupHash = geometryGroupHash;
+			_currentGeometryProgram = geometryProgram;
 			updateBuffers = true;
 			updateBuffers = true;
 
 
 		}
 		}
@@ -3276,7 +3276,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 		// reset caching for this frame
 		// reset caching for this frame
 
 
-		_currentGeometryGroupHash = - 1;
+		_currentGeometryProgram = '';
 		_currentMaterialId = - 1;
 		_currentMaterialId = - 1;
 		_currentCamera = null;
 		_currentCamera = null;
 		_lightsNeedUpdate = true;
 		_lightsNeedUpdate = true;
@@ -3562,7 +3562,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 		var program = setProgram( camera, lights, fog, material, object );
 		var program = setProgram( camera, lights, fog, material, object );
 
 
-		_currentGeometryGroupHash = - 1;
+		_currentGeometryProgram = '';
 
 
 		_this.setMaterialFaces( material );
 		_this.setMaterialFaces( material );