1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #include <iostream>
- #include <bits/getopt_core.h>
- #include "gaming-core/wrapper/GLFW.h"
- #include "gaming-core/wrapper/GL.h"
- #include "gaming-core/wrapper/GLEW.h"
- #include "gaming-core/wrapper/Window.h"
- #include "gaming-core/wrapper/WindowOptions.h"
- #include "gaming-core/utils/Clock.h"
- #include "gaming-core/wrapper/Shader.h"
- #include "rendering/Renderer.h"
- #include "Game.h"
- bool parseArgs(int argAmount, char* const* args, WindowOptions& options) {
- while(true) {
- switch(getopt(argAmount, args, "fv")) {
- case '?':
- return true;
- case 'f':
- options.fullscreen = true;
- break;
- case 'v':
- options.vsync = true;
- break;
- case -1:
- return false;
- }
- }
- }
- int main(int argAmount, char* const* args) {
- WindowOptions options(3, 0, Size(800, 480), true, "Pigine");
- if(parseArgs(argAmount, args, options) || GLFW::init()) {
- return 0;
- }
- Window window(options);
- if(window.hasError() || GLEW::init()) {
- return 0;
- }
-
- Shader shader("resources/shader/vertex.vs", "resources/shader/fragment.fs");
- if(shader.hasError()) {
- return 0;
- }
- Renderer renderer(shader);
- Clock fps;
- Clock tps;
- Buttons buttons(window);
- Controller controller(buttons);
- static Game game(controller, fps, tps);
- window.show();
- const Clock::Nanos nanosPerTick = 10'000'000;
- Clock::Nanos lag = 0;
- while(!window.shouldClose() && game.isRunning()) {
- GL::checkAndPrintError("GL-Error");
- lag += fps.update();
- while(lag >= nanosPerTick) {
- lag -= nanosPerTick;
- tps.update();
- buttons.tick();
- game.tick();
- }
-
- Size size = window.getSize();
- GL::setViewport(size.width, size.height);
- Matrix view;
- view.scale(Vector3(2.0f / size.width, -2.0f / size.height, 1.0f));
- view.translate(Vector3(-1.0f, 1.0f, 0.0f));
- shader.setMatrix("view", view.getValues());
- game.render(static_cast<float> (lag) / nanosPerTick, renderer);
- window.swapBuffers();
- GL::clearFramebuffer();
-
- glfwPollEvents();
- }
- return 0;
- }
|