//
// Created by sebastian on 24.12.25.
//

#ifndef DICEWARS_SIEDLER_RENDERER_H
#define DICEWARS_SIEDLER_RENDERER_H
#include "../../game/hexWorld/HexTile.h"
#include "../layer/entities/Entity.h"
#include "model/RawModel.h"
#include "model/TexturedModel.h"
#include "shaders/StaticShader.h"



class Light;
class Camera;

class Renderer {
public:
    explicit Renderer(const glm::mat4 &projectionMatrix) {
        staticShader.start();
        staticShader.loadProjectionMatrix(projectionMatrix);
        staticShader.stop();
    };
    void prepare(const ::Camera &camera, const Light& light);

    void renderEntities(const std::unordered_map<TexturedModel *, std::vector<Entity *>> &entities);
    void finalizeFrame();
private:
    StaticShader staticShader;

    void prepareTexturedModel(const TexturedModel &texturedModel);
    void unbindTexturedModel();
    void prepareInstance(const Entity &entity);


};


#endif //DICEWARS_SIEDLER_RENDERER_H