import { TempNode } from '../core/TempNode.js'; import { ConstNode } from '../core/ConstNode.js'; import { FunctionNode } from '../core/FunctionNode.js'; class LuminanceNode extends TempNode { constructor( rgb ) { super( 'f' ); this.rgb = rgb; } generate( builder, output ) { const luminance = builder.include( LuminanceNode.Nodes.luminance ); return builder.format( luminance + '( ' + this.rgb.build( builder, 'v3' ) + ' )', this.getType( builder ), output ); } copy( source ) { super.copy( source ); this.rgb = source.rgb; return this; } toJSON( meta ) { let data = this.getJSONNode( meta ); if ( ! data ) { data = this.createJSONNode( meta ); data.rgb = this.rgb.toJSON( meta ).uuid; } return data; } } LuminanceNode.Nodes = ( function () { const LUMA = new ConstNode( 'vec3 LUMA vec3( 0.2125, 0.7154, 0.0721 )' ); // Algorithm from Chapter 10 of Graphics Shaders const luminance = new FunctionNode( /* glsl */` float luminance( vec3 rgb ) { return dot( rgb, LUMA ); }` , [ LUMA ] ); return { LUMA: LUMA, luminance: luminance }; } )(); LuminanceNode.prototype.nodeType = 'Luminance'; export { LuminanceNode };