render_path_preview.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. function render_path_preview_init() {
  2. {
  3. let t: render_target_t = render_target_create();
  4. t.name = "texpreview";
  5. t.width = 1;
  6. t.height = 1;
  7. t.format = "RGBA32";
  8. render_path_create_render_target(t);
  9. }
  10. {
  11. let t: render_target_t = render_target_create();
  12. t.name = "texpreview_icon";
  13. t.width = 1;
  14. t.height = 1;
  15. t.format = "RGBA32";
  16. render_path_create_render_target(t);
  17. }
  18. render_path_create_depth_buffer("mmain", "DEPTH24");
  19. {
  20. let t: render_target_t = render_target_create();
  21. t.name = "mtex";
  22. t.width = math_floor(util_render_material_preview_size * 2.0);
  23. t.height = math_floor(util_render_material_preview_size * 2.0);
  24. t.format = "RGBA64";
  25. t.scale = render_path_base_get_super_sampling();
  26. ///if arm_opengl
  27. t.depth_buffer = "mmain";
  28. ///end
  29. render_path_create_render_target(t);
  30. }
  31. {
  32. let t: render_target_t = render_target_create();
  33. t.name = "mgbuffer0";
  34. t.width = math_floor(util_render_material_preview_size * 2.0);
  35. t.height = math_floor(util_render_material_preview_size * 2.0);
  36. t.format = "RGBA64";
  37. t.scale = render_path_base_get_super_sampling();
  38. t.depth_buffer = "mmain";
  39. render_path_create_render_target(t);
  40. }
  41. {
  42. let t: render_target_t = render_target_create();
  43. t.name = "mgbuffer1";
  44. t.width = math_floor(util_render_material_preview_size * 2.0);
  45. t.height = math_floor(util_render_material_preview_size * 2.0);
  46. t.format = "RGBA64";
  47. t.scale = render_path_base_get_super_sampling();
  48. render_path_create_render_target(t);
  49. }
  50. {
  51. let t: render_target_t = render_target_create();
  52. t.name = "mgbuffer2";
  53. t.width = math_floor(util_render_material_preview_size * 2.0);
  54. t.height = math_floor(util_render_material_preview_size * 2.0);
  55. t.format = "RGBA64";
  56. t.scale = render_path_base_get_super_sampling();
  57. render_path_create_render_target(t);
  58. }
  59. }
  60. function render_path_preview_commands_preview() {
  61. render_path_set_target("mgbuffer2");
  62. render_path_clear_target(0xff000000);
  63. render_path_set_target("mgbuffer0");
  64. render_path_clear_target(0xffffffff, 1.0, clear_flag_t.COLOR | clear_flag_t.DEPTH);
  65. let additional: string[] = ["mgbuffer1", "mgbuffer2"];
  66. render_path_set_target("mgbuffer0", additional);
  67. render_path_draw_meshes("mesh");
  68. // Deferred light
  69. render_path_set_target("mtex");
  70. render_path_bind_target("_mmain", "gbufferD");
  71. render_path_bind_target("mgbuffer0", "gbuffer0");
  72. render_path_bind_target("mgbuffer1", "gbuffer1");
  73. {
  74. render_path_bind_target("empty_white", "ssaotex");
  75. }
  76. render_path_draw_shader("shader_datas/deferred_light/deferred_light");
  77. ///if (arm_direct3d11 || arm_direct3d12 || arm_metal || arm_vulkan)
  78. render_path_set_depth_from("mtex", "mgbuffer0"); // Bind depth for world pass
  79. ///end
  80. render_path_set_target("mtex"); // Re-binds depth
  81. render_path_draw_skydome("shader_datas/world_pass/world_pass");
  82. ///if (arm_direct3d11 || arm_direct3d12 || arm_metal || arm_vulkan)
  83. render_path_set_depth_from("mtex", "mgbuffer1"); // Unbind depth
  84. ///end
  85. let framebuffer: string = "texpreview";
  86. let selected_mat: slot_material_t = context_raw.material;
  87. let texpreview: render_target_t = map_get(render_path_render_targets, "texpreview");
  88. let texpreview_icon: render_target_t = map_get(render_path_render_targets, "texpreview_icon");
  89. texpreview._image = selected_mat.image;
  90. texpreview_icon._image = selected_mat.image_icon;
  91. render_path_set_target(framebuffer);
  92. render_path_bind_target("mtex", "tex");
  93. render_path_draw_shader("shader_datas/compositor_pass/compositor_pass");
  94. render_path_set_target("texpreview_icon");
  95. render_path_bind_target("texpreview", "tex");
  96. render_path_draw_shader("shader_datas/supersample_resolve/supersample_resolve");
  97. }
  98. function render_path_preview_commands_decal() {
  99. render_path_set_target("gbuffer2");
  100. render_path_clear_target(0xff000000);
  101. render_path_set_target("gbuffer0");
  102. render_path_clear_target(0xffffffff, 1.0, clear_flag_t.COLOR | clear_flag_t.DEPTH);
  103. let additional: string[] = ["gbuffer1", "gbuffer2"];
  104. render_path_set_target("gbuffer0", additional);
  105. render_path_draw_meshes("mesh");
  106. // Deferred light
  107. render_path_set_target("tex");
  108. render_path_bind_target("_main", "gbufferD");
  109. render_path_bind_target("gbuffer0", "gbuffer0");
  110. render_path_bind_target("gbuffer1", "gbuffer1");
  111. {
  112. render_path_bind_target("empty_white", "ssaotex");
  113. }
  114. render_path_draw_shader("shader_datas/deferred_light/deferred_light");
  115. ///if (arm_direct3d11 || arm_direct3d12 || arm_metal || arm_vulkan)
  116. render_path_set_depth_from("tex", "gbuffer0"); // Bind depth for world pass
  117. ///end
  118. render_path_set_target("tex");
  119. render_path_draw_skydome("shader_datas/world_pass/world_pass");
  120. ///if (arm_direct3d11 || arm_direct3d12 || arm_metal || arm_vulkan)
  121. render_path_set_depth_from("tex", "gbuffer1"); // Unbind depth
  122. ///end
  123. let framebuffer: string = "texpreview";
  124. let texpreview: render_target_t = map_get(render_path_render_targets, "texpreview");
  125. texpreview._image = context_raw.decal_image;
  126. render_path_set_target(framebuffer);
  127. render_path_bind_target("tex", "tex");
  128. render_path_draw_shader("shader_datas/compositor_pass/compositor_pass");
  129. }