mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-08 12:31:51 +00:00
ThreadPool test
This commit is contained in:
parent
40c3ce0cb1
commit
781ab0e892
3 changed files with 177 additions and 122 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue