12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #include <iostream>
- #include "gaming-core/wrapper/GLFW.h"
- #include "gaming-core/wrapper/GL.h"
- #include "gaming-core/wrapper/GLEW.h"
- #include "gaming-core/utils/Size.h"
- #include "client/rendering/wrapper/Window.h"
- #include "client/rendering/Shaders.h"
- #include "client/rendering/Framebuffers.h"
- #include "client/input/Control.h"
- #include "client/rendering/Engine.h"
- #include "gaming-core/utils/Clock.h"
- #include "client/rendering/RenderSettings.h"
- void initCallbacks(Window& w, Size& size, Framebuffers& framebuffers, Control& control) {
- static Size& cSize = size;
- static Framebuffers& cFramebuffers = framebuffers;
- static Control& cControl = control;
- w.setFramebufferSizeCallback([](GLFWwindow*, int newWidth, int newHeight) {
- glViewport(0, 0, newWidth, newHeight);
- cSize.width = newWidth;
- cSize.height = newHeight;
- cFramebuffers.resize(newWidth, newHeight);
- });
- w.setKeyCallback([](GLFWwindow*, int key, int, int action, int) {
- if(action == GLFW_PRESS) {
- cControl.keys.press(key);
- } else if(action == GLFW_RELEASE) {
- cControl.keys.release(key);
- }
- });
- w.setMouseButtonCallback([](GLFWwindow*, int button, int action, int) {
- if(action == GLFW_PRESS) {
- cControl.buttons.press(button);
- } else if(action == GLFW_RELEASE) {
- cControl.buttons.release(button);
- }
- });
- w.setCursorPosCallback([](GLFWwindow*, double x, double y) {
- cControl.buttons.move(x, y);
- });
- }
- int main() {
- if(GLFW::init()) {
- return 0;
- }
-
- Size size(1024, 620);
- Window window(size, "Test");
- if(window.hasError() || GLEW::init()) {
- return 0;
- }
-
- Shaders shaders;
- if(shaders.hasError()) {
- return 0;
- }
-
- Framebuffers framebuffers(size);
- if(framebuffers.hasError()) {
- return 0;
- }
-
- RenderSettings renderSettings;
- Engine engine(shaders, framebuffers, size, renderSettings);
-
- Control control;
- Clock fps;
- Clock tps;
- static Game game(control, fps, tps, renderSettings, size);
- initCallbacks(window, size, framebuffers, control);
- window.show();
-
- GL::checkAndPrintError("setup error");
- const Clock::Nanos nanosPerTick = 50000000;
- Clock::Nanos lag = 0;
- while(!window.shouldClose() && game.isRunning()) {
- GL::checkAndPrintError("loop error");
- engine.renderTick(static_cast<float> (lag) / nanosPerTick, game);
- window.swapBuffers();
- lag += fps.update();
- while(lag >= nanosPerTick) {
- lag -= nanosPerTick;
- tps.update();
- control.tick();
- game.tick();
- }
- glfwPollEvents();
- }
- return 0;
- }
|