1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #include <iostream>
- #include <getopt.h>
- #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;
- }
|