/src/Example_RendererSGUsage/Example_RendererSGMain.h

http://github.com/Akranar/daguerreo · C Header · 130 lines · 102 code · 26 blank · 2 comment · 15 complexity · 039444c51e8565c942a227e96c699c71 MD5 · raw file

  1. #ifndef _EXAMPLE_RENDERER_SG_MAIN_H_
  2. #define _EXAMPLE_RENDERER_SG_MAIN_H_
  3. #include "ExLib_RendererBaseUsage.h"
  4. #include "ExLib_RendererBase.h"
  5. #include "ExLib_Eigen.h"
  6. #include "ExLib_WindowEvents.h"
  7. #include "ApplicationLoop.h"
  8. #include "Projector.h"
  9. #include "MouseLookController.h"
  10. class Example_Main
  11. {
  12. public:
  13. RendererBase renderer;
  14. Example_SceneData scene_data;
  15. Example_RenderStates render_state_set;
  16. Example_TorusMesh mesh_torus;
  17. Example_EffectFragmentLighting effect_fragmentlighting;
  18. Example_MeshQuad mesh_quad;
  19. Example_MeshBox mesh_box;
  20. Example_EffectCubeMap effect_cubemap;
  21. void Init(WindowEvents * window)
  22. {
  23. renderer.Initialize(window);
  24. renderer.ClearColor(0.4f, 0.4f, 1.0f, 1.0f);
  25. scene_data.Init();
  26. mesh_torus.Init(&renderer);
  27. mesh_torus.InitWithShader(effect_fragmentlighting.Init(&renderer, &scene_data.camera, &scene_data.light_source));
  28. mesh_torus.InitWithShader(effect_cubemap.Init(&renderer, &scene_data.camera));
  29. mesh_quad.Init(&renderer);
  30. mesh_quad.InitWithShader(&effect_fragmentlighting.shader_program);
  31. mesh_quad.InitWithShader(&effect_cubemap.shader_program);
  32. mesh_box.Init(&renderer);
  33. mesh_box.InitWithShader(&effect_fragmentlighting.shader_program);
  34. mesh_box.InitWithShader(&effect_cubemap.shader_program);
  35. render_state_set.Init(&renderer);
  36. render_state_set.Set();
  37. }
  38. void Deinit()
  39. {
  40. render_state_set.Deinit();
  41. effect_cubemap.Deinit();
  42. effect_fragmentlighting.Deinit();
  43. mesh_box.Deinit(renderer);
  44. mesh_quad.Deinit(renderer);
  45. mesh_torus.Deinit(renderer);
  46. }
  47. void Draw()
  48. {
  49. renderer.PreRender();
  50. {
  51. renderer.ClearAllBuffer();
  52. mesh_torus.PreRender();
  53. mesh_torus.PreRenderWithShader(effect_fragmentlighting.PreRender());
  54. renderer.Draw();
  55. mesh_quad.PreRender();
  56. mesh_quad.PreRenderWithShader(&effect_fragmentlighting.shader_program);
  57. renderer.Draw();
  58. mesh_box.PreRender();
  59. //mesh_box.PreRenderWithShader(&effect_fragmentlighting.shader_program);
  60. mesh_box.PreRenderWithShader(effect_cubemap.PreRender());
  61. renderer.Draw();
  62. }
  63. renderer.PostRender();
  64. }
  65. void Update(double seconds_elapsed, WindowEvents * active_window)
  66. {
  67. if (active_window)
  68. {
  69. InputManager * input_manager = &active_window->GetInputManager();
  70. while (input_manager->HasEvents())
  71. {
  72. input_manager->ProcessNext();
  73. const InputEvent & input_event = input_manager->PeekNext();
  74. if (input_event.GetType() == InputEvent::KEYBOARD && input_event.data.key.GetType() == KeyEvent::KEY_DOWN)
  75. {
  76. }
  77. else if (input_event.GetType() == InputEvent::KEYBOARD && input_event.data.key.GetType() == KeyEvent::KEY_UP)
  78. {
  79. switch (input_event.data.key.GetKey())
  80. {
  81. case KeyID::KEY_ESCAPE:
  82. {
  83. //Temporary hack to fix problem in windows where after Q down to close window, the up key isn't caught.
  84. active_window->Close();
  85. }
  86. break;
  87. default:
  88. break;
  89. }
  90. }
  91. else if (input_event.GetType() == InputEvent::RESIZE)
  92. {
  93. renderer.OnViewportUpdate(0, 0, input_event.data.resize.GetWidth(), input_event.data.resize.GetHeight());
  94. scene_data.camera.SetPerspective(45.0f, float(input_event.data.resize.GetWidth()) / float(input_event.data.resize.GetHeight()), 1.0f, 5000);
  95. }
  96. scene_data.UpdateCameraOrientation(active_window, seconds_elapsed);
  97. input_manager->PopEvent();
  98. }
  99. scene_data.UpdateCameraPosition(active_window, seconds_elapsed);
  100. }
  101. mesh_torus.Update(seconds_elapsed);
  102. }
  103. };
  104. #endif