rendering.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #include "corange.h"
  2. static int object_id = 0;
  3. renderer* dr = NULL;
  4. void rendering_init() {
  5. graphics_viewport_set_title("Renderers");
  6. graphics_viewport_set_size(1280, 720);
  7. folder_load(P("./assets/podium/"));
  8. folder_load(P("./assets/cello/"));
  9. folder_load(P("./assets/piano/"));
  10. folder_load(P("./assets/imrod/"));
  11. folder_load(P("./assets/dino/"));
  12. static_object* s_podium = entity_new("podium", static_object);
  13. s_podium->renderable = asset_hndl_new(P("./assets/podium/podium.bmf"));
  14. static_object* s_cello = entity_new("cello", static_object);
  15. s_cello->renderable = asset_hndl_new(P("./assets/cello/cello.bmf"));
  16. s_cello->position = vec3_new(0, 3, 0);
  17. s_cello->rotation = quat_rotation_x(-1.7);
  18. s_cello->scale = vec3_new(0.75, 0.75, 0.75);
  19. static_object* s_piano = entity_new("piano", static_object);
  20. s_piano->renderable = asset_hndl_new(P("./assets/piano/piano.bmf"));
  21. s_piano->position = vec3_new(1, 5, 0);
  22. static_object* s_dino = entity_new("dino", static_object);
  23. s_dino->renderable = asset_hndl_new(P("./assets/dino/dino.bmf"));
  24. s_dino->scale = vec3_new(4 ,4, 4);
  25. animated_object* a_imrod = entity_new("imrod", animated_object);
  26. animated_object_load_skeleton(a_imrod, asset_hndl_new(P("./assets/imrod/imrod.skl")));
  27. a_imrod->renderable = asset_hndl_new(P("./assets/imrod/imrod.bmf"));
  28. a_imrod->animation = asset_hndl_new(P("./assets/imrod/imrod.ani"));
  29. a_imrod->rotation = quat_rotation_y(1.57);
  30. a_imrod->scale = vec3_new(1.25, 1.25, 1.25);
  31. /* Put some text on the screen */
  32. ui_button* framerate = ui_elem_new("framerate", ui_button);
  33. ui_button_move(framerate, vec2_new(10,10));
  34. ui_button_resize(framerate, vec2_new(30,25));
  35. ui_button_set_label(framerate, "FRAMERATE");
  36. ui_button_disable(framerate);
  37. ui_button* object = ui_elem_new("object", ui_button);
  38. ui_button_move(object, vec2_new(10, graphics_viewport_height() - 70));
  39. ui_button_resize(object, vec2_new(60,25));
  40. ui_button_set_label(object, "Object");
  41. ui_button_disable(object);
  42. ui_button* piano = ui_elem_new("piano", ui_button);
  43. ui_button_move(piano, vec2_new(80, graphics_viewport_height() - 70));
  44. ui_button_resize(piano, vec2_new(50,25));
  45. ui_button_set_label(piano, "Piano");
  46. ui_button* cello = ui_elem_new("cello", ui_button);
  47. ui_button_move(cello, vec2_new(140, graphics_viewport_height() - 70));
  48. ui_button_resize(cello, vec2_new(50,25));
  49. ui_button_set_label(cello, "Cello");
  50. ui_button* imrod = ui_elem_new("imrod", ui_button);
  51. ui_button_move(imrod, vec2_new(200, graphics_viewport_height() - 70));
  52. ui_button_resize(imrod, vec2_new(50,25));
  53. ui_button_set_label(imrod, "Imrod");
  54. ui_button* dino = ui_elem_new("dino", ui_button);
  55. ui_button_move(dino, vec2_new(260, graphics_viewport_height() - 70));
  56. ui_button_resize(dino, vec2_new(40,25));
  57. ui_button_set_label(dino, "Dino");
  58. void onclick_piano() { object_id = 0; }
  59. void onclick_cello() { object_id = 1; }
  60. void onclick_imrod() { object_id = 2; }
  61. void onclick_dino() { object_id = 3; }
  62. ui_button_set_onclick(piano, onclick_piano);
  63. ui_button_set_onclick(cello, onclick_cello);
  64. ui_button_set_onclick(imrod, onclick_imrod);
  65. ui_button_set_onclick(dino, onclick_dino);
  66. /* New Camera and light */
  67. camera* cam = entity_new("camera", camera);
  68. cam->position = vec3_new(25.0, 25.0, 10.0);
  69. cam->target = vec3_new(0, 7, 0);
  70. /* Renderer Setup */
  71. dr = renderer_new(asset_hndl_new_load(P("./assets/graphics.cfg")));
  72. renderer_set_camera(dr, cam);
  73. renderer_set_tod(dr, 0.15, 0);
  74. renderer_set_skydome_enabled(dr, false);
  75. SDL_GL_CheckError();
  76. }
  77. void rendering_event(SDL_Event event) {
  78. camera* cam = entity_get("camera");
  79. camera_control_orbit(cam, event);
  80. }
  81. void rendering_update() {
  82. camera* cam = entity_get("camera");
  83. camera_control_joyorbit(cam, frame_time());
  84. ui_button* framerate = ui_elem_get("framerate");
  85. ui_button_set_label(framerate, frame_rate_string());
  86. animated_object* imrod = entity_get("imrod");
  87. animated_object_update(imrod, frame_time() * 0.25);
  88. }
  89. void rendering_render() {
  90. renderer_add(dr, render_object_static(entity_get("podium")));
  91. switch (object_id) {
  92. case 0: renderer_add(dr, render_object_static(entity_get("piano"))); break;
  93. case 1: renderer_add(dr, render_object_static(entity_get("cello"))); break;
  94. case 2: renderer_add(dr, render_object_animated(entity_get("imrod"))); break;
  95. case 3: renderer_add(dr, render_object_static(entity_get("dino"))); break;
  96. }
  97. renderer_render(dr);
  98. }
  99. void rendering_finish() {
  100. renderer_delete(dr);
  101. }
  102. int main(int argc, char **argv) {
  103. #ifdef _WIN32
  104. FILE* ctt = fopen("CON", "w" );
  105. FILE* fout = freopen( "CON", "w", stdout );
  106. FILE* ferr = freopen( "CON", "w", stderr );
  107. #endif
  108. corange_init("../../assets_core");
  109. rendering_init();
  110. int running = 1;
  111. SDL_Event event;
  112. while(running) {
  113. frame_begin();
  114. while(SDL_PollEvent(&event)) {
  115. switch(event.type){
  116. case SDL_KEYDOWN: break;
  117. case SDL_KEYUP:
  118. if (event.key.keysym.sym == SDLK_ESCAPE) { running = 0; }
  119. if (event.key.keysym.sym == SDLK_PRINTSCREEN) { graphics_viewport_screenshot(); }
  120. if ((event.key.keysym.sym == SDLK_r) &&
  121. (event.key.keysym.mod == KMOD_LCTRL)) {
  122. asset_reload_all();
  123. }
  124. break;
  125. case SDL_QUIT:
  126. running = 0;
  127. break;
  128. }
  129. rendering_event(event);
  130. ui_event(event);
  131. }
  132. rendering_update();
  133. ui_update();
  134. rendering_render();
  135. ui_render();
  136. graphics_swap();
  137. frame_end();
  138. }
  139. rendering_finish();
  140. corange_finish();
  141. return 0;
  142. }