#pragma once #include #include #include #include #include #include "RendererSection.hpp" #include "RendererEntity.hpp" #include "RendererSky.hpp" class Frustum; class GameState; class Texture; class Shader; class EventListener; class RenderState; class RendererWorld { //General GameState *gs; std::unique_ptr listener; size_t numOfWorkers; size_t currentWorker = 0; std::vector workers; void WorkerFunction(size_t WorkerId); bool isRunning = true; std::mutex isParsingMutex; std::map isParsing; //Blocks std::mutex renderDataMutex; std::queue renderData; std::vector renderList; std::mutex sectionsMutex; std::map sections; Shader *blockShader; void UpdateAllSections(VectorF playerPos); std::unique_ptr frustum; //Entities Shader *entityShader; std::vector entities; //Sky Texture *skyTexture; Shader *skyShader; RendererSky rendererSky; public: RendererWorld(GameState* ptr); ~RendererWorld(); void Render(RenderState& renderState); void PrepareRender(); double MaxRenderingDistance; void Update(double timeToUpdate); GameState *GameStatePtr(); int culledSections = 0; };