addToRenderList method

void addToRenderList(
  1. WebGLRenderList renderList,
  2. Object3D scene
)

Implementation

void addToRenderList(WebGLRenderList renderList, Object3D scene) {
	final background = getBackground( scene );

	if ( background != null && ( background is CubeTexture || (background is Texture && background.mapping == CubeUVReflectionMapping)) ) {
		if ( boxMesh == null ) {
			boxMesh = Mesh(
				BoxGeometry( 1, 1, 1 ),
				ShaderMaterial.fromMap( {
					'name': 'BackgroundCubeMaterial',
					'uniforms': cloneUniforms( shaderLib['backgroundCube']['uniforms'] ),
					'vertexShader': shaderLib['backgroundCube']['vertexShader'],
					'fragmentShader': shaderLib['backgroundCube']['fragmentShader'],
					'side': BackSide,
					'depthTest': false,
					'depthWrite': false,
					'fog': false
				})
			);

			boxMesh!.geometry?.deleteAttributeFromString( 'normal' );
			boxMesh!.geometry?.deleteAttributeFromString( 'uv' );

        boxMesh!.onBeforeRender = ({
          renderer,
          scene,
          camera,
          renderTarget,
          mesh,
          geometry,
          material,
          group
        }) {
          boxMesh!.matrixWorld.copyPosition(camera!.matrixWorld);
        };

        planeMesh?.material?.envMap = planeMesh?.material?.uniforms['envMap']['value'];
			objects.update(boxMesh!);
		}

      (scene as Scene);
		_e1.copy(scene.backgroundRotation);

		// accommodate left-handed frame
		_e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;

		if ( background is CubeTexture && !background.isRenderTargetTexture) {
			// environment maps which are not cube render targets or PMREMs follow a different convention
			_e1.y *= - 1;
			_e1.z *= - 1;
		}

		boxMesh!.material!.uniforms['envMap']['value'] = background;
		boxMesh!.material!.uniforms['flipEnvMap']['value'] = ( background is CubeTexture && !background.isRenderTargetTexture) ? - 1 : 1;
		boxMesh!.material!.uniforms['backgroundBlurriness']['value'] = scene.backgroundBlurriness;
		boxMesh!.material!.uniforms['backgroundIntensity']['value'] = scene.backgroundIntensity;
		boxMesh!.material!.uniforms['backgroundRotation']['value'].setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );
		boxMesh!.material!.toneMapped = ColorManagement.getTransfer( ColorSpace.fromString( background.colorSpace )) != SRGBTransfer;

		if ( currentBackground != background ||
			currentBackgroundVersion != background.version ||
			currentTonemapping != renderer.toneMapping ) {
			boxMesh!.material?.needsUpdate = true;

			currentBackground = background;
			currentBackgroundVersion = background.version;
			currentTonemapping = renderer.toneMapping;
		}

		boxMesh!.layers.enableAll();

		// push to the pre-sorted opaque render list
		renderList.unshift(boxMesh!, boxMesh!.geometry, boxMesh!.material, 0, 0, null );

	}
    else if ( background != null && background is Texture ) {
		if (planeMesh == null ) {

			planeMesh = Mesh(
				PlaneGeometry( 2, 2 ),
				ShaderMaterial.fromMap( {
					'name': 'BackgroundMaterial',
					'uniforms': cloneUniforms( shaderLib['background']['uniforms'] ),
					'vertexShader': shaderLib['background']['vertexShader'],
					'fragmentShader': shaderLib['background']['fragmentShader'],
					'side': FrontSide,
					'depthTest': false,
					'depthWrite': false,
					'fog': false
				} )
			);

			planeMesh!.geometry?.deleteAttributeFromString( 'normal' );
        planeMesh!.material?.map = planeMesh!.material!.uniforms['t2D']['value'];

			objects.update(planeMesh!);
		}

		planeMesh!.material?.uniforms['t2D']['value'] = background;
		planeMesh!.material?.uniforms['backgroundIntensity']['value'] = (scene as Scene).backgroundIntensity;
		planeMesh!.material?.toneMapped = ColorManagement.getTransfer( ColorSpace.fromString(background.colorSpace)) != SRGBTransfer;

		if ( background.matrixAutoUpdate) {
			background.updateMatrix();
		}

		planeMesh!.material?.uniforms['uvTransform']['value'].setFrom( background.matrix );

		if ( currentBackground != background ||
			currentBackgroundVersion != background.version ||
			currentTonemapping != renderer.toneMapping ) {

			planeMesh!.material?.needsUpdate = true;

			currentBackground = background;
			currentBackgroundVersion = background.version;
			currentTonemapping = renderer.toneMapping;
		}

		planeMesh!.layers.enableAll();

		// push to the pre-sorted opaque render list
		renderList.unshift( planeMesh!, planeMesh!.geometry, planeMesh!.material, 0, 0, null );
	}
}