Dicewars-Siedler/src/engine/renderer/MasterRenderer.h
2026-02-14 14:42:29 +01:00

55 lines
1.9 KiB
C++

//
// Created by sebastian on 08.02.26.
//
#ifndef MASTERRENDERER_H
#define MASTERRENDERER_H
#include <unordered_map>
#include <vector>
#include "Renderer.h"
#include "TerrainRenderer.h"
#include "WorldSpriteRenderer.h"
#include "../layer/entities/Entity.h"
#include "model/TexturedModel.h"
class Camera;
class Light;
class MasterRenderer {
private:
std::unordered_map<TexturedModel*, std::vector<std::unique_ptr<Entity>>> entities;
std::unordered_map<TexturedModel*, std::vector<std::unique_ptr<TerrainRenderingData>>> terrainTiles;
std::unordered_map<ModelTexture*, std::vector<WorldSpriteRenderingData>> worldSprites;
glm::mat4 projectionMatrix;
std::unique_ptr<Renderer> entityRenderer;
std::unique_ptr<TerrainRenderer> terrainRenderer;
std::unique_ptr<WorldSpriteRenderer> worldSpriteRenderer;
constexpr static float FOV = 70.0f;
constexpr static float NEAR_PLANE = 0.1f;
constexpr static float FAR_PLANE = 1000.0f;
static glm::mat4 createProjectionMatrix();
public:
MasterRenderer() : projectionMatrix(createProjectionMatrix()), entityRenderer(std::make_unique<Renderer>(projectionMatrix)),
terrainRenderer(std::make_unique<TerrainRenderer>(projectionMatrix)), worldSpriteRenderer(std::make_unique<WorldSpriteRenderer>(projectionMatrix))
{
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
};
void render(const Light &light, const Camera &camera);
void submitEntity(std::unique_ptr<Entity> entity);
void submitTerrainTile(std::shared_ptr<TransformComponent> transform, std::shared_ptr<ModelComponent> model, std::shared_ptr<TileRenderComponent>);
void submitWorldSprite(const std::shared_ptr<TransformComponent> &transform, const std::shared_ptr<WorldSpriteComponent> &sprite, const std::
shared_ptr<ModelTexture> &texture);
[[nodiscard]] glm::mat4 getProjectionMatrix() const {return projectionMatrix;}
};
#endif //MASTERRENDERER_H