#pragma once #include #include #include #include #include #include #include "RendererSection.hpp" #include "RendererEntity.hpp" #include "RendererSectionData.hpp" class Frustum; class GameState; class Texture; class Shader; class EventListener; class RenderState; class RendererWorld { struct SectionParsing { SectionsData data; RendererSectionData renderer; bool parsing = false; }; //General std::unique_ptr listener; size_t numOfWorkers; size_t currentWorker = 0; std::vector workers; void WorkerFunction(size_t WorkerId); bool isRunning = true; const static size_t parsingBufferSize = 64; SectionParsing parsing[parsingBufferSize]; std::queue parseQueue; bool parseQueueNeedRemoveUnnecessary = false; void ParseQueueUpdate(); void ParseQeueueRemoveUnnecessary(); //Blocks std::vector renderList; std::map sections; void UpdateAllSections(VectorF playerPos); std::chrono::time_point globalTimeStart; std::shared_ptr sectionsPipeline; std::shared_ptr sectionsBufferBinding; //Entities std::vector entities; std::shared_ptr entitiesPipeline; std::shared_ptr entitiesPipelineInstance; std::shared_ptr entitiesPosBuffer, entitiesIndexBuffer; //Sky std::shared_ptr skyPipeline; std::shared_ptr skyPipelineInstance; std::shared_ptr skyBuffer; public: RendererWorld(std::shared_ptr target, bool defferedShading, bool smoothLighting); ~RendererWorld(); void Render(float screenRatio); void PrepareRender(std::shared_ptr target, bool defferedShading); double MaxRenderingDistance; void Update(double timeToUpdate); bool smoothLighting; };