Dicewars-Siedler/src/engine/renderer/MasterRenderer.cpp
2026-02-14 17:17:05 +01:00

66 lines
2.2 KiB
C++

//
// Created by sebastian on 08.02.26.
//
#include "MasterRenderer.h"
#include <utility>
#include "../core/Application.h"
#include "glm/ext/matrix_clip_space.hpp"
void MasterRenderer::render(const Light &light, const Camera &camera) {
glEnable(GL_DEPTH_TEST);
glClearColor(0.3254901961, 0.6431372549, 0.9254901961f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
entityRenderer->prepare(camera, light);
entityRenderer->renderEntities(entities);
entityRenderer->finalizeFrame();
entities.clear();
terrainRenderer->prepare(camera, light);
terrainRenderer->renderTerrainTiles(terrainTiles);
terrainRenderer->finalizeFrame();
terrainTiles.clear();
worldSpriteRenderer->prepare(camera);
worldSpriteRenderer->render(worldSprites, camera);
worldSpriteRenderer->finalize();
worldSprites.clear();
}
void MasterRenderer::submitEntity(std::unique_ptr<Entity> entity) {
TexturedModel* entityModel = entity->getModel().get();
entities[entityModel].push_back(std::move(entity));
}
void MasterRenderer::submitTerrainTile(std::shared_ptr<TransformComponent> transform, std::shared_ptr<ModelComponent> model, std::shared_ptr<TileRenderComponent> terrainTileComponent) {
TerrainRenderingData terrain = TerrainRenderingData(std::move(transform), std::move(model), std::move(terrainTileComponent));
terrainTiles[terrain.modelComponent->getActiveModel().get()].push_back(std::make_unique<TerrainRenderingData>(std::move(terrain)));
}
void MasterRenderer::submitWorldSprite(
const std::shared_ptr<TransformComponent>& transform,
const std::shared_ptr<WorldSpriteComponent>& sprite,
const std::shared_ptr<ModelTexture>& texture
) {
WorldSpriteRenderingData world_sprite_rendering_data(transform, sprite, texture);
worldSprites[texture.get()].push_back(world_sprite_rendering_data);
}
glm::mat4 MasterRenderer::createProjectionMatrix() {
float aspectRatio = static_cast<float>(Application::getInstance().getWindow().GetWidth()) / static_cast<float>(Application::getInstance().getWindow().GetHeight());
glm::mat4 projection = glm::perspective(
glm::radians(FOV),
aspectRatio,
NEAR_PLANE,
FAR_PLANE
);
return projection;
}