Source: scene/composer.js

import { Reporter } from '../reporter/reporter.js';
import { checkPropTypes } from '../lib.js';

import {
    WebGLRenderer,
    sRGBEncoding,
    Camera,
    Scene,
    Color,
    ReinhardToneMapping,
    LinearEncoding,
    LinearFilter,
    RGBAFormat,
    FloatType,
    LinearToneMapping
} from '../../node_modules/three/build/three.module.js';



//THREE POST PROCESSING
import { RenderPass } from '../../node_modules/three/examples/jsm/postprocessing/RenderPass.js';
import { EffectComposer } from '../../node_modules/three/examples/jsm/postprocessing/EffectComposer.js';
import { ShaderPass } from '../../node_modules/three/examples/jsm/postprocessing/ShaderPass.js';
import { UnrealBloomPass } from '../../node_modules/three/examples/jsm/postprocessing/UnrealBloomPass.js';
import { TAARenderPass } from '../../node_modules/three/examples/jsm/postprocessing/TAARenderPass.js';

//THREE SHADERS
import { GammaCorrectionShader } from '../../node_modules/three/examples/jsm/shaders/GammaCorrectionShader.js';
import { CopyShader } from '../../node_modules/three/examples/jsm/shaders/CopyShader.js';
import { FXAAShader } from '../../node_modules/three/examples/jsm/shaders/FXAAShader.js';
import { BuildableComponent } from '../package/component/buildable_component.js';



/** ProductBuilder Composer*/
class Composer {  //extends BuildableComponent

    /**
    * @param {Reporter} reporter
    * @param {Object} settings
    * @param {UUID} [settings.id] 
    * @param {Scene} [settings.scene] 
    * @param {Camera} [settings.camera] 
    */

   constructor( reporter, settings ) {

    //super( reporter, settings );

        checkPropTypes(
            settings,
            {
                
            },    
            {
                scene: Scene,
                camera: Camera
            }
        );

        this._scene = settings.scene
        this._camera = settings.camera
        
        this._renderer.setPixelRatio( window.devicePixelRatio );
        //this._renderer.setSize( window.innerWidth, window.innerHeight );
        //this._renderer.setSize( 512, 512)

    } 

    /** @type { WebGLRenderer } */

    _renderer = new WebGLRenderer(
        {
            'antialias': false,
            'alpha': true,
            'preserveDrawingBuffer': true,
            'precision': "highp",
            'premultipliedAlpha': true,
            'stencil': false,
            'logarithmicDepthBuffer': false,
            'toneMapping': LinearToneMapping, //ReinhardToneMapping, //THREE.NoToneMapping //; // Met NoToneMapping werkt de exposure niet! //CineonToneMapping, //THREE.ACESFilmicToneMapping //THREE.
            'toneMappingExposure': 1,
            'toneMappingWhitePoint': 1,
            'gammaFactor': 1,
            'outputEncoding': LinearEncoding, //sRGBEncoding, //
            'physicallyCorrectLights': true,

            'minFilter': LinearFilter,
            'magFilter': LinearFilter,
            'format': RGBAFormat,
            'stencilBuffer': false,
            'type': FloatType // line not present in original code
            
            // renderer.shadowMap.enabled		= manager.viewSetting === 'top' ? false : true
            // renderer.shadowMap.needsUpdate	= true

        }
    );






    async build( renderer ) {

        //const renderer = this._renderer

        console.log( renderer )


        //-----------------  COMPOSER --------------------------------------
        // var renderPass = new RenderPass( view._scene, camera );
        //     renderPass.name = " Render Pass"
        //     renderPass.clearAlpha = 1;
        // //renderPass.clear = false 
        // //renderPass.clearColor = new THREE.Color(1, 1, 1);

        // var pixelRatio = renderer.getPixelRatio();

        // var effectFXAA = new ShaderPass( FXAAShader );
        //     effectFXAA.uniforms[ 'resolution' ].value.x = 1 / ( window.innerWidth * pixelRatio );
        //     effectFXAA.uniforms[ 'resolution' ].value.y = 1 / ( window.innerHeight * pixelRatio );
        //     effectFXAA.name = "FXAA Pass"

        // var gammaCorrectionPass = new ShaderPass( GammaCorrectionShader );
        //     gammaCorrectionPass.name = "Gamma Corretion Pass"

        // composer = new EffectComposer( renderer ) //).setRenderTarget( renderTargetComposer ) );
        // composer.addPass( renderPass );
        // composer.addPass( effectFXAA );  
        // composer.addPass( gammaCorrectionPass );  




        const renderPass = new RenderPass( this._scene, this._camera );
            renderPass.name = " Render Pass"
            renderPass.clearAlpha = 1;
            //renderPass.clear = false 
            //renderPass.clearColor = new Color(1, 1, 1);
            

        var pixelRatio = renderer.getPixelRatio();

        //FXAA (ANTI ALIASING)
        var effectFXAA = new ShaderPass( FXAAShader );
            effectFXAA.uniforms[ 'resolution' ].value.x = 1 / ( window.innerWidth * pixelRatio );
            effectFXAA.uniforms[ 'resolution' ].value.y = 1 / ( window.innerHeight * pixelRatio );
            effectFXAA.name = "FXAA Pass"

        // GAMMA CORRECTION
        var gammaCorrectionPass = new ShaderPass( GammaCorrectionShader );
            gammaCorrectionPass.name = "Gamma Corretion Pass"

        // COMPOSER
        var composer = new EffectComposer( renderer ) //).setRenderTarget( renderTargetComposer ) );
            composer.addPass( renderPass );
            composer.addPass( effectFXAA );  
            //composer.addPass( gammaCorrectionPass ); 
            //console.log ( composer.passes )

        this._composer = composer;

        return this;

    }

 
}

export { Composer };