Split.hx 954 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. package hrt.shgraph.nodes;
  2. using hxsl.Ast;
  3. @name("Split")
  4. @description("Split all components of a vector into floats")
  5. @group("Channel")
  6. class Split extends ShaderNode {
  7. @input("RGBA") var input = SType.Vec4;
  8. @output("R") var r = SType.Float;
  9. @output("G") var g = SType.Float;
  10. @output("B") var b = SType.Float;
  11. @output("A") var a = SType.Float;
  12. var components = [X, Y, Z, W];
  13. var componentsString = ["r", "g", "b", "a"];
  14. override public function computeOutputs() {
  15. addOutput("r", TFloat);
  16. addOutput("g", TFloat);
  17. addOutput("b", TFloat);
  18. addOutput("a", TFloat);
  19. }
  20. override public function build(key : String) : TExpr {
  21. var compIdx = componentsString.indexOf(key);
  22. return { e: TBinop(OpAssign, {
  23. e: TVar(getOutput(key)),
  24. p: null,
  25. t: getOutput(key).type
  26. }, {e: TSwiz(input.getVar(TVec(4, VFloat)), [components[compIdx]]), p: null, t: getOutput(key).type }),
  27. p: null,
  28. t: getOutput(key).type
  29. };
  30. }
  31. }