Main.hx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package;
  2. import kha.Window;
  3. import kha.System;
  4. import iron.object.Object;
  5. import iron.Scene;
  6. import iron.RenderPath;
  7. import arm.render.RenderPathBase;
  8. import arm.render.RenderPathForward;
  9. import arm.render.RenderPathDeferred;
  10. import arm.render.RenderPathRaytrace;
  11. import arm.render.Uniforms;
  12. import arm.sys.BuildMacros;
  13. import arm.Config;
  14. import arm.Context;
  15. import arm.Res;
  16. class Main {
  17. public static var sha = BuildMacros.sha().substr(1, 7);
  18. public static var date = BuildMacros.date().split(" ")[0];
  19. public static var tasks: Int;
  20. public static function main() {
  21. #if arm_snapshot
  22. #if (is_paint || is_sculpt)
  23. embed(["default_material.arm"]);
  24. #end
  25. #if is_lab
  26. embed(["placeholder.k"]);
  27. #end
  28. #if (kha_direct3d12 || kha_vulkan || kha_metal)
  29. embedRaytrace();
  30. #if is_paint
  31. embedRaytraceBake();
  32. #end
  33. #end
  34. #else
  35. kickstart();
  36. #end
  37. }
  38. @:keep
  39. public static function kickstart() {
  40. #if (!arm_snapshot)
  41. iron.data.ShaderData.shaderPath = ""; // Use arm_data_dir
  42. #end
  43. // Used to locate external application data folder
  44. Krom.setApplicationName(Manifest.title);
  45. tasks = 1;
  46. tasks++; Config.load(function() { tasks--; start(); });
  47. tasks--; start();
  48. }
  49. public static function start() {
  50. if (tasks > 0) return;
  51. iron.App.onResize = arm.App.onResize;
  52. iron.App.w = arm.App.w;
  53. iron.App.h = arm.App.h;
  54. iron.App.x = arm.App.x;
  55. iron.App.y = arm.App.y;
  56. Config.init();
  57. System.start(Config.getOptions(), function(window: Window) {
  58. if (Config.raw.layout == null) arm.App.initLayout();
  59. Krom.setApplicationName(Manifest.title);
  60. iron.App.init(function() {
  61. Scene.setActive("Scene", function(o: Object) {
  62. Uniforms.init();
  63. var path = new RenderPath();
  64. RenderPathBase.init(path);
  65. if (Context.raw.renderMode == RenderForward) {
  66. RenderPathDeferred.init(path); // Allocate gbuffer
  67. RenderPathForward.init(path);
  68. path.commands = RenderPathForward.commands;
  69. }
  70. else {
  71. RenderPathDeferred.init(path);
  72. path.commands = RenderPathDeferred.commands;
  73. }
  74. RenderPath.setActive(path);
  75. new arm.App();
  76. });
  77. });
  78. });
  79. }
  80. #if arm_snapshot
  81. public static function embed(additional: Array<String>) {
  82. var global = js.Syntax.code("globalThis");
  83. global.kickstart = Main.kickstart;
  84. Res.embedRaw("Scene", "Scene.arm", untyped global["data/Scene.arm"]);
  85. untyped global["data/Scene.arm"] = null;
  86. Res.embedRaw("shader_datas", "shader_datas.arm", untyped global["data/shader_datas.arm"]);
  87. untyped global["data/shader_datas.arm"] = null;
  88. Res.embedFont("font.ttf", untyped global["data/font.ttf"]);
  89. untyped global["data/font.ttf"] = null;
  90. Res.embedFont("font_mono.ttf", untyped global["data/font_mono.ttf"]);
  91. untyped global["data/font_mono.ttf"] = null;
  92. var files = [
  93. "ltc_mag.arm",
  94. "ltc_mat.arm",
  95. "default_brush.arm",
  96. "World_irradiance.arm",
  97. "World_radiance.k",
  98. "World_radiance_0.k",
  99. "World_radiance_1.k",
  100. "World_radiance_2.k",
  101. "World_radiance_3.k",
  102. "World_radiance_4.k",
  103. "World_radiance_5.k",
  104. "World_radiance_6.k",
  105. "World_radiance_7.k",
  106. "World_radiance_8.k",
  107. "brdf.k",
  108. "color_wheel.k",
  109. "color_wheel_gradient.k",
  110. "cursor.k",
  111. "icons.k",
  112. "icons2x.k",
  113. "badge.k",
  114. "noise256.k",
  115. "smaa_search.k",
  116. "smaa_area.k",
  117. "text_coloring.json"
  118. ];
  119. for (add in additional) files.push(add);
  120. for (file in files) {
  121. Res.embedBlob(file, untyped global["data/" + file]);
  122. untyped global["data/" + file] = null;
  123. }
  124. }
  125. #if (kha_direct3d12 || kha_vulkan || kha_metal)
  126. public static function embedRaytrace() {
  127. var global = js.Syntax.code("globalThis");
  128. var files = [
  129. "bnoise_rank.k",
  130. "bnoise_scramble.k",
  131. "bnoise_sobol.k",
  132. "raytrace_brute_core" + RenderPathRaytrace.ext,
  133. "raytrace_brute_full" + RenderPathRaytrace.ext
  134. ];
  135. for (file in files) {
  136. Res.embedBlob(file, untyped global["data/" + file]);
  137. untyped global["data/" + file] = null;
  138. }
  139. }
  140. public static function embedRaytraceBake() {
  141. var global = js.Syntax.code("globalThis");
  142. var files = [
  143. "raytrace_bake_ao" + RenderPathRaytrace.ext,
  144. "raytrace_bake_bent" + RenderPathRaytrace.ext,
  145. "raytrace_bake_light" + RenderPathRaytrace.ext,
  146. "raytrace_bake_thick" + RenderPathRaytrace.ext
  147. ];
  148. for (file in files) {
  149. Res.embedBlob(file, untyped global["data/" + file]);
  150. untyped global["data/" + file] = null;
  151. }
  152. }
  153. #end
  154. #end
  155. }