#pragma once #include "RendererSection.hpp" #include "RendererEntity.hpp" #include "RendererSky.hpp" #include "GameState.hpp" #include "Shader.hpp" #include class RendererWorld { //General std::shared_ptr gs; EventListener 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::vector renderList; std::mutex sectionsMutex; std::map sections; Shader *blockShader; void UpdateAllSections(VectorF playerPos); //Entities Shader *entityShader; std::vector entities; //Sky Texture *skyTexture; Shader *skyShader; RendererSky rendererSky; public: RendererWorld(std::shared_ptr ptr); ~RendererWorld(); void Render(RenderState& renderState); void PrepareResources(); void PrepareRender(); bool IsNeedResourcesPrepare(); double MaxRenderingDistance; void Update(double timeToUpdate); std::mutex renderDataMutex; std::queue renderData; };