ThreadPool test

This commit is contained in:
MihailRis 2024-04-04 21:32:38 +03:00
parent 40c3ce0cb1
commit 781ab0e892
3 changed files with 177 additions and 122 deletions

View file

@ -2,16 +2,14 @@
#define GRAPHICS_RENDER_CHUNKSRENDERER_H_
#include <queue>
#include <mutex>
#include <thread>
#include <memory>
#include <vector>
#include <unordered_map>
#include <glm/glm.hpp>
#include <condition_variable>
#include "../../voxels/Block.h"
#include "../../voxels/ChunksStorage.h"
#include "../../util/ThreadPool.h"
#include "../../settings.h"
class Mesh;
@ -20,44 +18,24 @@ class Level;
class BlocksRenderer;
class ContentGfxCache;
struct mesh_entry {
BlocksRenderer& renderer;
struct RendererResult {
glm::ivec2 key;
};
struct Result {
std::condition_variable& variable;
int workerIndex;
bool& locked;
mesh_entry entry;
std::shared_ptr<BlocksRenderer> renderer;
};
class ChunksRenderer {
std::unique_ptr<BlocksRenderer> renderer;
Level* level;
std::unique_ptr<BlocksRenderer> renderer;
std::unordered_map<glm::ivec2, std::shared_ptr<Mesh>> meshes;
std::unordered_map<glm::ivec2, bool> inwork;
std::vector<std::thread> threads;
std::queue<Result> results;
std::mutex resultsMutex;
std::queue<std::shared_ptr<Chunk>> jobs;
std::condition_variable jobsMutexCondition;
std::mutex jobsMutex;
bool working = true;
const ContentGfxCache* cache;
const EngineSettings& settings;
std::vector<std::unique_lock<std::mutex>> workersBlocked;
void enqueueJob(std::shared_ptr<Chunk> chunk);
void threadLoop(int index);
void process(std::shared_ptr<Chunk> chunk, BlocksRenderer& renderer);
util::ThreadPool<std::shared_ptr<Chunk>, RendererResult> threadPool;
public:
ChunksRenderer(Level* level,
const ContentGfxCache* cache,
const EngineSettings& settings);
ChunksRenderer(
Level* level,
const ContentGfxCache* cache,
const EngineSettings& settings
);
virtual ~ChunksRenderer();
std::shared_ptr<Mesh> render(std::shared_ptr<Chunk> chunk, bool important);