Variables.hx 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package hrt.shgraph;
  2. enum abstract Global(Int) to Int {
  3. var PixelColor;
  4. var PixelColorColor;
  5. var PixelColorAlpha;
  6. var Time;
  7. var PixelSize;
  8. var Global;
  9. var CalculatedUV;
  10. var Input;
  11. var UV;
  12. var RelativePosition;
  13. var TransformedPosition;
  14. var ProjectedPosition;
  15. var Normal;
  16. var FakeNormal; // used as replacement for normal in previews
  17. var TransformedNormal;
  18. var Depth;
  19. var Metalness;
  20. var Roughness;
  21. var Emissive;
  22. var Occlusion;
  23. var PreviewSelect;
  24. var PreviewColor;
  25. var Camera;
  26. var CameraPosition;
  27. // Particles
  28. var ParticleLife;
  29. var ParticleLifeTime;
  30. var ParticleRandom;
  31. // Internal Shadergraph vars
  32. var SGPixelColor;
  33. var SGPixelAlpha;
  34. var EmitterPosition;
  35. }
  36. enum VariableKind {
  37. KVar(kind: hxsl.Ast.VarKind, ?parent: Global, ?def: Dynamic);
  38. KSwizzle(global: Global, swiz: Array<hxsl.Ast.Component>);
  39. }
  40. typedef GlobalInfo = {type: hxsl.Ast.Type, name: String, varkind: VariableKind, ?__init__: TExpr, ?_fullNameCache: String};
  41. class Variables {
  42. public static var previewSelectName = "previewSelect_SG";
  43. public static var Globals : Array<GlobalInfo> = {
  44. var g : Array<GlobalInfo> = [];
  45. g[PixelColor] = {type: TVec(4, VFloat), name: "pixelColor", varkind: KVar(Local)};
  46. g[CalculatedUV] = {type: TVec(2, VFloat), name: "calculatedUV", varkind: KVar(Var)};
  47. g[Time] = {type: TFloat, name: "time", varkind: KVar(Global, Global)};
  48. g[PixelSize] = {type: TVec(2, VFloat), name: "pixelSize", varkind: KVar(Global, Global)};
  49. g[Global] = {type: TVoid, name: "global", varkind: KVar(Global)};
  50. g[Input] = {type: TVoid, name: "input", varkind: KVar(Input)};
  51. g[UV] = {type: TVec(2, VFloat), name: "uv", varkind: KVar(Input, Input)};
  52. g[RelativePosition] = {type: TVec(3, VFloat), name: "relativePosition", varkind: KVar(Local)};
  53. g[TransformedPosition] = {type: TVec(3, VFloat), name: "transformedPosition", varkind: KVar(Local)};
  54. g[ProjectedPosition] = {type: TVec(4, VFloat), name: "projectedPosition", varkind: KVar(Local)};
  55. g[Normal] = {type: TVec(3, VFloat), name: "normal", varkind: KVar(Input, Input)};
  56. g[FakeNormal] = {type: TVec(3, VFloat), name: "fakeNormal", varkind: KVar(Local)};
  57. g[TransformedNormal] = {type: TVec(3, VFloat), name: "transformedNormal", varkind: KVar(Local)};
  58. g[Depth] = {type: TFloat, name: "depth", varkind: KVar(Local)};
  59. g[Metalness] = {type: TFloat, name: "metalness", varkind: KVar(Local)};
  60. g[Roughness] = {type: TFloat, name: "roughness", varkind: KVar(Local)};
  61. g[Emissive] = {type: TFloat, name: "emissive", varkind: KVar(Local)};
  62. g[Occlusion] = {type: TFloat, name: "occlusion", varkind: KVar(Local)};
  63. g[PreviewSelect] = {type: TInt, name: previewSelectName, varkind: KVar(Param,null, -1)};
  64. g[PreviewColor] = {type: TVec(4,VFloat), name: "_previewColor", varkind: KVar(Local)};
  65. g[SGPixelColor] = {type: TVec(3, VFloat), name: "_sg_out_color", varkind: KSwizzle(PixelColor, [X,Y,Z])};
  66. g[SGPixelAlpha] = {type: TFloat, name: "_sg_out_alpha", varkind: KSwizzle(PixelColor, [W])};
  67. g[ParticleLife] = {type: TFloat, name: "particleLife", varkind: KVar(Local)};
  68. g[ParticleLifeTime] = {type: TFloat, name: "particleLifeTime", varkind: KVar(Local)};
  69. g[ParticleRandom] = {type: TFloat, name: "particleRandom", varkind: KVar(Local)};
  70. g[Camera] = {type: TVoid, name: "camera", varkind: KVar(Local)};
  71. g[CameraPosition] = {type: TVec(3, VFloat), name: "position", varkind: KVar(Local, Camera)};
  72. g[EmitterPosition] = {type: TVec(3, VFloat), name: "emitterPosition", varkind: KVar(Local, null), __init__: AstTools.makeVec([0.0,0.0,0.0])};
  73. g;
  74. };
  75. public static function getFullPath(g: GlobalInfo) : String {
  76. if (g._fullNameCache != null)
  77. return g._fullNameCache;
  78. var path = g.name;
  79. switch (g.varkind) {
  80. case KVar(_, parent, _):
  81. if (parent != null)
  82. path = getFullPath(Globals[cast parent]) + "." + path;
  83. case KSwizzle(_, _):
  84. // we do nothing for swizzles as they are temporary local variables
  85. }
  86. g._fullNameCache = path;
  87. return path;
  88. }
  89. public static function getGlobalNameMap() {
  90. static var GlobalNameMap : Map<String, Global>;
  91. if (GlobalNameMap == null)
  92. GlobalNameMap = [
  93. for (id => g in Globals) if (g != null) getFullPath(g) => (cast id:Global)
  94. ];
  95. return GlobalNameMap;
  96. }
  97. }