Main.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include <iostream>
  2. #include "rendering/GLFW.h"
  3. #include "rendering/Window.h"
  4. #include "rendering/Shader.h"
  5. #include "input/Keys.h"
  6. #include "rendering/GL.h"
  7. #include "rendering/Renderer.h"
  8. #include "Game.h"
  9. bool initGLEW() {
  10. GLenum err = glewInit();
  11. if(err != GLEW_OK) {
  12. std::cout << "could not initialize GLEW: " << glewGetErrorString(err) << "\n";
  13. return true;
  14. }
  15. std::cout << "using GLEW " << glewGetString(GLEW_VERSION) << "\n";
  16. return false;
  17. }
  18. void initCallbacks(Window& w, Keys& keys) {
  19. static Keys& cKeys = keys;
  20. w.setFramebufferSizeCallback([](GLFWwindow*, int newWidth, int newHeight) {
  21. glViewport(0, 0, newWidth, newHeight);
  22. });
  23. w.setKeyCallback([](GLFWwindow*, int key, int, int action, int) {
  24. if(action == GLFW_PRESS) {
  25. cKeys.press(key);
  26. } else if(action == GLFW_RELEASE) {
  27. cKeys.release(key);
  28. }
  29. });
  30. }
  31. int main() {
  32. if(GLFW::hasError()) {
  33. return 0;
  34. }
  35. Window window(1024, 620, "Test");
  36. if(window.hasError() || initGLEW()) {
  37. return 0;
  38. }
  39. Shader shader;
  40. if(shader.hasError()) {
  41. return 0;
  42. }
  43. Keys keys;
  44. Game game(keys);
  45. initCallbacks(window, keys);
  46. window.show();
  47. GL::disableDepthTesting();
  48. GL::checkAndPrintError("setup error");
  49. const u64 nanosPerTick = 25000000;
  50. u64 lastTime = GLFW::getTimeNanos();
  51. u64 lag = 0;
  52. while(!window.shouldClose() && game.isRunning()) {
  53. GL::checkAndPrintError("loop error");
  54. GL::prepareMainFramebuffer();
  55. shader.use();
  56. Renderer renderer;
  57. game.render(static_cast<float> (lag) / nanosPerTick, renderer);
  58. window.swapBuffers();
  59. u64 currentTime = GLFW::getTimeNanos();
  60. lag += currentTime - lastTime;
  61. lastTime = currentTime;
  62. while(lag >= nanosPerTick) {
  63. lag -= nanosPerTick;
  64. keys.tick();
  65. game.tick();
  66. }
  67. glfwPollEvents();
  68. }
  69. return 0;
  70. }