Main.hx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  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.Inc;
  8. import arm.render.RenderPathForward;
  9. import arm.render.RenderPathDeferred;
  10. import arm.render.Uniforms;
  11. import arm.sys.BuildMacros;
  12. import arm.Config;
  13. import arm.Context;
  14. import arm.Res;
  15. #if arm_vr
  16. import arm.render.RenderPathForwardVR;
  17. #end
  18. class Main {
  19. public static inline var title = "ArmorPaint";
  20. public static var version = "0.8";
  21. public static var sha = BuildMacros.sha().substr(1, 7);
  22. public static var date = BuildMacros.date().split(" ")[0];
  23. static var tasks: Int;
  24. public static function main() {
  25. #if arm_snapshot
  26. var global = js.Syntax.code("globalThis");
  27. global.kickstart = kickstart;
  28. Res.embedRaw("Scene", "Scene.arm", untyped global['data/Scene.arm']);
  29. untyped global['data/Scene.arm'] = null;
  30. Res.embedRaw("shader_datas", "shader_datas.arm", untyped global['data/shader_datas.arm']);
  31. untyped global['data/shader_datas.arm'] = null;
  32. Res.embedFont("font.ttf", untyped global['data/font.ttf']);
  33. untyped global['data/font.ttf'] = null;
  34. Res.embedFont("font_mono.ttf", untyped global['data/font_mono.ttf']);
  35. untyped global['data/font_mono.ttf'] = null;
  36. var files = [
  37. "font13.bin",
  38. "ltc_mag.arm",
  39. "ltc_mat.arm",
  40. "default_brush.arm",
  41. "default_material.arm",
  42. "World_irradiance.arm",
  43. "World_radiance.k",
  44. "World_radiance_0.k",
  45. "World_radiance_1.k",
  46. "World_radiance_2.k",
  47. "World_radiance_3.k",
  48. "World_radiance_4.k",
  49. "World_radiance_5.k",
  50. "World_radiance_6.k",
  51. "World_radiance_7.k",
  52. "World_radiance_8.k",
  53. "brdf.k",
  54. "color_wheel.k",
  55. "cursor.k",
  56. "icons.k",
  57. "icons2x.k",
  58. "noise256.k",
  59. "smaa_search.k",
  60. "smaa_area.k"
  61. ];
  62. for (file in files) {
  63. Res.embedBlob(file, untyped global['data/' + file]);
  64. untyped global['data/' + file] = null;
  65. }
  66. #if (kha_direct3d12 || kha_vulkan)
  67. var ext = #if kha_direct3d12 ".cso" #else ".spirv" #end ;
  68. var files_renderlib = [
  69. "bnoise_rank.k",
  70. "bnoise_scramble.k",
  71. "bnoise_sobol.k",
  72. "raytrace_bake_ao" + ext,
  73. "raytrace_bake_bent" + ext,
  74. "raytrace_bake_light" + ext,
  75. "raytrace_bake_thick" + ext,
  76. "raytrace_brute_core" + ext,
  77. "raytrace_brute_full" + ext
  78. ];
  79. for (file in files_renderlib) {
  80. Res.embedBlob(file, untyped global['data/' + file]);
  81. untyped global['data/' + file] = null;
  82. }
  83. #end
  84. #end // arm_snapshot
  85. #if (!arm_snapshot)
  86. iron.data.ShaderData.shaderPath = ""; // Use arm_data_dir
  87. kickstart();
  88. #end
  89. }
  90. @:keep
  91. public static function kickstart() {
  92. // Used to locate external application data folder
  93. Krom.setApplicationName(Main.title);
  94. tasks = 1;
  95. tasks++; Config.load(function() { tasks--; start(); });
  96. #if arm_physics
  97. tasks++; arm.plugin.PhysicsWorld.load();
  98. #end
  99. tasks--; start();
  100. }
  101. static function start() {
  102. if (tasks > 0) return;
  103. Config.init();
  104. System.start(Config.getOptions(), function(window: Window) {
  105. if (Config.raw.layout == null) arm.App.initLayout();
  106. Krom.setApplicationName(Main.title);
  107. iron.App.init(function() {
  108. Scene.setActive("Scene", function(o: Object) {
  109. Uniforms.init();
  110. var path = new RenderPath();
  111. Inc.init(path);
  112. #if arm_vr
  113. RenderPathDeferred.init(path); // Allocate gbuffer
  114. RenderPathForward.init(path);
  115. RenderPathForwardVR.init(path);
  116. path.commands = RenderPathForwardVR.commands;
  117. #else
  118. if (Context.renderMode == RenderForward) {
  119. RenderPathDeferred.init(path); // Allocate gbuffer
  120. RenderPathForward.init(path);
  121. path.commands = RenderPathForward.commands;
  122. }
  123. else {
  124. RenderPathDeferred.init(path);
  125. path.commands = RenderPathDeferred.commands;
  126. }
  127. #end
  128. RenderPath.setActive(path);
  129. new arm.App();
  130. #if arm_physics
  131. o.addTrait(new arm.plugin.PhysicsWorld());
  132. #end
  133. });
  134. });
  135. });
  136. }
  137. }