Split.hx 954 B

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