Jelajahi Sumber

RenderObject: Added `.setGeometry()` (#29836)

sunag 1 tahun lalu
induk
melakukan
abe510abd6

+ 13 - 0
src/renderers/common/RenderObject.js

@@ -147,6 +147,13 @@ export default class RenderObject {
 
 	}
 
+	setGeometry( geometry ) {
+
+		this.geometry = geometry;
+		this.attributes = null;
+
+	}
+
 	getAttributes() {
 
 		if ( this.attributes !== null ) return this.attributes;
@@ -376,6 +383,12 @@ export default class RenderObject {
 
 	}
 
+	get needsGeometryUpdate() {
+
+		return this.geometry.id !== this.object.geometry.id;
+
+	}
+
 	get needsUpdate() {
 
 		return /*this.object.static !== true &&*/ ( this.initialNodesCacheKey !== this.getDynamicCacheKey() || this.clippingNeedsUpdate );

+ 9 - 4
src/renderers/common/RenderObjects.js

@@ -40,12 +40,11 @@ class RenderObjects {
 
 			renderObject.updateClipping( clippingContext );
 
-			// force update if geometry has changed
-			const forceUpdate = renderObject.geometry.id !== renderObject.object.geometry.id;
+			const needsGeometryUpdate = renderObject.needsGeometryUpdate;
 
-			if ( forceUpdate || renderObject.version !== material.version || renderObject.needsUpdate ) {
+			if ( renderObject.version !== material.version || renderObject.needsUpdate || needsGeometryUpdate ) {
 
-				if ( forceUpdate || renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
+				if ( renderObject.initialCacheKey !== renderObject.getCacheKey() ) {
 
 					renderObject.dispose();
 
@@ -55,6 +54,12 @@ class RenderObjects {
 
 					renderObject.version = material.version;
 
+					if ( needsGeometryUpdate ) {
+
+						renderObject.setGeometry( object.geometry );
+
+					}
+
 				}
 
 			}

粤ICP备19079148号