54 lines
1.8 KiB
TypeScript
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;
|
|
}
|
|
}
|