|
@@ -14682,7 +14682,6 @@ function WebGLCubeMaps( renderer ) {
|
|
|
|
|
|
if ( image && image.height > 0 ) {
|
|
|
|
|
|
- const currentRenderList = renderer.getRenderList();
|
|
|
const currentRenderTarget = renderer.getRenderTarget();
|
|
|
|
|
|
const renderTarget = new WebGLCubeRenderTarget( image.height / 2 );
|
|
@@ -14690,7 +14689,6 @@ function WebGLCubeMaps( renderer ) {
|
|
|
cubemaps.set( texture, renderTarget );
|
|
|
|
|
|
renderer.setRenderTarget( currentRenderTarget );
|
|
|
- renderer.setRenderList( currentRenderList );
|
|
|
|
|
|
texture.addEventListener( 'dispose', onTextureDispose );
|
|
|
|
|
@@ -17801,24 +17799,26 @@ function WebGLRenderLists( properties ) {
|
|
|
|
|
|
let lists = new WeakMap();
|
|
|
|
|
|
- function get( scene, camera ) {
|
|
|
+ function get( scene, renderCallDepth ) {
|
|
|
|
|
|
- const cameras = lists.get( scene );
|
|
|
let list;
|
|
|
|
|
|
- if ( cameras === undefined ) {
|
|
|
+ if ( lists.has( scene ) === false ) {
|
|
|
|
|
|
list = new WebGLRenderList( properties );
|
|
|
- lists.set( scene, new WeakMap() );
|
|
|
- lists.get( scene ).set( camera, list );
|
|
|
+ lists.set( scene, [] );
|
|
|
+ lists.get( scene ).push( list );
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- list = cameras.get( camera );
|
|
|
- if ( list === undefined ) {
|
|
|
+ if ( renderCallDepth >= lists.get( scene ).length ) {
|
|
|
|
|
|
list = new WebGLRenderList( properties );
|
|
|
- cameras.set( camera, list );
|
|
|
+ lists.get( scene ).push( list );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ list = lists.get( scene )[ renderCallDepth ];
|
|
|
|
|
|
}
|
|
|
|
|
@@ -22991,8 +22991,9 @@ function WebGLRenderer( parameters ) {
|
|
|
let currentRenderState = null;
|
|
|
|
|
|
// render() can be called from within a callback triggered by another render.
|
|
|
- // We track this so that the nested render call gets its state isolated from the parent render call.
|
|
|
+ // We track this so that the nested render call gets its list and state isolated from the parent render call.
|
|
|
|
|
|
+ const renderListStack = [];
|
|
|
const renderStateStack = [];
|
|
|
|
|
|
// public properties
|
|
@@ -23946,9 +23947,11 @@ function WebGLRenderer( parameters ) {
|
|
|
_localClippingEnabled = this.localClippingEnabled;
|
|
|
_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera );
|
|
|
|
|
|
- currentRenderList = renderLists.get( scene, camera );
|
|
|
+ currentRenderList = renderLists.get( scene, renderListStack.length );
|
|
|
currentRenderList.init();
|
|
|
|
|
|
+ renderListStack.push( currentRenderList );
|
|
|
+
|
|
|
projectObject( scene, camera, 0, _this.sortObjects );
|
|
|
|
|
|
currentRenderList.finish();
|
|
@@ -24023,6 +24026,7 @@ function WebGLRenderer( parameters ) {
|
|
|
// _gl.finish();
|
|
|
|
|
|
renderStateStack.pop();
|
|
|
+
|
|
|
if ( renderStateStack.length > 0 ) {
|
|
|
|
|
|
currentRenderState = renderStateStack[ renderStateStack.length - 1 ];
|
|
@@ -24033,7 +24037,17 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- currentRenderList = null;
|
|
|
+ renderListStack.pop();
|
|
|
+
|
|
|
+ if ( renderListStack.length > 0 ) {
|
|
|
+
|
|
|
+ currentRenderList = renderListStack[ renderListStack.length - 1 ];
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ currentRenderList = null;
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
};
|
|
|
|
|
@@ -24673,18 +24687,6 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
};
|
|
|
|
|
|
- this.getRenderList = function () {
|
|
|
-
|
|
|
- return currentRenderList;
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
- this.setRenderList = function ( renderList ) {
|
|
|
-
|
|
|
- currentRenderList = renderList;
|
|
|
-
|
|
|
- };
|
|
|
-
|
|
|
this.getRenderTarget = function () {
|
|
|
|
|
|
return _currentRenderTarget;
|