VOXEL: directly use PagedVolume
parent
45ef53c800
commit
0816912cab
|
@ -9,12 +9,12 @@ inline bool isSolidVoxel(const Voxel& voxel) {
|
|||
return voxel.getMaterial() != Air;
|
||||
}
|
||||
|
||||
void rescaleCubicVolume(WorldData* source, const Region& sourceRegion, RawVolume<Voxel>* destination, const Region& destinationRegion) {
|
||||
void rescaleCubicVolume(PagedVolume* source, const Region& sourceRegion, RawVolume<Voxel>* destination, const Region& destinationRegion) {
|
||||
core_assert_msg(sourceRegion.getWidthInVoxels() == destinationRegion.getWidthInVoxels() * 2, "Wrong width - %i versus %i!", sourceRegion.getWidthInVoxels(), destinationRegion.getWidthInVoxels() * 2);
|
||||
core_assert_msg(sourceRegion.getHeightInVoxels() == destinationRegion.getHeightInVoxels() * 2, "Wrong height - %i versus %i!", sourceRegion.getHeightInVoxels(), destinationRegion.getHeightInVoxels() * 2);
|
||||
core_assert_msg(sourceRegion.getDepthInVoxels() == destinationRegion.getDepthInVoxels() * 2, "Wrong depth - %i versus %i!", sourceRegion.getDepthInVoxels(), destinationRegion.getDepthInVoxels() * 2);
|
||||
|
||||
typename WorldData::Sampler srcSampler(source);
|
||||
typename PagedVolume::Sampler srcSampler(source);
|
||||
typename RawVolume<Voxel>::Sampler dstSampler(destination);
|
||||
|
||||
// First of all we iterate over all destination voxels and compute their color as the
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace voxel {
|
|||
|
||||
#define WORLD_FILE_VERSION 1
|
||||
|
||||
void World::Pager::pageIn(const Region& region, WorldData::Chunk* chunk) {
|
||||
void World::Pager::pageIn(const Region& region, PagedVolume::Chunk* chunk) {
|
||||
TerrainContext ctx;
|
||||
ctx.region = region;
|
||||
ctx.chunk = chunk;
|
||||
|
@ -29,7 +29,7 @@ void World::Pager::pageIn(const Region& region, WorldData::Chunk* chunk) {
|
|||
}
|
||||
}
|
||||
|
||||
void World::Pager::pageOut(const Region& region, WorldData::Chunk* chunk) {
|
||||
void World::Pager::pageOut(const Region& region, PagedVolume::Chunk* chunk) {
|
||||
#if 0
|
||||
TerrainContext ctx;
|
||||
ctx.region = region;
|
||||
|
@ -43,7 +43,7 @@ World::World() :
|
|||
_pager(*this), _seed(0), _clientData(false), _threadPool(1), _rwLock("World"),
|
||||
_random(_seed), _noiseSeedOffsetX(0.0f), _noiseSeedOffsetZ(0.0f) {
|
||||
_chunkSize = core::Var::get(cfg::VoxelChunkSize, "64", core::CV_READONLY);
|
||||
_volumeData = new WorldData(&_pager, 256 * 1024 * 1024, _chunkSize->intVal());
|
||||
_volumeData = new PagedVolume(&_pager, 256 * 1024 * 1024, _chunkSize->intVal());
|
||||
core_assert(_biomManager.addBiom(0, 100, createVoxel(Grass)));
|
||||
core_assert(_biomManager.addBiom(101, MAX_HEIGHT - 1, createVoxel(Grass)));
|
||||
}
|
||||
|
@ -200,7 +200,7 @@ void World::placeTree(const World::TreeContext& ctx) {
|
|||
addTree(tctx, pos, ctx.type, ctx.trunkHeight, ctx.trunkWidth, ctx.width, ctx.depth, ctx.height);
|
||||
}
|
||||
|
||||
int World::findChunkFloor(int chunkHeight, WorldData::Chunk* chunk, int x, int z) {
|
||||
int World::findChunkFloor(int chunkHeight, PagedVolume::Chunk* chunk, int x, int z) {
|
||||
for (int i = chunkHeight - 1; i >= 0; i--) {
|
||||
const int material = chunk->getVoxel(x, i, z).getMaterial();
|
||||
if (isFloor(material)) {
|
||||
|
@ -226,15 +226,15 @@ bool World::allowReExtraction(const glm::ivec3& pos) {
|
|||
|
||||
bool World::findPath(const glm::ivec3& start, const glm::ivec3& end,
|
||||
std::list<glm::ivec3>& listResult) {
|
||||
static auto f = [] (const voxel::WorldData* volData, const glm::ivec3& v3dPos) {
|
||||
static auto f = [] (const voxel::PagedVolume* volData, const glm::ivec3& v3dPos) {
|
||||
const voxel::Voxel& voxel = volData->getVoxel(v3dPos);
|
||||
return voxel.getMaterial() != Air;
|
||||
};
|
||||
|
||||
locked([&] () {
|
||||
const AStarPathfinderParams<voxel::WorldData> params(_volumeData, start, end, &listResult, 1.0f, 10000,
|
||||
const AStarPathfinderParams<voxel::PagedVolume> params(_volumeData, start, end, &listResult, 1.0f, 10000,
|
||||
TwentySixConnected, std::bind(f, std::placeholders::_1, std::placeholders::_2));
|
||||
AStarPathfinder<voxel::WorldData> pf(params);
|
||||
AStarPathfinder<voxel::PagedVolume> pf(params);
|
||||
// TODO: move into threadpool
|
||||
pf.execute();
|
||||
});
|
||||
|
|
|
@ -74,7 +74,7 @@ public:
|
|||
// if a chunk region is exceeded by a coordinate (which might be true for e.g. tree,
|
||||
// cloud or building generation) then the relative chunk coordinate is converted into
|
||||
// an absolute position in the world by taking the given region parameter into account
|
||||
WorldData::Chunk* chunk;
|
||||
PagedVolume::Chunk* chunk;
|
||||
PositionSet dirty;
|
||||
};
|
||||
|
||||
|
@ -189,7 +189,7 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
class Pager: public WorldData::Pager {
|
||||
class Pager: public PagedVolume::Pager {
|
||||
private:
|
||||
World& _world;
|
||||
public:
|
||||
|
@ -197,9 +197,9 @@ private:
|
|||
_world(world) {
|
||||
}
|
||||
|
||||
void pageIn(const Region& region, WorldData::Chunk* chunk) override;
|
||||
void pageIn(const Region& region, PagedVolume::Chunk* chunk) override;
|
||||
|
||||
void pageOut(const Region& region, WorldData::Chunk* chunk) override;
|
||||
void pageOut(const Region& region, PagedVolume::Chunk* chunk) override;
|
||||
};
|
||||
|
||||
template<typename Func>
|
||||
|
@ -222,7 +222,7 @@ private:
|
|||
return func();
|
||||
}
|
||||
|
||||
static int findChunkFloor(int chunkSize, WorldData::Chunk* chunk, int x, int y);
|
||||
static int findChunkFloor(int chunkSize, PagedVolume::Chunk* chunk, int x, int y);
|
||||
|
||||
bool load(TerrainContext& ctx);
|
||||
bool save(TerrainContext& ctx);
|
||||
|
@ -252,7 +252,7 @@ private:
|
|||
inline bool isValidChunkPosition(TerrainContext& ctx, const glm::ivec3& pos) const;
|
||||
|
||||
Pager _pager;
|
||||
WorldData *_volumeData;
|
||||
PagedVolume *_volumeData;
|
||||
BiomManager _biomManager;
|
||||
WorldContext _ctx;
|
||||
mutable std::mt19937 _engine;
|
||||
|
|
Loading…
Reference in New Issue