From 47bc1c3f81d8f697ddf6a9b84f5cb0b762be9096 Mon Sep 17 00:00:00 2001 From: LaG1924 <12997935+LaG1924@users.noreply.github.com> Date: Sat, 17 Mar 2018 00:04:44 +0500 Subject: New lock-free RendererSectionData parsing --- src/RendererWorld.hpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/RendererWorld.hpp') diff --git a/src/RendererWorld.hpp b/src/RendererWorld.hpp index b9d1113..77a02fd 100644 --- a/src/RendererWorld.hpp +++ b/src/RendererWorld.hpp @@ -10,6 +10,7 @@ #include "RendererSection.hpp" #include "RendererEntity.hpp" #include "RendererSky.hpp" +#include "RendererSectionData.hpp" class Frustum; class GameState; @@ -17,9 +18,14 @@ class Texture; class Shader; class EventListener; class RenderState; -class RendererSectionData; class RendererWorld { + struct SectionParsing { + SectionsData data; + RendererSectionData renderer; + bool parsing = false; + }; + //General GameState *gs; std::unique_ptr listener; @@ -28,13 +34,14 @@ class RendererWorld { std::vector workers; void WorkerFunction(size_t WorkerId); bool isRunning = true; - std::mutex isParsingMutex; - std::map isParsing; + const static size_t parsingBufferSize = 64; + SectionParsing parsing[parsingBufferSize]; + std::queue parseQueue; + bool parseQueueNeedRemoveUnnecessary = false; + void ParseQueueUpdate(); + void ParseQeueueRemoveUnnecessary(); //Blocks - std::mutex renderDataMutex; - std::queue> renderData; std::vector renderList; - std::mutex sectionsMutex; std::map sections; Shader *blockShader; void UpdateAllSections(VectorF playerPos); -- cgit v1.2.3