|
@@ -610,6 +610,16 @@ class Renderer {
|
|
|
*/
|
|
*/
|
|
|
this._initialized = false;
|
|
this._initialized = false;
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * The call depth of the renderer. Counts the number of
|
|
|
|
|
+ * nested render calls.
|
|
|
|
|
+ *
|
|
|
|
|
+ * @private
|
|
|
|
|
+ * @type {number}
|
|
|
|
|
+ * @default - 1
|
|
|
|
|
+ */
|
|
|
|
|
+ this._callDepth = - 1;
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* A reference to the promise which initializes the renderer.
|
|
* A reference to the promise which initializes the renderer.
|
|
|
*
|
|
*
|
|
@@ -695,7 +705,7 @@ class Renderer {
|
|
|
await this.compileAsync( scene, camera );
|
|
await this.compileAsync( scene, camera );
|
|
|
|
|
|
|
|
const renderList = this._renderLists.get( scene, camera );
|
|
const renderList = this._renderLists.get( scene, camera );
|
|
|
- const renderContext = this._renderContexts.get( scene, camera, this._renderTarget, this._mrt );
|
|
|
|
|
|
|
+ const renderContext = this._renderContexts.get( this._renderTarget, this._mrt );
|
|
|
|
|
|
|
|
const material = scene.overrideMaterial || object.material;
|
|
const material = scene.overrideMaterial || object.material;
|
|
|
|
|
|
|
@@ -856,7 +866,7 @@ class Renderer {
|
|
|
if ( targetScene === null ) targetScene = scene;
|
|
if ( targetScene === null ) targetScene = scene;
|
|
|
|
|
|
|
|
const renderTarget = this._renderTarget;
|
|
const renderTarget = this._renderTarget;
|
|
|
- const renderContext = this._renderContexts.get( targetScene, camera, renderTarget, this._mrt );
|
|
|
|
|
|
|
+ const renderContext = this._renderContexts.get( renderTarget, this._mrt );
|
|
|
const activeMipmapLevel = this._activeMipmapLevel;
|
|
const activeMipmapLevel = this._activeMipmapLevel;
|
|
|
|
|
|
|
|
const compilationPromises = [];
|
|
const compilationPromises = [];
|
|
@@ -1359,6 +1369,8 @@ class Renderer {
|
|
|
|
|
|
|
|
//
|
|
//
|
|
|
|
|
|
|
|
|
|
+ this._callDepth ++;
|
|
|
|
|
+
|
|
|
const sceneRef = ( scene.isScene === true ) ? scene : _scene;
|
|
const sceneRef = ( scene.isScene === true ) ? scene : _scene;
|
|
|
|
|
|
|
|
const outputRenderTarget = this._renderTarget || this._outputRenderTarget;
|
|
const outputRenderTarget = this._renderTarget || this._outputRenderTarget;
|
|
@@ -1384,7 +1396,7 @@ class Renderer {
|
|
|
|
|
|
|
|
//
|
|
//
|
|
|
|
|
|
|
|
- const renderContext = this._renderContexts.get( scene, camera, renderTarget, this._mrt );
|
|
|
|
|
|
|
+ const renderContext = this._renderContexts.get( renderTarget, this._mrt, this._callDepth );
|
|
|
|
|
|
|
|
this._currentRenderContext = renderContext;
|
|
this._currentRenderContext = renderContext;
|
|
|
this._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject;
|
|
this._currentRenderObjectFunction = this._renderObjectFunction || this.renderObject;
|
|
@@ -1592,6 +1604,8 @@ class Renderer {
|
|
|
|
|
|
|
|
//
|
|
//
|
|
|
|
|
|
|
|
|
|
+ this._callDepth --;
|
|
|
|
|
+
|
|
|
if ( frameBufferTarget !== null ) {
|
|
if ( frameBufferTarget !== null ) {
|
|
|
|
|
|
|
|
this.setRenderTarget( outputRenderTarget, activeCubeFace, activeMipmapLevel );
|
|
this.setRenderTarget( outputRenderTarget, activeCubeFace, activeMipmapLevel );
|
|
@@ -2065,7 +2079,7 @@ class Renderer {
|
|
|
|
|
|
|
|
const renderTargetData = this._textures.get( renderTarget );
|
|
const renderTargetData = this._textures.get( renderTarget );
|
|
|
|
|
|
|
|
- renderContext = this._renderContexts.getForClear( renderTarget );
|
|
|
|
|
|
|
+ renderContext = this._renderContexts.get( renderTarget );
|
|
|
renderContext.textures = renderTargetData.textures;
|
|
renderContext.textures = renderTargetData.textures;
|
|
|
renderContext.depthTexture = renderTargetData.depthTexture;
|
|
renderContext.depthTexture = renderTargetData.depthTexture;
|
|
|
renderContext.width = renderTargetData.width;
|
|
renderContext.width = renderTargetData.width;
|
|
@@ -2074,7 +2088,11 @@ class Renderer {
|
|
|
renderContext.depth = renderTarget.depthBuffer;
|
|
renderContext.depth = renderTarget.depthBuffer;
|
|
|
renderContext.stencil = renderTarget.stencilBuffer;
|
|
renderContext.stencil = renderTarget.stencilBuffer;
|
|
|
// #30329
|
|
// #30329
|
|
|
- renderContext.clearColorValue = this.backend.getClearColor();
|
|
|
|
|
|
|
+ const color = this.backend.getClearColor();
|
|
|
|
|
+ renderContext.clearColorValue.r = color.r;
|
|
|
|
|
+ renderContext.clearColorValue.g = color.g;
|
|
|
|
|
+ renderContext.clearColorValue.b = color.b;
|
|
|
|
|
+ renderContext.clearColorValue.a = color.a;
|
|
|
renderContext.activeCubeFace = this.getActiveCubeFace();
|
|
renderContext.activeCubeFace = this.getActiveCubeFace();
|
|
|
renderContext.activeMipmapLevel = this.getActiveMipmapLevel();
|
|
renderContext.activeMipmapLevel = this.getActiveMipmapLevel();
|
|
|
|
|
|