Main.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include <iostream>
  2. #include "rendering/wrapper/GLFWWrapper.h"
  3. #include "rendering/wrapper/GLWrapper.h"
  4. #include "rendering/WindowSize.h"
  5. #include "rendering/wrapper/Window.h"
  6. #include "utils/Clock.h"
  7. #include "rendering/wrapper/Shader.h"
  8. #include "input/Controller.h"
  9. #include "rendering/Renderer.h"
  10. #include "Game.h"
  11. bool initGLEW() {
  12. GLenum err = glewInit();
  13. if(err != GLEW_OK) {
  14. std::cout << "could not initialize GLEW: " << glewGetErrorString(err) << "\n";
  15. return true;
  16. }
  17. std::cout << "using GLEW " << glewGetString(GLEW_VERSION) << "\n";
  18. return false;
  19. }
  20. void initCallbacks(Window& w, WindowSize& size) {
  21. static WindowSize& cSize = size;
  22. w.setFramebufferSizeCallback([](GLFWwindow*, int newWidth, int newHeight) {
  23. glViewport(0, 0, newWidth, newHeight);
  24. cSize.width = newWidth;
  25. cSize.height = newHeight;
  26. });
  27. }
  28. int main() {
  29. if(GLFWWrapper::hasError()) {
  30. return 0;
  31. }
  32. WindowSize size(800, 480);
  33. Window window(size, "Test");
  34. if(window.hasError() || initGLEW()) {
  35. return 0;
  36. }
  37. Shader shader("resources/shader/vertex.vs", "resources/shader/fragment.fs");
  38. if(shader.hasError()) {
  39. return 0;
  40. }
  41. Renderer renderer(size, shader);
  42. Controller controller;
  43. Clock fps;
  44. Clock tps;
  45. static Game game(controller, fps, tps);
  46. initCallbacks(window, size);
  47. window.show();
  48. const u64 nanosPerTick = 10'000'000;
  49. u64 lag = 0;
  50. while(!window.shouldClose() && game.isRunning()) {
  51. GLWrapper::checkAndPrintError("GL-Error");
  52. lag += fps.update();
  53. while(lag >= nanosPerTick) {
  54. lag -= nanosPerTick;
  55. tps.update();
  56. controller.tick();
  57. game.tick();
  58. }
  59. Matrix view;
  60. view.translate(-1.0f, 1.0f);
  61. view.scale(2.0f / size.width, -2.0f / size.height);
  62. shader.setMatrix("view", view.getValues());
  63. game.render((float) lag / nanosPerTick, renderer);
  64. window.swapBuffers();
  65. glfwPollEvents();
  66. }
  67. return 0;
  68. }