Main.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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, Controller& controller) {
  21. static WindowSize& cSize = size;
  22. static Controller& cController = controller;
  23. (void) cController;
  24. w.setFramebufferSizeCallback([](GLFWwindow*, int newWidth, int newHeight) {
  25. glViewport(0, 0, newWidth, newHeight);
  26. cSize.width = newWidth;
  27. cSize.height = newHeight;
  28. });
  29. /*w.setKeyCallback([](GLFWwindow*, int key, int, int action, int) {
  30. if(action == GLFW_PRESS) {
  31. cControl.keys.press(key);
  32. } else if(action == GLFW_RELEASE) {
  33. cControl.keys.release(key);
  34. }
  35. });
  36. w.setMouseButtonCallback([](GLFWwindow*, int button, int action, int) {
  37. if(action == GLFW_PRESS) {
  38. cControl.buttons.press(button);
  39. } else if(action == GLFW_RELEASE) {
  40. cControl.buttons.release(button);
  41. }
  42. });*/
  43. }
  44. int main() {
  45. if(GLFWWrapper::hasError()) {
  46. return 0;
  47. }
  48. WindowSize size(800, 480);
  49. Window window(size, "Test");
  50. if(window.hasError() || initGLEW()) {
  51. return 0;
  52. }
  53. Shader shader("resources/shader/vertex.vs", "resources/shader/fragment.fs");
  54. if(shader.hasError()) {
  55. return 0;
  56. }
  57. Renderer renderer(size, shader);
  58. Controller controller;
  59. Clock fps;
  60. Clock tps;
  61. static Game game(controller, fps, tps);
  62. initCallbacks(window, size, controller);
  63. window.show();
  64. const u64 nanosPerTick = 50000000;
  65. u64 lag = 0;
  66. while(!window.shouldClose() && game.isRunning()) {
  67. GLWrapper::checkAndPrintError("GL-Error");
  68. Matrix view;
  69. view.translate(-1.0f, 1.0f);
  70. view.scale(2.0f / size.width, -2.0f / size.height);
  71. shader.setMatrix("view", view.getValues());
  72. game.render((float) lag / nanosPerTick, renderer);
  73. window.swapBuffers();
  74. lag += fps.update();
  75. while(lag >= nanosPerTick) {
  76. lag -= nanosPerTick;
  77. tps.update();
  78. controller.tick();
  79. game.tick();
  80. }
  81. glfwPollEvents();
  82. }
  83. /*for(int i = GLFW_JOYSTICK_1; i <= GLFW_JOYSTICK_LAST; i++) {
  84. String s("Joystick ");
  85. int present = glfwJoystickPresent(i);
  86. s.append(i).append(": ").append(present);
  87. if(present) {
  88. s.append(" ");
  89. int count = 0;
  90. const u8* buttons = glfwGetJoystickButtons(i, &count);
  91. for(int k = 0; k < count; k++) {
  92. s.append(buttons[k] ? '1' : '0');
  93. }
  94. }
  95. r.drawString(0, i * 10 + 10, s);
  96. }*/
  97. return 0;
  98. }