#pragma once #include #include #include #include #include #include #include "RendererSection.hpp" #include "RendererEntity.hpp" #include "RendererSky.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 GameState *gs; 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; Shader *blockShader; void UpdateAllSections(VectorF playerPos); //Entities Shader *entityShader; std::vector entities; //Sky Texture *skyTexture; RendererSky rendererSky; public: RendererWorld(GameState* ptr); ~RendererWorld(); void Render(RenderState& renderState); void PrepareRender(); double MaxRenderingDistance; void Update(double timeToUpdate); GameState *GameStatePtr(); int culledSections = 0; };