1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-11 17:51:04 +00:00

allow copy to vmanip directly from a mono-block

This commit is contained in:
Lars 2025-05-31 19:59:33 -07:00
parent 23c985ee60
commit 0e7eeabe73
4 changed files with 10 additions and 10 deletions

View file

@ -57,7 +57,7 @@ void MeshMakeData::fillBlockData(const v3s16 &bp, MapNode *data)
VoxelArea data_area(v3s16(0,0,0), data_size - v3s16(1,1,1));
v3s16 blockpos_nodes = bp * MAP_BLOCKSIZE;
m_vmanip.copyFrom(data, data_area, v3s16(0,0,0), blockpos_nodes, data_size);
m_vmanip.copyFrom(data, MAP_BLOCKSIZE * MAP_BLOCKSIZE * MAP_BLOCKSIZE, data_area, v3s16(0,0,0), blockpos_nodes, data_size);
}
void MeshMakeData::fillSingleNode(MapNode data, MapNode padding)

View file

@ -212,13 +212,9 @@ void MapBlock::copyTo(VoxelManipulator &dst)
v3s16 data_size(MAP_BLOCKSIZE, MAP_BLOCKSIZE, MAP_BLOCKSIZE);
VoxelArea data_area(v3s16(0,0,0), data_size - v3s16(1,1,1));
bool was_mono_block = m_is_mono_block;
deconvertMonoblock();
// Copy from data to VoxelManipulator
dst.copyFrom(data, data_area, v3s16(0,0,0),
dst.copyFrom(data, m_is_mono_block ? 1 : nodecount, data_area, v3s16(0,0,0),
getPosRelative(), data_size);
if (was_mono_block)
tryConvertToMonoblock();
}
void MapBlock::copyFrom(const VoxelManipulator &src)

View file

@ -177,7 +177,7 @@ void VoxelManipulator::addArea(const VoxelArea &area)
delete[] old_flags;
}
void VoxelManipulator::copyFrom(MapNode *src, const VoxelArea& src_area,
void VoxelManipulator::copyFrom(MapNode *src, size_t n_nodes, const VoxelArea& src_area,
v3s16 from_pos, v3s16 to_pos, const v3s16 &size)
{
/* The reason for this optimised code is that we're a member function
@ -216,8 +216,12 @@ void VoxelManipulator::copyFrom(MapNode *src, const VoxelArea& src_area,
for (s16 z = 0; z < size.Z; z++) {
for (s16 y = 0; y < size.Y; y++) {
memcpy(&m_data[i_local], &src[i_src], size.X * sizeof(*m_data));
memset(&m_flags[i_local], 0, size.X);
if (n_nodes == 1) {
std::fill(m_data + i_local, m_data + i_local + size.X, src[0]);
} else {
std::copy(src + i_src, src + i_src + size.X, m_data + i_local);
}
std::fill(m_flags + i_local, m_flags + i_local + size.X, 0);
i_src += src_step;
i_local += dest_step;
}

View file

@ -482,7 +482,7 @@ public:
Copy data and set flags to 0
dst_area.getExtent() <= src_area.getExtent()
*/
void copyFrom(MapNode *src, const VoxelArea& src_area,
void copyFrom(MapNode *src, size_t n_nodes, const VoxelArea& src_area,
v3s16 from_pos, v3s16 to_pos, const v3s16 &size);
// Copy data