RenderPathPreview.hx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package arm.render;
  2. import iron.RenderPath;
  3. import arm.util.RenderUtil;
  4. import arm.ui.UIHeader;
  5. import arm.Enums;
  6. @:access(iron.RenderPath)
  7. class RenderPathPreview {
  8. public static var path: RenderPath;
  9. public static function init(_path: RenderPath) {
  10. path = _path;
  11. {
  12. var t = new RenderTargetRaw();
  13. t.name = "texpreview";
  14. t.width = 1;
  15. t.height = 1;
  16. t.format = "RGBA32";
  17. path.createRenderTarget(t);
  18. }
  19. {
  20. var t = new RenderTargetRaw();
  21. t.name = "texpreview_icon";
  22. t.width = 1;
  23. t.height = 1;
  24. t.format = "RGBA32";
  25. path.createRenderTarget(t);
  26. }
  27. {
  28. path.createDepthBuffer("mmain", "DEPTH24");
  29. var t = new RenderTargetRaw();
  30. t.name = "mtex";
  31. t.width = Std.int(RenderUtil.matPreviewSize * 2.0);
  32. t.height = Std.int(RenderUtil.matPreviewSize * 2.0);
  33. t.format = "RGBA64";
  34. t.scale = Inc.getSuperSampling();
  35. #if kha_opengl
  36. t.depth_buffer = "mmain";
  37. #end
  38. path.createRenderTarget(t);
  39. }
  40. {
  41. var t = new RenderTargetRaw();
  42. t.name = "mgbuffer0";
  43. t.width = Std.int(RenderUtil.matPreviewSize * 2.0);
  44. t.height = Std.int(RenderUtil.matPreviewSize * 2.0);
  45. t.format = "RGBA64";
  46. t.scale = Inc.getSuperSampling();
  47. t.depth_buffer = "mmain";
  48. path.createRenderTarget(t);
  49. }
  50. {
  51. var t = new RenderTargetRaw();
  52. t.name = "mgbuffer1";
  53. t.width = Std.int(RenderUtil.matPreviewSize * 2.0);
  54. t.height = Std.int(RenderUtil.matPreviewSize * 2.0);
  55. t.format = "RGBA64";
  56. t.scale = Inc.getSuperSampling();
  57. path.createRenderTarget(t);
  58. }
  59. {
  60. var t = new RenderTargetRaw();
  61. t.name = "mgbuffer2";
  62. t.width = Std.int(RenderUtil.matPreviewSize * 2.0);
  63. t.height = Std.int(RenderUtil.matPreviewSize * 2.0);
  64. t.format = "RGBA64";
  65. t.scale = Inc.getSuperSampling();
  66. path.createRenderTarget(t);
  67. }
  68. //
  69. // path.loadShader("shader_datas/deferred_light/deferred_light");
  70. // path.loadShader("shader_datas/world_pass/world_pass");
  71. // path.loadShader("shader_datas/compositor_pass/compositor_pass");
  72. // path.loadShader("shader_datas/supersample_resolve/supersample_resolve");
  73. //
  74. }
  75. public static function commandsPreview() {
  76. path.setTarget("mgbuffer2");
  77. path.clearTarget(0xff000000);
  78. #if (kha_metal)
  79. var clearColor = 0xffffffff;
  80. #else
  81. var clearColor: Null<Int> = null;
  82. #end
  83. path.setTarget("mgbuffer0");
  84. path.clearTarget(clearColor, 1.0);
  85. path.setTarget("mgbuffer0", ["mgbuffer1", "mgbuffer2"]);
  86. path.drawMeshes("mesh");
  87. // ---
  88. // Deferred light
  89. // ---
  90. path.setTarget("mtex");
  91. path.bindTarget("_mmain", "gbufferD");
  92. path.bindTarget("mgbuffer0", "gbuffer0");
  93. path.bindTarget("mgbuffer1", "gbuffer1");
  94. {
  95. path.bindTarget("empty_white", "ssaotex");
  96. }
  97. path.drawShader("shader_datas/deferred_light/deferred_light");
  98. #if (kha_direct3d11 || kha_direct3d12 || kha_metal || kha_vulkan)
  99. path.setDepthFrom("mtex", "mgbuffer0"); // Bind depth for world pass
  100. #end
  101. path.setTarget("mtex"); // Re-binds depth
  102. path.drawSkydome("shader_datas/world_pass/world_pass");
  103. #if (kha_direct3d11 || kha_direct3d12 || kha_metal || kha_vulkan)
  104. path.setDepthFrom("mtex", "mgbuffer1"); // Unbind depth
  105. #end
  106. var framebuffer = "texpreview";
  107. var selectedMat = Context.material;
  108. RenderPath.active.renderTargets.get("texpreview").image = selectedMat.image;
  109. RenderPath.active.renderTargets.get("texpreview_icon").image = selectedMat.imageIcon;
  110. path.setTarget(framebuffer);
  111. path.bindTarget("mtex", "tex");
  112. path.drawShader("shader_datas/compositor_pass/compositor_pass");
  113. path.setTarget("texpreview_icon");
  114. path.bindTarget("texpreview", "tex");
  115. path.drawShader("shader_datas/supersample_resolve/supersample_resolve");
  116. }
  117. public static function commandsDecal() {
  118. path.setTarget("gbuffer2");
  119. path.clearTarget(0xff000000);
  120. #if (kha_metal)
  121. var clearColor = 0xffffffff;
  122. #else
  123. var clearColor: Null<Int> = null;
  124. #end
  125. path.setTarget("gbuffer0");
  126. path.clearTarget(clearColor, 1.0);
  127. path.setTarget("gbuffer0", ["gbuffer1", "gbuffer2"]);
  128. path.drawMeshes("mesh");
  129. // ---
  130. // Deferred light
  131. // ---
  132. path.setTarget("tex");
  133. path.bindTarget("_main", "gbufferD");
  134. path.bindTarget("gbuffer0", "gbuffer0");
  135. path.bindTarget("gbuffer1", "gbuffer1");
  136. {
  137. path.bindTarget("empty_white", "ssaotex");
  138. }
  139. path.drawShader("shader_datas/deferred_light/deferred_light");
  140. #if (kha_direct3d11 || kha_direct3d12 || kha_metal || kha_vulkan)
  141. path.setDepthFrom("tex", "gbuffer0"); // Bind depth for world pass
  142. #end
  143. path.setTarget("tex");
  144. path.drawSkydome("shader_datas/world_pass/world_pass");
  145. #if (kha_direct3d11 || kha_direct3d12 || kha_metal || kha_vulkan)
  146. path.setDepthFrom("tex", "gbuffer1"); // Unbind depth
  147. #end
  148. var framebuffer = "texpreview";
  149. RenderPath.active.renderTargets.get("texpreview").image = Context.decalImage;
  150. path.setTarget(framebuffer);
  151. path.bindTarget("tex", "tex");
  152. path.drawShader("shader_datas/compositor_pass/compositor_pass");
  153. }
  154. }