2
0

Combine.hx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package hrt.shgraph.nodes;
  2. import hxsl.Types.Vec;
  3. import hxsl.*;
  4. using hxsl.Ast;
  5. @name("Combine")
  6. @description("Create a vector of size 4 from 4 floats")
  7. @group("Channel")
  8. class Combine extends ShaderNode {
  9. @input("R") var r = SType.Float;
  10. @input("G") var g = SType.Float;
  11. @input("B") var b = SType.Float;
  12. @input("A") var a = SType.Float;
  13. @output() var output = SType.Vec4;
  14. var components = [X, Y, Z, W];
  15. var componentsString = ["r", "g", "b", "a"];
  16. function generateOutputComp(idx : Int) : TExpr {
  17. var comp = components[idx];
  18. var input = getInput(componentsString[idx]);
  19. return {
  20. p : null,
  21. t : output.type,
  22. e : TBinop(OpAssign, {
  23. e: TSwiz({
  24. e: TVar(output),
  25. p: null,
  26. t : output.type
  27. }, [comp]),
  28. p: null,
  29. t: TVec(1, VFloat)
  30. }, input.getVar())
  31. };
  32. }
  33. override public function createOutputs() {
  34. addOutput("output", TVec(4, VFloat));
  35. }
  36. override public function build(key : String) : TExpr {
  37. return {
  38. p : null,
  39. t : output.type,
  40. e : TBinop(OpAssign, {
  41. e: TVar(output),
  42. p: null,
  43. t : output.type
  44. },
  45. {
  46. e: TCall({
  47. e: TGlobal(Vec4),
  48. p: null,
  49. t: TFun([
  50. {
  51. ret: output.type,
  52. args: [
  53. { name: "r", type : TFloat },
  54. { name: "g", type : TFloat },
  55. { name: "b", type : TFloat },
  56. { name: "a", type : TFloat }]
  57. }
  58. ])
  59. }, [(r != null) ? r.getVar() : { e: TConst(CFloat(0.0)), p: null, t: TFloat },
  60. (g != null) ? g.getVar() : { e: TConst(CFloat(0.0)), p: null, t: TFloat },
  61. (b != null) ? b.getVar() : { e: TConst(CFloat(0.0)), p: null, t: TFloat },
  62. (a != null) ? a.getVar() : { e: TConst(CFloat(1.0)), p: null, t: TFloat }]
  63. ),
  64. p: null,
  65. t: output.type
  66. })
  67. };
  68. }
  69. }