Main.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include <iostream>
  2. #include <bits/getopt_core.h>
  3. #include "rendering/wrapper/GLFW.h"
  4. #include "rendering/wrapper/GLWrapper.h"
  5. #include "rendering/WindowSize.h"
  6. #include "rendering/wrapper/Window.h"
  7. #include "rendering/Options.h"
  8. #include "utils/Clock.h"
  9. #include "rendering/wrapper/Shader.h"
  10. #include "rendering/Renderer.h"
  11. #include "Game.h"
  12. bool initGLEW() {
  13. GLenum err = glewInit();
  14. if(err != GLEW_OK) {
  15. std::cout << "could not initialize GLEW: " << glewGetErrorString(err) << "\n";
  16. return true;
  17. }
  18. std::cout << "using GLEW " << glewGetString(GLEW_VERSION) << "\n";
  19. return false;
  20. }
  21. bool parseArgs(int argAmount, char* const* args, Options& options) {
  22. while(true) {
  23. switch(getopt(argAmount, args, "fv")) {
  24. case '?':
  25. return true;
  26. case 'f':
  27. options.fullscreen = true;
  28. break;
  29. case 'v':
  30. options.vsync = true;
  31. break;
  32. case -1:
  33. return false;
  34. }
  35. }
  36. }
  37. int main(int argAmount, char* const* args) {
  38. Options options("Pigine");
  39. if(parseArgs(argAmount, args, options)) {
  40. return 0;
  41. }
  42. if(GLFW::init()) {
  43. return 0;
  44. }
  45. WindowSize size(800, 480);
  46. Controller controller;
  47. Window window(size, controller, options);
  48. if(window.hasError() || initGLEW()) {
  49. return 0;
  50. }
  51. Shader shader("resources/shader/vertex.vs", "resources/shader/fragment.fs");
  52. if(shader.hasError()) {
  53. return 0;
  54. }
  55. Renderer renderer(size, shader);
  56. Clock fps;
  57. Clock tps;
  58. static Game game(controller, fps, tps);
  59. window.show();
  60. const Nanos nanosPerTick = 10'000'000;
  61. Nanos lag = 0;
  62. while(!window.shouldClose() && game.isRunning()) {
  63. GLWrapper::checkAndPrintError("GL-Error");
  64. lag += fps.update();
  65. while(lag >= nanosPerTick) {
  66. lag -= nanosPerTick;
  67. tps.update();
  68. controller.tick();
  69. game.tick();
  70. }
  71. Matrix view;
  72. view.translate(-1.0f, 1.0f);
  73. view.scale(2.0f / size.width, -2.0f / size.height);
  74. shader.setMatrix("view", view.getValues());
  75. game.render((float) lag / nanosPerTick, renderer);
  76. window.swapBuffers();
  77. glfwPollEvents();
  78. }
  79. return 0;
  80. }