64 lines
2.3 KiB
C++
64 lines
2.3 KiB
C++
//
|
|
// Created by sebastian on 08.02.26.
|
|
//
|
|
|
|
#ifndef MASTERRENDERER_H
|
|
#define MASTERRENDERER_H
|
|
#include <unordered_map>
|
|
#include <vector>
|
|
|
|
#include "MinimapRenderer.h"
|
|
#include "Renderer.h"
|
|
#include "TerrainRenderer.h"
|
|
#include "WorldSpriteRenderer.h"
|
|
#include "../layer/entities/Entity.h"
|
|
#include "model/RenderTargets.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;
|
|
std::vector<MinimapRenderData> minimapRenderData;
|
|
glm::mat4 projectionMatrix;
|
|
std::unique_ptr<Renderer> entityRenderer;
|
|
std::unique_ptr<TerrainRenderer> terrainRenderer;
|
|
std::unique_ptr<WorldSpriteRenderer> worldSpriteRenderer;
|
|
std::unique_ptr<MinimapRenderer> minimapRenderer;
|
|
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)),
|
|
minimapRenderer(std::make_unique<MinimapRenderer>(600,400))
|
|
{
|
|
glEnable(GL_CULL_FACE);
|
|
glCullFace(GL_BACK);
|
|
|
|
|
|
RenderTargets::instance().setMinimapTexture(minimapRenderer->getMinimapTexture());
|
|
};
|
|
void render(const Light &light, const Camera &camera);
|
|
|
|
void submitEntity(std::unique_ptr<Entity> entity);
|
|
void submitTerrainTile(const std::shared_ptr<TransformComponent>& transform, const std::shared_ptr<ModelComponent>& model, const std::shared_ptr<
|
|
TileRenderComponent>&, const std::shared_ptr<OwnerComponent>& owner);
|
|
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
|