// // Created by sebastian on 08.02.26. // #include "MasterRenderer.h" #include #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) { TexturedModel* entityModel = entity->getModel().get(); entities[entityModel].push_back(std::move(entity)); } void MasterRenderer::submitTerrainTile(std::shared_ptr transform, std::shared_ptr model, std::shared_ptr terrainTileComponent) { TerrainRenderingData terrain = TerrainRenderingData(std::move(transform), std::move(model), std::move(terrainTileComponent)); terrainTiles[terrain.modelComponent->getActiveModel().get()].push_back(std::make_unique(std::move(terrain))); } void MasterRenderer::submitWorldSprite( const std::shared_ptr& transform, const std::shared_ptr& sprite, const std::shared_ptr& 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(Application::getInstance().getWindow().GetWidth()) / static_cast(Application::getInstance().getWindow().GetHeight()); glm::mat4 projection = glm::perspective( glm::radians(FOV), aspectRatio, NEAR_PLANE, FAR_PLANE ); return projection; }