SubGraph.hx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package hrt.shgraph.nodes;
  2. using hxsl.Ast;
  3. @name("SubGraph")
  4. @description("Include a subgraph")
  5. @width(200)
  6. @alwaysshowinputs()
  7. @:access(hrt.shgraph.NodeGenContext)
  8. @:access(hrt.shgraph.NodeGenContextSubGraph)
  9. class SubGraph extends ShaderNode {
  10. @prop() public var pathShaderGraph : String;
  11. override function new(path: String) {
  12. pathShaderGraph = path;
  13. }
  14. override public function generate(ctx: NodeGenContext) {
  15. #if !editor
  16. var shader = cast hxd.res.Loader.currentInstance.load(pathShaderGraph).toPrefab().load();
  17. #else
  18. var shader = cast hide.Ide.inst.loadPrefab(pathShaderGraph);
  19. #end
  20. var graph = shader.getGraph(ctx.domain);
  21. var genCtx = new ShaderGraphGenContext(graph, false);
  22. genCtx.generate(new NodeGenContext.NodeGenContextSubGraph(ctx));
  23. }
  24. override public function getInputs() : Array<ShaderNode.InputInfo> {
  25. #if !editor
  26. var shader = cast hxd.res.Loader.currentInstance.load(pathShaderGraph).toPrefab().load();
  27. #else
  28. var shader = cast hide.Ide.inst.loadPrefab(pathShaderGraph);
  29. #end
  30. var graph = shader.getGraph(hrt.shgraph.Domain.Fragment);
  31. var genCtx = new ShaderGraphGenContext(graph, false);
  32. var nodeGenCtx = new NodeGenContext.NodeGenContextSubGraph(null);
  33. genCtx.generate(nodeGenCtx);
  34. var inputs: Array<ShaderNode.InputInfo> = [];
  35. for (name => info in nodeGenCtx.globalInVars) {
  36. var global = nodeGenCtx.globalVars.get(name);
  37. var t = typeToSgType(global.v.type);
  38. inputs[info.id] = {name: name, type: hrt.shgraph.ShaderGraph.typeToSgType(info.type)};
  39. }
  40. return inputs;
  41. }
  42. override public function getOutputs() : Array<ShaderNode.InputInfo> {
  43. #if !editor
  44. var shader = cast hxd.res.Loader.currentInstance.load(pathShaderGraph).toPrefab().load();
  45. #else
  46. var shader = cast hide.Ide.inst.loadPrefab(pathShaderGraph);
  47. #end
  48. var graph = shader.getGraph(hrt.shgraph.Domain.Fragment);
  49. var genCtx = new ShaderGraphGenContext(graph, false);
  50. var nodeGenCtx = new NodeGenContext.NodeGenContextSubGraph(null);
  51. genCtx.generate(nodeGenCtx);
  52. var outputs: Array<ShaderNode.InputInfo> = [];
  53. for (name => info in nodeGenCtx.globalOutVars) {
  54. outputs[info.id] = {name: name, type: hrt.shgraph.ShaderGraph.typeToSgType(info.type)};
  55. }
  56. return outputs;
  57. }
  58. }