67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import ContextNode from '../core/ContextNode.js';
 | |
| import { addNodeClass } from '../core/Node.js';
 | |
| import { addNodeElement, nodeProxy, float, vec3 } from '../shadernode/ShaderNode.js';
 | |
| 
 | |
| class LightingContextNode extends ContextNode {
 | |
| 
 | |
| 	constructor( node, lightingModel = null, backdropNode = null, backdropAlphaNode = null ) {
 | |
| 
 | |
| 		super( node );
 | |
| 
 | |
| 		this.lightingModel = lightingModel;
 | |
| 		this.backdropNode = backdropNode;
 | |
| 		this.backdropAlphaNode = backdropAlphaNode;
 | |
| 
 | |
| 		this._context = null;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	getContext() {
 | |
| 
 | |
| 		const { backdropNode, backdropAlphaNode } = this;
 | |
| 
 | |
| 		const directDiffuse = vec3().temp( 'directDiffuse' ),
 | |
| 			directSpecular = vec3().temp( 'directSpecular' ),
 | |
| 			indirectDiffuse = vec3().temp( 'indirectDiffuse' ),
 | |
| 			indirectSpecular = vec3().temp( 'indirectSpecular' );
 | |
| 
 | |
| 		const reflectedLight = {
 | |
| 			directDiffuse,
 | |
| 			directSpecular,
 | |
| 			indirectDiffuse,
 | |
| 			indirectSpecular
 | |
| 		};
 | |
| 
 | |
| 		const context = {
 | |
| 			radiance: vec3().temp( 'radiance' ),
 | |
| 			irradiance: vec3().temp( 'irradiance' ),
 | |
| 			iblIrradiance: vec3().temp( 'iblIrradiance' ),
 | |
| 			ambientOcclusion: float( 1 ).temp( 'ambientOcclusion' ),
 | |
| 			reflectedLight,
 | |
| 			backdrop: backdropNode,
 | |
| 			backdropAlpha: backdropAlphaNode
 | |
| 		};
 | |
| 
 | |
| 		return context;
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	setup( builder ) {
 | |
| 
 | |
| 		this.context = this._context || ( this._context = this.getContext() );
 | |
| 		this.context.lightingModel = this.lightingModel || builder.context.lightingModel;
 | |
| 
 | |
| 		return super.setup( builder );
 | |
| 
 | |
| 	}
 | |
| 
 | |
| }
 | |
| 
 | |
| export default LightingContextNode;
 | |
| 
 | |
| export const lightingContext = nodeProxy( LightingContextNode );
 | |
| 
 | |
| addNodeElement( 'lightingContext', lightingContext );
 | |
| 
 | |
| addNodeClass( 'LightingContextNode', LightingContextNode );
 |