#include #include #include "Game.h" #include "rendering/Renderer.h" #include "rendering/Shader.h" #include "rendering/Window.h" #include "rendering/WindowOptions.h" #include "utils/Clock.h" #include "wrapper/GL.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) { Size size(800, 480); WindowOptions options(3, 0, size, true, "Pigine"); if(parseArgs(argAmount, args, options)) { return 0; } Window w; Error error = w.open(options); if(error.has()) { error.message.printLine(); return 0; } Shader cubeShader; error = cubeShader.compile("resources/shader/vertex.vs", "resources/shader/fragment.fs"); if(error.has()) { error.message.printLine(); return 0; } Controller controller(w.buttons); static Game game(controller, w.getFrameClock(), w.getTickClock(), size); struct GameBase { Window& window; Game& game; Shader& shader; Renderer renderer; GameBase(Window& w, Game& g, Shader& s) : window(w), game(g), shader(s), renderer(s) { } void tick() { game.tick(); } void render(float lag) { GL::clear(); const 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(lag, renderer); GL::printError("GL-Error"); } bool isRunning() const { return game.isRunning(); } }; GameBase base(w, game, cubeShader); w.run(base, 10'000'000); return 0; }