123456789101112131415161718192021222324252627282930313233343536373839 |
- package hrt.shgraph.nodes;
- using hxsl.Ast;
- @name("Split")
- @description("Split all components of a vector into floats")
- @group("Channel")
- class Split extends ShaderNode {
- @input("RGBA") var input = SType.Vec4;
- @output("R") var r = SType.Float;
- @output("G") var g = SType.Float;
- @output("B") var b = SType.Float;
- @output("A") var a = SType.Float;
- var components = [X, Y, Z, W];
- var componentsString = ["r", "g", "b", "a"];
- override public function computeOutputs() {
- addOutput("r", TFloat);
- addOutput("g", TFloat);
- addOutput("b", TFloat);
- addOutput("a", TFloat);
- }
- override public function build(key : String) : TExpr {
- var compIdx = componentsString.indexOf(key);
- return { e: TBinop(OpAssign, {
- e: TVar(getOutput(key)),
- p: null,
- t: getOutput(key).type
- }, {e: TSwiz(input.getVar(TVec(4, VFloat)), [components[compIdx]]), p: null, t: getOutput(key).type }),
- p: null,
- t: getOutput(key).type
- };
- }
- }
|