main.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // ../../make --run
  2. function main() {
  3. let ops: iron_window_options_t = {
  4. title: "Empty",
  5. width: 1280,
  6. height: 720,
  7. x: -1,
  8. y: -1,
  9. features: window_features_t.RESIZABLE | window_features_t.MINIMIZABLE | window_features_t.MAXIMIZABLE,
  10. mode: window_mode_t.WINDOWED,
  11. frequency: 60,
  12. vsync: true,
  13. depth_bits: 32
  14. };
  15. sys_start(ops);
  16. sys_init();
  17. ready();
  18. }
  19. function render_commands() {
  20. render_path_set_target("", null, null, clear_flag_t.COLOR | clear_flag_t.DEPTH, 0xff6495ed, 1.0);
  21. render_path_draw_meshes("mesh");
  22. }
  23. function ready() {
  24. render_path_commands = render_commands;
  25. let scene: scene_t = {
  26. name: "Scene",
  27. objects: [
  28. {
  29. name: "Cube",
  30. type: "mesh_object",
  31. data_ref: "cube.arm/Cube",
  32. material_refs: ["MyMaterial"],
  33. visible: true,
  34. spawn: true
  35. },
  36. {
  37. name: "Camera",
  38. type: "camera_object",
  39. data_ref: "MyCamera",
  40. visible: true,
  41. spawn: true
  42. }
  43. ],
  44. camera_datas: [
  45. {
  46. name: "MyCamera",
  47. near_plane: 0.1,
  48. far_plane: 100.0,
  49. fov: 0.85
  50. }
  51. ],
  52. camera_ref: "Camera",
  53. material_datas: [
  54. {
  55. name: "MyMaterial",
  56. shader: "MyShader",
  57. contexts: [
  58. {
  59. name: "mesh",
  60. bind_textures: [
  61. {
  62. name: "my_texture",
  63. file: "texture.k"
  64. }
  65. ]
  66. }
  67. ]
  68. }
  69. ],
  70. shader_datas: [
  71. {
  72. name: "MyShader",
  73. contexts: [
  74. {
  75. name: "mesh",
  76. vertex_shader: "mesh.vert",
  77. fragment_shader: "mesh.frag",
  78. compare_mode: "less",
  79. cull_mode: "clockwise",
  80. depth_write: true,
  81. vertex_elements: [
  82. {
  83. name: "pos",
  84. data: "short4norm"
  85. },
  86. {
  87. name: "tex",
  88. data: "short2norm"
  89. }
  90. ],
  91. constants: [
  92. {
  93. name: "WVP",
  94. type: "mat4",
  95. link: "_world_view_proj_matrix"
  96. }
  97. ],
  98. texture_units: [
  99. {
  100. name: "my_texture"
  101. }
  102. ]
  103. }
  104. ]
  105. }
  106. ]
  107. };
  108. map_set(data_cached_scene_raws, scene.name, scene);
  109. // Instantiate scene
  110. scene_create(scene);
  111. scene_ready();
  112. }
  113. function scene_ready() {
  114. // Set camera
  115. let t: transform_t = scene_camera.base.transform;
  116. t.loc = vec4_create(0, -6, 0);
  117. t.rot = quat_from_to(vec4_create(0, 0, 1), vec4_create(0, -1, 0));
  118. transform_build_matrix(t);
  119. // Rotate cube
  120. sys_notify_on_update(spin_cube);
  121. }
  122. function spin_cube() {
  123. let cube: object_t = scene_get_child("Cube");
  124. transform_rotate(cube.transform, vec4_create(0, 0, 1), 0.01);
  125. }