Răsfoiți Sursa

WebGPURenderer: Revert and fix updateBefore() - (2) (#26422)

* Renderer: Revert and fix updateBefore() - (2)

* simplifies parameters

* Add scene.onBeforeRender() and scene.onAfterRender() callback
sunag 2 ani în urmă
părinte
comite
8155acdff3
1 a modificat fișierele cu 25 adăugiri și 23 ștergeri
  1. 25 23
      examples/jsm/renderers/common/Renderer.js

+ 25 - 23
examples/jsm/renderers/common/Renderer.js

@@ -250,6 +250,10 @@ class Renderer {
 
 		//
 
+		sceneRef.onBeforeRender( this, scene, camera, renderTarget );
+
+		//
+
 		_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
 		_frustum.setFromProjectionMatrix( _projScreenMatrix, coordinateSystem );
 
@@ -318,6 +322,10 @@ class Renderer {
 
 		this._lastRenderContext = renderContext;
 
+		//
+
+		sceneRef.onAfterRender( this, scene, camera, renderTarget );
+
 	}
 
 	setAnimationLoop( callback ) {
@@ -822,12 +830,6 @@ class Renderer {
 
 	}
 
-	_getRenderObject( object, material, scene, camera, lightsNode, passId ) {
-
-		return this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
-
-	}
-
 	_renderObject( object, scene, camera, geometry, material, group, lightsNode ) {
 
 		material = scene.overrideMaterial !== null ? scene.overrideMaterial : material;
@@ -836,19 +838,6 @@ class Renderer {
 
 		object.onBeforeRender( this, scene, camera, geometry, material, group );
 
-		//
-
-		const renderObject = this._getRenderObject( object, material, scene, camera, lightsNode );
-
-		this._nodes.updateBefore( renderObject );
-
-		//
-
-		object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
-		object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
-
-		//
-
 		material.onBeforeRender( this, scene, camera, geometry, material, group );
 
 		//
@@ -856,16 +845,16 @@ class Renderer {
 		if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
 
 			material.side = BackSide;
-			this._renderObjectDirect( this._getRenderObject( object, material, scene, camera, lightsNode, 'backSide' ) ); // create backSide pass id
+			this._renderObjectDirect( object, material, scene, camera, lightsNode, 'backSide' ); // create backSide pass id
 
 			material.side = FrontSide;
-			this._renderObjectDirect( renderObject ); // use default pass id
+			this._renderObjectDirect( object, material, scene, camera, lightsNode ); // use default pass id
 
 			material.side = DoubleSide;
 
 		} else {
 
-			this._renderObjectDirect( renderObject );
+			this._renderObjectDirect( object, material, scene, camera, lightsNode );
 
 		}
 
@@ -875,7 +864,20 @@ class Renderer {
 
 	}
 
-	_renderObjectDirect( renderObject ) {
+	_renderObjectDirect( object, material, scene, camera, lightsNode, passId ) {
+
+		const renderObject = this._objects.get( object, material, scene, camera, lightsNode, this._currentRenderContext, passId );
+
+		//
+
+		this._nodes.updateBefore( renderObject );
+
+		//
+
+		object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
+		object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
+
+		//
 
 		this._nodes.updateForRender( renderObject );
 		this._geometries.updateForRender( renderObject );