other optimizations
This commit is contained in:
@@ -458,14 +458,13 @@ void BlocksRenderer::build(const Chunk* chunk, const ChunksStorage* chunks) {
|
||||
render(voxels);
|
||||
}
|
||||
|
||||
Mesh* BlocksRenderer::createMesh() {
|
||||
std::shared_ptr<Mesh> BlocksRenderer::createMesh() {
|
||||
const vattr attrs[]{ {3}, {2}, {1}, {0} };
|
||||
size_t vcount = vertexOffset / BlocksRenderer::VERTEX_SIZE;
|
||||
Mesh* mesh = new Mesh(vertexBuffer, vcount, indexBuffer, indexSize, attrs);
|
||||
return mesh;
|
||||
return std::make_shared<Mesh>(vertexBuffer, vcount, indexBuffer, indexSize, attrs);
|
||||
}
|
||||
|
||||
Mesh* BlocksRenderer::render(const Chunk* chunk, const ChunksStorage* chunks) {
|
||||
std::shared_ptr<Mesh> BlocksRenderer::render(const Chunk* chunk, const ChunksStorage* chunks) {
|
||||
build(chunk, chunks);
|
||||
return createMesh();
|
||||
}
|
||||
|
||||
@@ -94,8 +94,8 @@ public:
|
||||
virtual ~BlocksRenderer();
|
||||
|
||||
void build(const Chunk* chunk, const ChunksStorage* chunks);
|
||||
Mesh* render(const Chunk* chunk, const ChunksStorage* chunks);
|
||||
Mesh* createMesh();
|
||||
std::shared_ptr<Mesh> render(const Chunk* chunk, const ChunksStorage* chunks);
|
||||
std::shared_ptr<Mesh> createMesh();
|
||||
VoxelsVolume* getVoxelsBuffer() const;
|
||||
};
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ ChunksRenderer::ChunksRenderer(
|
||||
"chunks-render-pool",
|
||||
[=](){return std::make_shared<RendererWorker>(level, cache, settings);},
|
||||
[=](RendererResult& mesh){
|
||||
meshes[mesh.key].reset(mesh.renderer->createMesh());
|
||||
meshes[mesh.key] = mesh.renderer->createMesh();
|
||||
inwork.erase(mesh.key);
|
||||
})
|
||||
{
|
||||
@@ -59,7 +59,7 @@ std::shared_ptr<Mesh> ChunksRenderer::render(std::shared_ptr<Chunk> chunk, bool
|
||||
chunk->setModified(false);
|
||||
|
||||
if (important) {
|
||||
std::shared_ptr<Mesh> mesh (renderer->render(chunk.get(), level->chunksStorage.get()));
|
||||
auto mesh = renderer->render(chunk.get(), level->chunksStorage.get());
|
||||
meshes[glm::ivec2(chunk->x, chunk->z)] = mesh;
|
||||
return mesh;
|
||||
}
|
||||
|
||||
@@ -121,8 +121,8 @@ void WorldRenderer::drawChunks(Chunks* chunks, Camera* camera, Shader* shader) {
|
||||
continue;
|
||||
indices.push_back(i);
|
||||
}
|
||||
int px = camera->position.x / (float)CHUNK_W - 0.5f;
|
||||
int pz = camera->position.z / (float)CHUNK_D - 0.5f;
|
||||
float px = camera->position.x / (float)CHUNK_W - 0.5f;
|
||||
float pz = camera->position.z / (float)CHUNK_D - 0.5f;
|
||||
std::sort(indices.begin(), indices.end(), [chunks, px, pz](auto i, auto j) {
|
||||
const auto& a = chunks->chunks[i];
|
||||
const auto& b = chunks->chunks[j];
|
||||
|
||||
Reference in New Issue
Block a user