12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #include <iostream>
- #include <bits/getopt_core.h>
- #include "rendering/wrapper/GLFW.h"
- #include "rendering/wrapper/GLWrapper.h"
- #include "rendering/WindowSize.h"
- #include "rendering/wrapper/Window.h"
- #include "rendering/Options.h"
- #include "utils/Clock.h"
- #include "rendering/wrapper/Shader.h"
- #include "input/Controller.h"
- #include "rendering/Renderer.h"
- #include "Game.h"
- bool initGLEW() {
- GLenum err = glewInit();
- if(err != GLEW_OK) {
- std::cout << "could not initialize GLEW: " << glewGetErrorString(err) << "\n";
- return true;
- }
- std::cout << "using GLEW " << glewGetString(GLEW_VERSION) << "\n";
- return false;
- }
- bool parseArgs(int argAmount, char* const* args, Options& options) {
- while(true) {
- switch(getopt(argAmount, args, "f")) {
- case '?':
- return true;
- case 'f':
- options.fullscreen = true;
- break;
- case -1:
- return false;
- }
- }
- }
- int main(int argAmount, char* const* args) {
- Options options("Pigine");
- if(parseArgs(argAmount, args, options)) {
- return 0;
- }
- if(GLFW::init()) {
- return 0;
- }
- WindowSize size(800, 480);
- Window window(size, options);
- if(window.hasError() || initGLEW()) {
- return 0;
- }
- Shader shader("resources/shader/vertex.vs", "resources/shader/fragment.fs");
- if(shader.hasError()) {
- return 0;
- }
- Renderer renderer(size, shader);
- Controller controller;
- Clock fps;
- Clock tps;
- static Game game(controller, fps, tps);
- window.show();
- const Nanos nanosPerTick = 10'000'000;
- Nanos lag = 0;
- while(!window.shouldClose() && game.isRunning()) {
- GLWrapper::checkAndPrintError("GL-Error");
- lag += fps.update();
- while(lag >= nanosPerTick) {
- lag -= nanosPerTick;
- tps.update();
- controller.tick();
- game.tick();
- }
- Matrix view;
- view.translate(-1.0f, 1.0f);
- view.scale(2.0f / size.width, -2.0f / size.height);
- shader.setMatrix("view", view.getValues());
- game.render((float) lag / nanosPerTick, renderer);
- window.swapBuffers();
- glfwPollEvents();
- }
- return 0;
- }
|