|
@@ -176,6 +176,8 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
_vector3 = new Vector3();
|
|
_vector3 = new Vector3();
|
|
|
|
|
|
|
|
+ const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };
|
|
|
|
+
|
|
function getTargetPixelRatio() {
|
|
function getTargetPixelRatio() {
|
|
|
|
|
|
return _currentRenderTarget === null ? _pixelRatio : 1;
|
|
return _currentRenderTarget === null ? _pixelRatio : 1;
|
|
@@ -713,11 +715,9 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
};
|
|
};
|
|
|
|
|
|
- const tempScene = new Scene();
|
|
|
|
-
|
|
|
|
this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {
|
|
this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {
|
|
|
|
|
|
- if ( scene === null ) scene = tempScene; // renderBufferDirect second parameter used to be fog (could be null)
|
|
|
|
|
|
+ if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)
|
|
|
|
|
|
const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
|
|
const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
|
|
|
|
|
|
@@ -1139,14 +1139,14 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if ( ! ( camera && camera.isCamera ) ) {
|
|
|
|
|
|
+ if ( camera !== undefined && camera.isCamera !== true ) {
|
|
|
|
|
|
console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );
|
|
console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );
|
|
return;
|
|
return;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- if ( _isContextLost ) return;
|
|
|
|
|
|
+ if ( _isContextLost === true ) return;
|
|
|
|
|
|
// reset caching for this frame
|
|
// reset caching for this frame
|
|
|
|
|
|
@@ -1164,14 +1164,14 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
if ( camera.parent === null ) camera.updateMatrixWorld();
|
|
if ( camera.parent === null ) camera.updateMatrixWorld();
|
|
|
|
|
|
- if ( xr.enabled && xr.isPresenting ) {
|
|
|
|
|
|
+ if ( xr.enabled === true && xr.isPresenting === true ) {
|
|
|
|
|
|
camera = xr.getCamera( camera );
|
|
camera = xr.getCamera( camera );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
//
|
|
//
|
|
- if ( scene.isScene ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget );
|
|
|
|
|
|
+ if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget );
|
|
|
|
|
|
currentRenderState = renderStates.get( scene, camera );
|
|
currentRenderState = renderStates.get( scene, camera );
|
|
currentRenderState.init();
|
|
currentRenderState.init();
|
|
@@ -1197,7 +1197,7 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
//
|
|
//
|
|
|
|
|
|
- if ( _clippingEnabled ) _clipping.beginShadows();
|
|
|
|
|
|
+ if ( _clippingEnabled === true ) _clipping.beginShadows();
|
|
|
|
|
|
const shadowsArray = currentRenderState.state.shadowsArray;
|
|
const shadowsArray = currentRenderState.state.shadowsArray;
|
|
|
|
|
|
@@ -1205,11 +1205,11 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
currentRenderState.setupLights( camera );
|
|
currentRenderState.setupLights( camera );
|
|
|
|
|
|
- if ( _clippingEnabled ) _clipping.endShadows();
|
|
|
|
|
|
+ if ( _clippingEnabled === true ) _clipping.endShadows();
|
|
|
|
|
|
//
|
|
//
|
|
|
|
|
|
- if ( this.info.autoReset ) this.info.reset();
|
|
|
|
|
|
+ if ( this.info.autoReset === true ) this.info.reset();
|
|
|
|
|
|
if ( renderTarget !== undefined ) {
|
|
if ( renderTarget !== undefined ) {
|
|
|
|
|
|
@@ -1226,28 +1226,12 @@ function WebGLRenderer( parameters ) {
|
|
const opaqueObjects = currentRenderList.opaque;
|
|
const opaqueObjects = currentRenderList.opaque;
|
|
const transparentObjects = currentRenderList.transparent;
|
|
const transparentObjects = currentRenderList.transparent;
|
|
|
|
|
|
- if ( scene.overrideMaterial ) {
|
|
|
|
-
|
|
|
|
- const overrideMaterial = scene.overrideMaterial;
|
|
|
|
-
|
|
|
|
- if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );
|
|
|
|
- if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );
|
|
|
|
-
|
|
|
|
- } else {
|
|
|
|
-
|
|
|
|
- // opaque pass (front-to-back order)
|
|
|
|
-
|
|
|
|
- if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera );
|
|
|
|
-
|
|
|
|
- // transparent pass (back-to-front order)
|
|
|
|
-
|
|
|
|
- if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+ if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );
|
|
|
|
+ if ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );
|
|
|
|
|
|
//
|
|
//
|
|
|
|
|
|
- if ( scene.isScene ) scene.onAfterRender( _this, scene, camera );
|
|
|
|
|
|
+ if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );
|
|
|
|
|
|
//
|
|
//
|
|
|
|
|
|
@@ -1403,7 +1387,9 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- function renderObjects( renderList, scene, camera, overrideMaterial ) {
|
|
|
|
|
|
+ function renderObjects( renderList, scene, camera ) {
|
|
|
|
+
|
|
|
|
+ const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;
|
|
|
|
|
|
for ( let i = 0, l = renderList.length; i < l; i ++ ) {
|
|
for ( let i = 0, l = renderList.length; i < l; i ++ ) {
|
|
|
|
|
|
@@ -1411,7 +1397,7 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
const object = renderItem.object;
|
|
const object = renderItem.object;
|
|
const geometry = renderItem.geometry;
|
|
const geometry = renderItem.geometry;
|
|
- const material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;
|
|
|
|
|
|
+ const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
|
|
const group = renderItem.group;
|
|
const group = renderItem.group;
|
|
|
|
|
|
if ( camera.isArrayCamera ) {
|
|
if ( camera.isArrayCamera ) {
|
|
@@ -1481,6 +1467,8 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
function initMaterial( material, scene, object ) {
|
|
function initMaterial( material, scene, object ) {
|
|
|
|
|
|
|
|
+ if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
|
|
|
|
+
|
|
const materialProperties = properties.get( material );
|
|
const materialProperties = properties.get( material );
|
|
|
|
|
|
const lights = currentRenderState.state.lights;
|
|
const lights = currentRenderState.state.lights;
|
|
@@ -1622,6 +1610,8 @@ function WebGLRenderer( parameters ) {
|
|
|
|
|
|
function setProgram( camera, scene, material, object ) {
|
|
function setProgram( camera, scene, material, object ) {
|
|
|
|
|
|
|
|
+ if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
|
|
|
|
+
|
|
textures.resetTextureUnits();
|
|
textures.resetTextureUnits();
|
|
|
|
|
|
const fog = scene.fog;
|
|
const fog = scene.fog;
|
|
@@ -1631,9 +1621,9 @@ function WebGLRenderer( parameters ) {
|
|
const materialProperties = properties.get( material );
|
|
const materialProperties = properties.get( material );
|
|
const lights = currentRenderState.state.lights;
|
|
const lights = currentRenderState.state.lights;
|
|
|
|
|
|
- if ( _clippingEnabled ) {
|
|
|
|
|
|
+ if ( _clippingEnabled === true ) {
|
|
|
|
|
|
- if ( _localClippingEnabled || camera !== _currentCamera ) {
|
|
|
|
|
|
+ if ( _localClippingEnabled === true || camera !== _currentCamera ) {
|
|
|
|
|
|
const useCache =
|
|
const useCache =
|
|
camera === _currentCamera &&
|
|
camera === _currentCamera &&
|