minor refactor
This commit is contained in:
@@ -16,22 +16,19 @@ const uint RENDERER_CAPACITY = 9 * 6 * 6 * 3000;
|
|||||||
|
|
||||||
class RendererWorker : public util::Worker<std::shared_ptr<Chunk>, RendererResult> {
|
class RendererWorker : public util::Worker<std::shared_ptr<Chunk>, RendererResult> {
|
||||||
Level* level;
|
Level* level;
|
||||||
std::shared_ptr<BlocksRenderer> renderer;
|
BlocksRenderer renderer;
|
||||||
public:
|
public:
|
||||||
RendererWorker(
|
RendererWorker(
|
||||||
Level* level,
|
Level* level,
|
||||||
const ContentGfxCache* cache,
|
const ContentGfxCache* cache,
|
||||||
const EngineSettings& settings
|
const EngineSettings& settings
|
||||||
) : level(level)
|
) : level(level),
|
||||||
{
|
renderer(RENDERER_CAPACITY, level->content, cache, settings)
|
||||||
renderer = std::make_shared<BlocksRenderer>(
|
{}
|
||||||
RENDERER_CAPACITY, level->content, cache, settings
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
RendererResult operator()(const std::shared_ptr<Chunk>& chunk) override {
|
RendererResult operator()(const std::shared_ptr<Chunk>& chunk) override {
|
||||||
renderer->build(chunk.get(), level->chunksStorage.get());
|
renderer.build(chunk.get(), level->chunksStorage.get());
|
||||||
return RendererResult {glm::ivec2(chunk->x, chunk->z), renderer};
|
return RendererResult {glm::ivec2(chunk->x, chunk->z), &renderer};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -59,10 +56,9 @@ std::shared_ptr<Mesh> ChunksRenderer::render(std::shared_ptr<Chunk> chunk, bool
|
|||||||
chunk->setModified(false);
|
chunk->setModified(false);
|
||||||
|
|
||||||
if (important) {
|
if (important) {
|
||||||
Mesh* mesh = renderer->render(chunk.get(), level->chunksStorage.get());
|
std::shared_ptr<Mesh> mesh (renderer->render(chunk.get(), level->chunksStorage.get()));
|
||||||
auto sptr = std::shared_ptr<Mesh>(mesh);
|
meshes[glm::ivec2(chunk->x, chunk->z)] = mesh;
|
||||||
meshes[glm::ivec2(chunk->x, chunk->z)] = sptr;
|
return mesh;
|
||||||
return sptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::ivec2 key(chunk->x, chunk->z);
|
glm::ivec2 key(chunk->x, chunk->z);
|
||||||
@@ -75,7 +71,7 @@ std::shared_ptr<Mesh> ChunksRenderer::render(std::shared_ptr<Chunk> chunk, bool
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChunksRenderer::unload(Chunk* chunk) {
|
void ChunksRenderer::unload(const Chunk* chunk) {
|
||||||
auto found = meshes.find(glm::ivec2(chunk->x, chunk->z));
|
auto found = meshes.find(glm::ivec2(chunk->x, chunk->z));
|
||||||
if (found != meshes.end()) {
|
if (found != meshes.end()) {
|
||||||
meshes.erase(found);
|
meshes.erase(found);
|
||||||
@@ -84,13 +80,13 @@ void ChunksRenderer::unload(Chunk* chunk) {
|
|||||||
|
|
||||||
std::shared_ptr<Mesh> ChunksRenderer::getOrRender(std::shared_ptr<Chunk> chunk, bool important) {
|
std::shared_ptr<Mesh> ChunksRenderer::getOrRender(std::shared_ptr<Chunk> chunk, bool important) {
|
||||||
auto found = meshes.find(glm::ivec2(chunk->x, chunk->z));
|
auto found = meshes.find(glm::ivec2(chunk->x, chunk->z));
|
||||||
if (found != meshes.end()){
|
if (found == meshes.end()) {
|
||||||
if (chunk->isModified()) {
|
return render(chunk, important);
|
||||||
render(chunk, important);
|
|
||||||
}
|
|
||||||
return found->second;
|
|
||||||
}
|
}
|
||||||
return render(chunk, important);
|
if (chunk->isModified()) {
|
||||||
|
render(chunk, important);
|
||||||
|
}
|
||||||
|
return found->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<Mesh> ChunksRenderer::get(Chunk* chunk) {
|
std::shared_ptr<Mesh> ChunksRenderer::get(Chunk* chunk) {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class ContentGfxCache;
|
|||||||
|
|
||||||
struct RendererResult {
|
struct RendererResult {
|
||||||
glm::ivec2 key;
|
glm::ivec2 key;
|
||||||
std::shared_ptr<BlocksRenderer> renderer;
|
BlocksRenderer* renderer;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ChunksRenderer {
|
class ChunksRenderer {
|
||||||
@@ -39,7 +39,7 @@ public:
|
|||||||
virtual ~ChunksRenderer();
|
virtual ~ChunksRenderer();
|
||||||
|
|
||||||
std::shared_ptr<Mesh> render(std::shared_ptr<Chunk> chunk, bool important);
|
std::shared_ptr<Mesh> render(std::shared_ptr<Chunk> chunk, bool important);
|
||||||
void unload(Chunk* chunk);
|
void unload(const Chunk* chunk);
|
||||||
|
|
||||||
std::shared_ptr<Mesh> getOrRender(std::shared_ptr<Chunk> chunk, bool important);
|
std::shared_ptr<Mesh> getOrRender(std::shared_ptr<Chunk> chunk, bool important);
|
||||||
std::shared_ptr<Mesh> get(Chunk* chunk);
|
std::shared_ptr<Mesh> get(Chunk* chunk);
|
||||||
|
|||||||
Reference in New Issue
Block a user