mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-03-29 04:20:29 +00:00
Render nearby default cells if the Distant Terrain is disabled
This commit is contained in:
parent
46e1ed660c
commit
a6fd077537
@ -249,7 +249,7 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
QuadTreeWorld::QuadTreeWorld(osg::Group *parent, osg::Group *compileRoot, Resource::ResourceSystem *resourceSystem, Storage *storage, int nodeMask, int preCompileMask, int borderMask, int compMapResolution, float compMapLevel, float lodFactor, int vertexLodMod, float maxCompGeometrySize)
|
QuadTreeWorld::QuadTreeWorld(osg::Group *parent, osg::Group *compileRoot, Resource::ResourceSystem *resourceSystem, Storage *storage, int nodeMask, int preCompileMask, int borderMask, int compMapResolution, float compMapLevel, float lodFactor, int vertexLodMod, float maxCompGeometrySize)
|
||||||
: World(parent, compileRoot, resourceSystem, storage, nodeMask, preCompileMask, borderMask)
|
: TerrainGrid(parent, compileRoot, resourceSystem, storage, nodeMask, preCompileMask, borderMask)
|
||||||
, mViewDataMap(new ViewDataMap)
|
, mViewDataMap(new ViewDataMap)
|
||||||
, mQuadTreeBuilt(false)
|
, mQuadTreeBuilt(false)
|
||||||
, mLodFactor(lodFactor)
|
, mLodFactor(lodFactor)
|
||||||
@ -515,5 +515,25 @@ void QuadTreeWorld::setDefaultViewer(osg::Object *obj)
|
|||||||
mViewDataMap->setDefaultViewer(obj);
|
mViewDataMap->setDefaultViewer(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QuadTreeWorld::loadCell(int x, int y)
|
||||||
|
{
|
||||||
|
// fallback behavior only for undefined cells (every other is already handled in quadtree)
|
||||||
|
float dummy;
|
||||||
|
if (!mStorage->getMinMaxHeights(1, osg::Vec2f(x+0.5, y+0.5), dummy, dummy))
|
||||||
|
TerrainGrid::loadCell(x,y);
|
||||||
|
else
|
||||||
|
World::loadCell(x,y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QuadTreeWorld::unloadCell(int x, int y)
|
||||||
|
{
|
||||||
|
// fallback behavior only for undefined cells (every other is already handled in quadtree)
|
||||||
|
float dummy;
|
||||||
|
if (!mStorage->getMinMaxHeights(1, osg::Vec2f(x+0.5, y+0.5), dummy, dummy))
|
||||||
|
TerrainGrid::unloadCell(x,y);
|
||||||
|
else
|
||||||
|
World::unloadCell(x,y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define COMPONENTS_TERRAIN_QUADTREEWORLD_H
|
#define COMPONENTS_TERRAIN_QUADTREEWORLD_H
|
||||||
|
|
||||||
#include "world.hpp"
|
#include "world.hpp"
|
||||||
|
#include "terraingrid.hpp"
|
||||||
|
|
||||||
#include <OpenThreads/Mutex>
|
#include <OpenThreads/Mutex>
|
||||||
|
|
||||||
@ -16,7 +17,7 @@ namespace Terrain
|
|||||||
class ViewDataMap;
|
class ViewDataMap;
|
||||||
|
|
||||||
/// @brief Terrain implementation that loads cells into a Quad Tree, with geometry LOD and texture LOD. The entire world is displayed at all times.
|
/// @brief Terrain implementation that loads cells into a Quad Tree, with geometry LOD and texture LOD. The entire world is displayed at all times.
|
||||||
class QuadTreeWorld : public Terrain::World
|
class QuadTreeWorld : public TerrainGrid // note: derived from TerrainGrid is only to render default cells (see loadCell)
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QuadTreeWorld(osg::Group* parent, osg::Group* compileRoot, Resource::ResourceSystem* resourceSystem, Storage* storage, int nodeMask, int preCompileMask, int borderMask, int compMapResolution, float comMapLevel, float lodFactor, int vertexLodMod, float maxCompGeometrySize);
|
QuadTreeWorld(osg::Group* parent, osg::Group* compileRoot, Resource::ResourceSystem* resourceSystem, Storage* storage, int nodeMask, int preCompileMask, int borderMask, int compMapResolution, float comMapLevel, float lodFactor, int vertexLodMod, float maxCompGeometrySize);
|
||||||
@ -28,6 +29,10 @@ namespace Terrain
|
|||||||
virtual void enable(bool enabled);
|
virtual void enable(bool enabled);
|
||||||
|
|
||||||
void cacheCell(View *view, int x, int y);
|
void cacheCell(View *view, int x, int y);
|
||||||
|
/// @note Not thread safe.
|
||||||
|
virtual void loadCell(int x, int y);
|
||||||
|
/// @note Not thread safe.
|
||||||
|
virtual void unloadCell(int x, int y);
|
||||||
|
|
||||||
View* createView();
|
View* createView();
|
||||||
void preload(View* view, const osg::Vec3f& eyePoint);
|
void preload(View* view, const osg::Vec3f& eyePoint);
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include <osg/Group>
|
#include <osg/Group>
|
||||||
|
|
||||||
#include "chunkmanager.hpp"
|
#include "chunkmanager.hpp"
|
||||||
|
#include "compositemaprenderer.hpp"
|
||||||
|
|
||||||
namespace Terrain
|
namespace Terrain
|
||||||
{
|
{
|
||||||
@ -61,6 +62,10 @@ osg::ref_ptr<osg::Node> TerrainGrid::buildTerrain (osg::Group* parent, float chu
|
|||||||
if (parent)
|
if (parent)
|
||||||
parent->addChild(node);
|
parent->addChild(node);
|
||||||
|
|
||||||
|
osg::UserDataContainer* udc = node->getUserDataContainer();
|
||||||
|
if (udc && udc->getUserData())
|
||||||
|
mCompositeMapRenderer->setImmediate(static_cast<CompositeMap*>(udc->getUserData()));
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user