#pragma once #include "RendererSection.hpp" #include "RendererEntity.hpp" #include "GameState.hpp" #include "Shader.hpp" #include class RendererWorld: public Renderer { //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; public: RendererWorld(std::shared_ptr ptr); ~RendererWorld(); void Render(RenderState& renderState) override; void PrepareResources() override; void PrepareRender() override; bool IsNeedResourcesPrepare() override; double MaxRenderingDistance; void Update(double timeToUpdate); std::mutex renderDataMutex; std::queue renderData; };