|
@@ -21836,7 +21836,7 @@ function WebGLRenderState( extensions ) {
|
|
|
|
|
|
lights: lights,
|
|
lights: lights,
|
|
|
|
|
|
- transmissionRenderTarget: null
|
|
|
|
|
|
+ transmissionRenderTarget: {}
|
|
};
|
|
};
|
|
|
|
|
|
return {
|
|
return {
|
|
@@ -29292,12 +29292,27 @@ class WebGLRenderer {
|
|
|
|
|
|
// render scene
|
|
// render scene
|
|
|
|
|
|
|
|
+ const opaqueObjects = currentRenderList.opaque;
|
|
|
|
+ const transmissiveObjects = currentRenderList.transmissive;
|
|
|
|
+
|
|
currentRenderState.setupLights( _this._useLegacyLights );
|
|
currentRenderState.setupLights( _this._useLegacyLights );
|
|
|
|
|
|
if ( camera.isArrayCamera ) {
|
|
if ( camera.isArrayCamera ) {
|
|
|
|
|
|
const cameras = camera.cameras;
|
|
const cameras = camera.cameras;
|
|
|
|
|
|
|
|
+ if ( transmissiveObjects.length > 0 ) {
|
|
|
|
+
|
|
|
|
+ for ( let i = 0, l = cameras.length; i < l; i ++ ) {
|
|
|
|
+
|
|
|
|
+ const camera2 = cameras[ i ];
|
|
|
|
+
|
|
|
|
+ renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
for ( let i = 0, l = cameras.length; i < l; i ++ ) {
|
|
for ( let i = 0, l = cameras.length; i < l; i ++ ) {
|
|
|
|
|
|
const camera2 = cameras[ i ];
|
|
const camera2 = cameras[ i ];
|
|
@@ -29308,6 +29323,8 @@ class WebGLRenderer {
|
|
|
|
|
|
} else {
|
|
} else {
|
|
|
|
|
|
|
|
+ if ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );
|
|
|
|
+
|
|
renderScene( currentRenderList, scene, camera );
|
|
renderScene( currentRenderList, scene, camera );
|
|
|
|
|
|
}
|
|
}
|
|
@@ -29486,8 +29503,6 @@ class WebGLRenderer {
|
|
|
|
|
|
if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );
|
|
if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );
|
|
|
|
|
|
- if ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );
|
|
|
|
-
|
|
|
|
if ( viewport ) state.viewport( _currentViewport.copy( viewport ) );
|
|
if ( viewport ) state.viewport( _currentViewport.copy( viewport ) );
|
|
|
|
|
|
if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );
|
|
if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );
|
|
@@ -29514,9 +29529,9 @@ class WebGLRenderer {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if ( currentRenderState.state.transmissionRenderTarget === null ) {
|
|
|
|
|
|
+ if ( currentRenderState.state.transmissionRenderTarget[ camera.id ] === undefined ) {
|
|
|
|
|
|
- currentRenderState.state.transmissionRenderTarget = new WebGLRenderTarget( 1, 1, {
|
|
|
|
|
|
+ currentRenderState.state.transmissionRenderTarget[ camera.id ] = new WebGLRenderTarget( 1, 1, {
|
|
generateMipmaps: true,
|
|
generateMipmaps: true,
|
|
type: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,
|
|
type: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,
|
|
minFilter: LinearMipmapLinearFilter,
|
|
minFilter: LinearMipmapLinearFilter,
|
|
@@ -29537,7 +29552,7 @@ class WebGLRenderer {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- const transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget;
|
|
|
|
|
|
+ const transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ];
|
|
|
|
|
|
const activeViewport = camera.viewport || _currentViewport;
|
|
const activeViewport = camera.viewport || _currentViewport;
|
|
transmissionRenderTarget.setSize( activeViewport.z, activeViewport.w );
|
|
transmissionRenderTarget.setSize( activeViewport.z, activeViewport.w );
|
|
@@ -29563,6 +29578,10 @@ class WebGLRenderer {
|
|
const currentCameraViewport = camera.viewport;
|
|
const currentCameraViewport = camera.viewport;
|
|
if ( camera.viewport !== undefined ) camera.viewport = undefined;
|
|
if ( camera.viewport !== undefined ) camera.viewport = undefined;
|
|
|
|
|
|
|
|
+ currentRenderState.setupLightsView( camera );
|
|
|
|
+
|
|
|
|
+ if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );
|
|
|
|
+
|
|
renderObjects( opaqueObjects, scene, camera );
|
|
renderObjects( opaqueObjects, scene, camera );
|
|
|
|
|
|
textures.updateMultisampleRenderTarget( transmissionRenderTarget );
|
|
textures.updateMultisampleRenderTarget( transmissionRenderTarget );
|
|
@@ -30141,7 +30160,7 @@ class WebGLRenderer {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget );
|
|
|
|
|
|
+ materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[ camera.id ] );
|
|
|
|
|
|
WebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );
|
|
WebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );
|
|
|
|
|