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:
parent
23c985ee60
commit
0e7eeabe73
4 changed files with 10 additions and 10 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue