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 };