Main.cpp 2.2 KB

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