super-hero/extensions/shader-graph/shader-node/assets/operation/manual/channel/combine.ts

54 lines
1.8 KiB
TypeScript

import { Vec4, Vec3, Vec2 } from 'cc';
import { register } from '../../../graph';
import { ShaderNode } from '../../base';
import { ConcretePrecisionType } from '../../type';
import { slot } from '../../utils';
@register({
menu: 'Channel/Combine',
title: 'Combine',
})
export default class CombineNode extends ShaderNode {
concretePrecisionType = ConcretePrecisionType.Fixed;
data = {
inputs: [
slot('R', 0, 'float', 'vector'),
slot('G', 0, 'float', 'vector'),
slot('B', 0, 'float', 'vector'),
slot('A', 0, 'float', 'vector'),
],
outputs: [
slot('RGBA', Vec4.ZERO, 'vec4', 'vector'),
slot('RGB', Vec3.ZERO, 'vec3', 'vector'),
slot('RG', Vec2.ZERO, 'vec2', 'vector'),
],
};
generateCode() {
const slotR = this.getSlotWithSlotName('R');
const slotG = this.getSlotWithSlotName('G');
const slotB = this.getSlotWithSlotName('B');
const slotA = this.getSlotWithSlotName('A');
const slotRGBA = this.getSlotWithSlotName('RGBA');
const slotRGB = this.getSlotWithSlotName('RGB');
const slotRG = this.getSlotWithSlotName('RG');
let code = '';
if (slotRGBA && slotRGBA.connectSlot) {
code += `${slotRGBA?.varDefine} = vec4(${slotR?.slotValue}, ${slotG?.slotValue}, ${slotB?.slotValue}, ${slotA?.slotValue});\n`;
}
if (slotRGB && slotRGB.connectSlot) {
code += `${slotRGB?.varDefine} = vec3(${slotR?.slotValue}, ${slotG?.slotValue}, ${slotB?.slotValue});\n`;
}
if (slotRG && slotRG.connectSlot) {
code += `${slotRG?.varDefine} = vec2(${slotR?.slotValue}, ${slotG?.slotValue});\n`;
}
return code;
}
}