ShaderFunction.hx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package hrt.shgraph;
  2. using hxsl.Ast;
  3. class ShaderFunction extends ShaderNode {
  4. @output("") var output = SType.Variant;
  5. var func : TGlobal;
  6. public function new(func : TGlobal) {
  7. this.func = func;
  8. }
  9. override public function build(key : String) : TExpr {
  10. var args = [];
  11. var varArgs = [];
  12. for (k in getInputInfoKeys()) {
  13. if (getInputInfo(k).hasProperty && getInput(k) == null) {
  14. var value : Dynamic = Reflect.field(this, "prop_"+k);
  15. if (value == null)
  16. value = 0;
  17. args.push({ name: k, type: TFloat });
  18. varArgs.push(new NodeVar(new hrt.shgraph.nodes.FloatConst(value), "output").getVar());
  19. } else {
  20. args.push({ name: k, type: getInput(k).getType() });
  21. var wantedType = ShaderType.getType(getInputInfo(k).type);
  22. varArgs.push(getInput(k).getVar((wantedType != null) ? wantedType : null));
  23. }
  24. }
  25. return {
  26. p : null,
  27. t : output.type,
  28. e : TBinop(OpAssign, {
  29. e: TVar(output),
  30. p: null,
  31. t: output.type
  32. }, {
  33. e: TCall({
  34. e: TGlobal(func),
  35. p: null,
  36. t: TFun([
  37. {
  38. ret: output.type,
  39. args: args
  40. }
  41. ])
  42. }, varArgs),
  43. p: null,
  44. t: output.type
  45. })
  46. };
  47. }
  48. }