ShaderParam.hx 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package hrt.shgraph;
  2. using hxsl.Ast;
  3. @noheader()
  4. @width(120)
  5. @color("#d6d6d6")
  6. class ShaderParam extends ShaderNode {
  7. @output() var output = SType.Variant;
  8. @prop() public var parameterId : Int;
  9. @prop() public var perInstance : Bool;
  10. public var variable : TVar;
  11. override public function computeOutputs() {
  12. if (variable != null)
  13. addOutput("output", variable.type);
  14. else
  15. removeOutput("output");
  16. }
  17. override public function getOutput(key : String) : TVar {
  18. return variable;
  19. }
  20. override public function loadProperties(props : Dynamic) {
  21. parameterId = Reflect.field(props, "parameterId");
  22. perInstance = Reflect.field(props, "perInstance");
  23. }
  24. override public function saveProperties() : Dynamic {
  25. var parameters = {
  26. parameterId: parameterId,
  27. perInstance: perInstance
  28. };
  29. return parameters;
  30. }
  31. override public function build(key : String) : TExpr {
  32. if (variable != null){
  33. if (variable.qualifiers == null)
  34. variable.qualifiers = [];
  35. if (perInstance)
  36. if (!variable.qualifiers.contains(PerInstance(1)))
  37. variable.qualifiers.push(PerInstance(1));
  38. else
  39. if (variable.qualifiers.contains(PerInstance(1)))
  40. variable.qualifiers.remove(PerInstance(1));
  41. }
  42. return null;
  43. }
  44. #if editor
  45. private var parameterName : String;
  46. private var eltName : hide.Element;
  47. private var parameterDisplay : String;
  48. private var displayDiv : hide.Element;
  49. public function setName(s : String) {
  50. parameterName = s;
  51. if (eltName != null)
  52. eltName.html(s);
  53. }
  54. public function setDisplayValue(value : String) {
  55. parameterDisplay = value;
  56. switch (this.variable.type) {
  57. case TFloat:
  58. if (displayDiv != null)
  59. displayDiv.html(value);
  60. case TSampler2D:
  61. if (displayDiv != null)
  62. displayDiv.css("background-image", 'url(${value})');
  63. case TVec(4, VFloat):
  64. if (displayDiv != null)
  65. displayDiv.css("background-color", value);
  66. default:
  67. }
  68. }
  69. override public function getPropertiesHTML(width : Float) : Array<hide.Element> {
  70. var elements = super.getPropertiesHTML(width);
  71. var height = 25;
  72. switch (this.variable.type) {
  73. case TFloat:
  74. displayDiv = new hide.Element('<div class="float-preview" ></div>');
  75. height += 20;
  76. case TSampler2D:
  77. displayDiv = new hide.Element('<div class="texture-preview" ></div>');
  78. height += 50;
  79. case TVec(4, VFloat):
  80. displayDiv = new hide.Element('<div class="color-preview" ></div>');
  81. height += 25;
  82. default:
  83. displayDiv = null;
  84. }
  85. var element = new hide.Element('<div style="width: 110px; height: ${height}px"></div>');
  86. if (displayDiv != null) {
  87. setDisplayValue(parameterDisplay);
  88. displayDiv.appendTo(element);
  89. }
  90. eltName = new hide.Element('<div class="paramVisible" >${parameterName}</div>').appendTo(element);
  91. elements.push(element);
  92. return elements;
  93. }
  94. #end
  95. }