RenderPathPreview.hx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package arm.render;
  2. import iron.RenderPath;
  3. import arm.ui.UITrait;
  4. import arm.Tool;
  5. @:access(iron.RenderPath)
  6. class RenderPathPreview {
  7. public static function commandsPreview() {
  8. var path = RenderPathDeferred.path;
  9. #if rp_gbuffer2
  10. {
  11. path.setTarget("mgbuffer2");
  12. path.clearTarget(0xff000000);
  13. path.setTarget("mgbuffer0", ["mgbuffer1", "mgbuffer2"]);
  14. }
  15. #else
  16. {
  17. path.setTarget("mgbuffer0", ["mgbuffer1"]);
  18. }
  19. #end
  20. path.clearTarget(null, 1.0);
  21. path.drawMeshes("mesh");
  22. // ---
  23. // Deferred light
  24. // ---
  25. #if (!kha_opengl && !kha_direct3d12)
  26. path.setDepthFrom("mtex", "mgbuffer1"); // Unbind depth so we can read it
  27. #end
  28. path.setTarget("mtex");
  29. path.bindTarget("_mmain", "gbufferD");
  30. path.bindTarget("mgbuffer0", "gbuffer0");
  31. path.bindTarget("mgbuffer1", "gbuffer1");
  32. #if (rp_ssgi != "Off")
  33. {
  34. path.bindTarget("empty_white", "ssaotex");
  35. }
  36. #end
  37. path.drawShader("shader_datas/deferred_light/deferred_light");
  38. #if (!kha_opengl && !kha_direct3d12)
  39. path.setDepthFrom("mtex", "mgbuffer0"); // Re-bind depth
  40. #end
  41. path.setTarget("mtex"); // Re-binds depth
  42. path.drawSkydome("shader_datas/world_pass/world_pass");
  43. var framebuffer = "texpreview";
  44. var selectedMat = UITrait.inst.worktab.position == SpaceScene ? Context.materialScene : Context.material;
  45. RenderPath.active.renderTargets.get("texpreview").image = selectedMat.image;
  46. RenderPath.active.renderTargets.get("texpreview_icon").image = selectedMat.imageIcon;
  47. path.setTarget(framebuffer);
  48. path.bindTarget("mtex", "tex");
  49. #if rp_compositordepth
  50. {
  51. path.bindTarget("_mmain", "gbufferD");
  52. }
  53. #end
  54. path.drawShader("shader_datas/compositor_pass/compositor_pass");
  55. path.setTarget("texpreview_icon");
  56. path.bindTarget("texpreview", "tex");
  57. path.drawShader("shader_datas/supersample_resolve/supersample_resolve");
  58. }
  59. public static function commandsDecal() {
  60. var path = RenderPathDeferred.path;
  61. #if rp_gbuffer2
  62. {
  63. path.setTarget("gbuffer2");
  64. path.clearTarget(0xff000000);
  65. path.setTarget("gbuffer0", ["gbuffer1", "gbuffer2"]);
  66. }
  67. #else
  68. {
  69. path.setTarget("gbuffer0", ["gbuffer1"]);
  70. }
  71. #end
  72. path.clearTarget(null, 1.0);
  73. path.drawMeshes("mesh");
  74. // ---
  75. // Deferred light
  76. // ---
  77. #if (!kha_opengl && !kha_direct3d12)
  78. path.setDepthFrom("tex", "gbuffer1"); // Unbind depth so we can read it
  79. #end
  80. path.setTarget("tex");
  81. path.bindTarget("_main", "gbufferD");
  82. path.bindTarget("gbuffer0", "gbuffer0");
  83. path.bindTarget("gbuffer1", "gbuffer1");
  84. #if (rp_ssgi != "Off")
  85. {
  86. path.bindTarget("empty_white", "ssaotex");
  87. }
  88. #end
  89. path.drawShader("shader_datas/deferred_light/deferred_light");
  90. #if (!kha_opengl && !kha_direct3d12)
  91. path.setDepthFrom("tex", "gbuffer0"); // Re-bind depth
  92. #end
  93. path.setTarget("tex"); // Re-binds depth
  94. path.drawSkydome("shader_datas/world_pass/world_pass");
  95. var framebuffer = "texpreview";
  96. RenderPath.active.renderTargets.get("texpreview").image = UITrait.inst.decalImage;
  97. path.setTarget(framebuffer);
  98. path.bindTarget("tex", "tex");
  99. #if rp_compositordepth
  100. {
  101. path.bindTarget("_main", "gbufferD");
  102. }
  103. #end
  104. path.drawShader("shader_datas/compositor_pass/compositor_pass");
  105. }
  106. }