Pārlūkot izejas kodu

WebGLRenderer: Fix global clipping planes with nested render calls. (#28120)

Michael Herzog 1 gadu atpakaļ
vecāks
revīzija
c8eb9e6213

+ 4 - 2
src/renderers/WebGLRenderer.js

@@ -906,7 +906,7 @@ class WebGLRenderer {
 			if ( targetScene === null ) targetScene = scene;
 			if ( targetScene === null ) targetScene = scene;
 
 
 			currentRenderState = renderStates.get( targetScene );
 			currentRenderState = renderStates.get( targetScene );
-			currentRenderState.init();
+			currentRenderState.init( camera );
 
 
 			renderStateStack.push( currentRenderState );
 			renderStateStack.push( currentRenderState );
 
 
@@ -1123,7 +1123,7 @@ class WebGLRenderer {
 			if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );
 			if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );
 
 
 			currentRenderState = renderStates.get( scene, renderStateStack.length );
 			currentRenderState = renderStates.get( scene, renderStateStack.length );
-			currentRenderState.init();
+			currentRenderState.init( camera );
 
 
 			renderStateStack.push( currentRenderState );
 			renderStateStack.push( currentRenderState );
 
 
@@ -1242,6 +1242,8 @@ class WebGLRenderer {
 
 
 				currentRenderState = renderStateStack[ renderStateStack.length - 1 ];
 				currentRenderState = renderStateStack[ renderStateStack.length - 1 ];
 
 
+				if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera );
+
 			} else {
 			} else {
 
 
 				currentRenderState = null;
 				currentRenderState = null;

+ 5 - 1
src/renderers/webgl/WebGLRenderStates.js

@@ -7,7 +7,9 @@ function WebGLRenderState( extensions ) {
 	const lightsArray = [];
 	const lightsArray = [];
 	const shadowsArray = [];
 	const shadowsArray = [];
 
 
-	function init() {
+	function init( camera ) {
+
+		state.camera = camera;
 
 
 		lightsArray.length = 0;
 		lightsArray.length = 0;
 		shadowsArray.length = 0;
 		shadowsArray.length = 0;
@@ -42,6 +44,8 @@ function WebGLRenderState( extensions ) {
 		lightsArray: lightsArray,
 		lightsArray: lightsArray,
 		shadowsArray: shadowsArray,
 		shadowsArray: shadowsArray,
 
 
+		camera: null,
+
 		lights: lights,
 		lights: lights,
 
 
 		transmissionRenderTarget: {}
 		transmissionRenderTarget: {}