This commit is contained in:
MihailRis 2025-12-29 23:32:16 +03:00
parent 32a26ebbcc
commit c323b1ad15
4 changed files with 23 additions and 17 deletions

View file

@ -144,7 +144,7 @@ private:
// Does block allow to see other blocks sides (is it transparent)
inline bool isOpen(const glm::ivec3& pos, const Block& def, const Variant& variant) const {
auto vox = voxelsBuffer->pickBlock(
const auto& vox = voxelsBuffer->pickBlock(
chunk->x * CHUNK_W + pos.x, pos.y, chunk->z * CHUNK_D + pos.z
);
if (vox.id == BLOCK_VOID) {

View file

@ -123,7 +123,6 @@ std::shared_ptr<VoxelsRenderVolume> ChunksRenderer::prepareVoxelsVolume(
const Mesh<ChunkVertex>* ChunksRenderer::render(
const std::shared_ptr<Chunk>& chunk, bool important, bool lowPriority
) {
important = true;
glm::ivec2 key(chunk->x, chunk->z);
chunk->flags.modified = false;
if (important) {
@ -135,7 +134,7 @@ const Mesh<ChunkVertex>* ChunksRenderer::render(
return meshes[key].mesh.get();
}
if (inwork.find(key) != inwork.end() ||
((inwork.size() >= threadPool.getWorkTotal() ||
((inwork.size() >= threadPool.getWorkersCount() ||
enqueuedInFrame >= MAX_CHUNKS_ENQUEUED_IN_FRAME) &&
lowPriority)) {
return nullptr;

View file

@ -123,7 +123,7 @@ VC_ENUM_METADATA(BlockModelType)
{"custom", BlockModelType::CUSTOM},
VC_ENUM_END
enum class CullingMode {
enum class CullingMode : uint8_t {
DEFAULT,
OPTIONAL,
DISABLED,

View file

@ -130,29 +130,36 @@ public:
return lights;
}
inline blockid_t pickBlockId(int bx, int by, int bz) const {
if (bx < x || by < y || bz < z || bx >= x + w || by >= y + h ||
bz >= z + d) {
inline blockid_t pickBlockId(uint bx, uint by, uint bz) const {
bx -= x;
by -= y;
bz -= z;
if (bx >= w || by >= h || bz >= d) {
return BLOCK_VOID;
}
return voxels[vox_index(bx - x, by - y, bz - z, w, d)].id;
return voxels[vox_index(bx, by, bz, w, d)].id;
}
inline voxel pickBlock(int bx, int by, int bz) const {
if (bx < x || by < y || bz < z || bx >= x + w || by >= y + h ||
bz >= z + d) {
return {BLOCK_VOID, {}};
inline const voxel& pickBlock(uint bx, uint by, uint bz) const {
bx -= x;
by -= y;
bz -= z;
if (bx >= w || by >= h || bz >= d) {
static voxel voidVoxel {BLOCK_VOID, {}};
return voidVoxel;
}
return voxels[vox_index(bx - x, by - y, bz - z, w, d)];
return voxels[vox_index(bx, by, bz, w, d)];
}
inline light_t pickLight(int bx, int by, int bz) const {
if (bx < x || by < y || bz < z || bx >= x + w || by >= y + h ||
bz >= z + d) {
inline light_t pickLight(uint bx, uint by, uint bz) const {
bx -= x;
by -= y;
bz -= z;
if (bx >= w || by >= h || bz >= d) {
return 0;
}
return lights[vox_index(bx - x, by - y, bz - z, w, d)];
return lights[vox_index(bx, by, bz, w, d)];
}
private:
int x, y, z;