#pragma once

#include <math.h>

#include <epoxy/gl.h>
#include <epoxy/glx.h>

#include <glm/gtc/matrix_transform.hpp>

#include "game.hpp"

namespace endofthejedi {

    /**
     * Base class for the render.
     *
     * Implementations should render the whole scene (state) on the screen with
     * opengl.
     */
    class Renderer {
        private:
        protected:
        public:
            virtual void setup() { }
            virtual void render(const game::State *state) = 0;

            virtual void setWindowSize(int px, int py) { (void) px; (void) py; }
            virtual void setCameraMatrix(const glm::mat4 &cam) { (void) cam; }
    };

}
