浏览代码

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

Michael Herzog 1 年之前
父节点
当前提交
c8eb9e6213
共有 2 个文件被更改,包括 9 次插入3 次删除
  1. 4 2
      src/renderers/WebGLRenderer.js
  2. 5 1
      src/renderers/webgl/WebGLRenderStates.js

+ 4 - 2
src/renderers/WebGLRenderer.js

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

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

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