66 lines
2.2 KiB
C++
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;
|
|
}
|