OGRE  1.12.4
Object-Oriented Graphics Rendering Engine
Ogre::TerrainPagedWorldSection Class Reference

A world section which includes paged terrain. More...

#include <OgreTerrainPagedWorldSection.h>

+ Inheritance diagram for Ogre::TerrainPagedWorldSection:

Classes

class  TerrainDefiner
 

Public Types

typedef std::map< PageID, Page * > PageMap
 

Public Member Functions

 TerrainPagedWorldSection (const String &name, PagedWorld *parent, SceneManager *sm)
 Constructor. More...
 
virtual ~TerrainPagedWorldSection ()
 
virtual bool _loadProceduralPage (Page *page)
 Give a section the opportunity to prepare page content procedurally. More...
 
virtual bool _prepareProceduralPage (Page *page)
 Give a section the opportunity to prepare page content procedurally. More...
 
virtual StreamSerialiser_readPageStream (PageID pageID)
 Get a serialiser set up to read Page data for the given PageID. More...
 
virtual bool _unloadProceduralPage (Page *page)
 Give a section the opportunity to unload page content procedurally. More...
 
virtual bool _unprepareProceduralPage (Page *page)
 Give a section the opportunity to unprepare page content procedurally. More...
 
virtual StreamSerialiser_writePageStream (PageID pageID)
 Get a serialiser set up to write Page data for the given PageID. More...
 
virtual bool canHandleRequest (const Request *req, const WorkQueue *srcQ)
 Return whether this handler can process a given request. More...
 
virtual bool canHandleResponse (const Response *res, const WorkQueue *srcQ)
 Return whether this handler can process a given response. More...
 
virtual void frameEnd (Real timeElapsed)
 Called when the frame ends. More...
 
virtual void frameStart (Real timeSinceLastFrame)
 Called when the frame starts. More...
 
virtual const AxisAlignedBoxgetBoundingBox () const
 Get the bounds of this section. More...
 
virtual Grid2DPageStrategygetGridStrategy () const
 Convenience method - this section always uses a grid strategy. More...
 
virtual Grid2DPageStrategyDatagetGridStrategyData () const
 Convenience method - this section always uses a grid strategy. More...
 
virtual Real getHoldRadius ()
 Get the Holding radius. More...
 
virtual uint32 getLoadingIntervalMs () const
 Get the interval between the loading of single pages in milliseconds (ms) More...
 
virtual Real getLoadRadius () const
 Get the loading radius. More...
 
PageManagergetManager () const
 
virtual const StringgetName () const
 Get the name of this section. More...
 
virtual PagegetPage (PageID pageID)
 Retrieves a Page. More...
 
virtual PageID getPageID (const Vector3 &worldPos)
 Get the page ID for a given world position. More...
 
virtual PageProvidergetPageProvider () const
 Get the PageProvider which can provide streams for Pages in this section. More...
 
virtual int32 getPageRangeMaxX () const
 get the index range of all Pages (values outside this will be ignored) More...
 
virtual int32 getPageRangeMaxY () const
 get the index range of all Pages (values outside this will be ignored) More...
 
virtual int32 getPageRangeMinX () const
 get the index range of all Pages (values outside this will be ignored) More...
 
virtual int32 getPageRangeMinY () const
 get the index range of all Pages (values outside this will be ignored) More...
 
virtual SceneManagergetSceneManager () const
 Get the current SceneManager. More...
 
virtual PageStrategygetStrategy () const
 Get the page strategy which this section is using. More...
 
virtual PageStrategyDatagetStrategyData () const
 Get the data required by the PageStrategy which is specific to this world section. More...
 
virtual TerrainGroupgetTerrainGroup ()
 Get the TerrainGroup which this world section is using. More...
 
virtual const StringgetType ()
 Get the type name of this section. More...
 
virtual PagedWorldgetWorld () const
 Get the parent world. More...
 
WorkQueue::ResponsehandleRequest (const WorkQueue::Request *req, const WorkQueue *srcQ)
 WorkQueue::RequestHandler override. More...
 
void handleResponse (const WorkQueue::Response *res, const WorkQueue *srcQ)
 WorkQueue::ResponseHandler override. More...
 
virtual void holdPage (PageID pageID)
 Ask for a page to be kept in memory if it's loaded. More...
 
virtual void init (TerrainGroup *grp)
 Initialise this section from an existing TerrainGroup instance. More...
 
virtual bool load (StreamSerialiser &stream)
 Load this section from a stream (returns true if successful) More...
 
virtual PageloadOrCreatePage (const Vector3 &worldPos)
 Load or create a page against this section covering the given world space position. More...
 
void loadPage (PageID pageID, bool forceSynchronous=false)
 Overridden from PagedWorldSection. More...
 
virtual void notifyCamera (Camera *cam)
 Notify a section of the current camera. More...
 
virtual void removeAllPages ()
 Remove all pages immediately. More...
 
virtual void save (StreamSerialiser &stream)
 Save this section to a stream. More...
 
virtual void setBoundingBox (const AxisAlignedBox &box)
 Set the bounds of this section. More...
 
void setDefiner (TerrainDefiner *terrainDefiner)
 
virtual void setHoldRadius (Real sz)
 Set the Holding radius. More...
 
virtual void setLoadingIntervalMs (uint32 loadingIntervalMs)
 Set the interval between the loading of single pages in milliseconds (ms) More...
 
virtual void setLoadRadius (Real sz)
 Set the loading radius. More...
 
virtual void setPageProvider (PageProvider *provider)
 Set the PageProvider which can provide streams Pages in this section. More...
 
virtual void setPageRange (int32 minX, int32 minY, int32 maxX, int32 maxY)
 Set the index range of all Pages (values outside this will be ignored) More...
 
virtual void setPageRangeMaxX (int32 maxX)
 Set the index range of all Pages (values outside this will be ignored) More...
 
virtual void setPageRangeMaxY (int32 maxY)
 Set the index range of all Pages (values outside this will be ignored) More...
 
virtual void setPageRangeMinX (int32 minX)
 Set the index range of all Pages (values outside this will be ignored) More...
 
virtual void setPageRangeMinY (int32 minY)
 Set the index range of all Pages (values outside this will be ignored) More...
 
virtual void setSceneManager (SceneManager *sm)
 Change the SceneManager. More...
 
virtual void setSceneManager (const String &smName)
 Change the SceneManager. More...
 
virtual void setStrategy (PageStrategy *strat)
 Change the page strategy. More...
 
virtual void setStrategy (const String &stratName)
 Change the page strategy. More...
 
void unloadPage (PageID pageID, bool forceSynchronous=false)
 Overridden from PagedWorldSection. More...
 
virtual void unloadPage (Page *p, bool forceSynchronous=false)
 Ask for a page to be unloaded with the given (section-relative) PageID. More...
 

Static Public Attributes

static const uint32 CHUNK_ID
 
static const uint16 CHUNK_VERSION
 
static const uint16 WORKQUEUE_LOAD_TERRAIN_PAGE_REQUEST
 

Detailed Description

A world section which includes paged terrain.

Remarks
Rather than implement terrain paging as a PageContent subclass, because terrain benefits from direct knowledge of neighbour arrangements and the tight coupling between that and the paging strategy, instead we use a PagedWorldSection subclass. This automatically provides a PageStrategy subclass of the correct type (Grid2DPageStrategy) and derives the correct settings for it compared to the terrain being used. This frees the user from having to try to match all these up through the generic interfaces.
When creating this in code, the user should make use of the helper functions on the TerrainPaging class. The basic sequence is that you define your terrain settings in a TerrainGroup, and then create an instance of TerrainPagedWorldSection via TerrainPaging::createWorldSection. That's basically all there is to it - the normal rules of TerrainGroup apply, it's just that instead of having to choose when to try to load / unload pages from the TerrainGroup, that is automatically done by the paging system. You can also create other types of content in this PagedWorldSection other than terrain, it's just that this comes with terrain handling built-in.
When this world data is saved, you basically get 3 sets of data - firstly the top-level 'world data' which is where the definition of the world sections are stored (and hence, the definition of this class, although none of the terrain instance content is included). Secondly, you get a number of .page files which include any other content that you might have inserted into the pages. Lastly, you get the standard terrain data files which are saved as per TerrainGroup.

Member Typedef Documentation

◆ PageMap

typedef std::map<PageID, Page*> Ogre::PagedWorldSection::PageMap
inherited

Constructor & Destructor Documentation

◆ TerrainPagedWorldSection()

Ogre::TerrainPagedWorldSection::TerrainPagedWorldSection ( const String name,
PagedWorld parent,
SceneManager sm 
)

Constructor.

Parameters
nameThe name of the section
parentThe parent world
smThe SceneManager to use (can be left as null if to be loaded)

◆ ~TerrainPagedWorldSection()

virtual Ogre::TerrainPagedWorldSection::~TerrainPagedWorldSection ( )
virtual

Member Function Documentation

◆ init()

virtual void Ogre::TerrainPagedWorldSection::init ( TerrainGroup grp)
virtual

Initialise this section from an existing TerrainGroup instance.

Remarks
This is the route you will take if you're defining this world section from scratch in code. The other alternative is that you'll be loading this section from a file, in which case all the settings will be derived from that.
Parameters
grpThe TerrainGroup which will form the basis of this world section. The instance will be owned by this class from now on and will be destroyed by it.

◆ getTerrainGroup()

virtual TerrainGroup* Ogre::TerrainPagedWorldSection::getTerrainGroup ( )
inlinevirtual

Get the TerrainGroup which this world section is using.

Remarks
For information, you can use the returned TerrainGroup to convert to/from x/y locations and the pageID, since the grid strategy is the same.

◆ setLoadRadius()

virtual void Ogre::TerrainPagedWorldSection::setLoadRadius ( Real  sz)
virtual

Set the loading radius.

◆ getLoadRadius()

virtual Real Ogre::TerrainPagedWorldSection::getLoadRadius ( ) const
virtual

Get the loading radius.

◆ setHoldRadius()

virtual void Ogre::TerrainPagedWorldSection::setHoldRadius ( Real  sz)
virtual

Set the Holding radius.

◆ getHoldRadius()

virtual Real Ogre::TerrainPagedWorldSection::getHoldRadius ( )
virtual

Get the Holding radius.

◆ setPageRange()

virtual void Ogre::TerrainPagedWorldSection::setPageRange ( int32  minX,
int32  minY,
int32  maxX,
int32  maxY 
)
virtual

Set the index range of all Pages (values outside this will be ignored)

◆ setPageRangeMinX()

virtual void Ogre::TerrainPagedWorldSection::setPageRangeMinX ( int32  minX)
virtual

Set the index range of all Pages (values outside this will be ignored)

◆ setPageRangeMinY()

virtual void Ogre::TerrainPagedWorldSection::setPageRangeMinY ( int32  minY)
virtual

Set the index range of all Pages (values outside this will be ignored)

◆ setPageRangeMaxX()

virtual void Ogre::TerrainPagedWorldSection::setPageRangeMaxX ( int32  maxX)
virtual

Set the index range of all Pages (values outside this will be ignored)

◆ setPageRangeMaxY()

virtual void Ogre::TerrainPagedWorldSection::setPageRangeMaxY ( int32  maxY)
virtual

Set the index range of all Pages (values outside this will be ignored)

◆ getPageRangeMinX()

virtual int32 Ogre::TerrainPagedWorldSection::getPageRangeMinX ( ) const
virtual

get the index range of all Pages (values outside this will be ignored)

◆ getPageRangeMinY()

virtual int32 Ogre::TerrainPagedWorldSection::getPageRangeMinY ( ) const
virtual

get the index range of all Pages (values outside this will be ignored)

◆ getPageRangeMaxX()

virtual int32 Ogre::TerrainPagedWorldSection::getPageRangeMaxX ( ) const
virtual

get the index range of all Pages (values outside this will be ignored)

◆ getPageRangeMaxY()

virtual int32 Ogre::TerrainPagedWorldSection::getPageRangeMaxY ( ) const
virtual

get the index range of all Pages (values outside this will be ignored)

◆ getGridStrategy()

virtual Grid2DPageStrategy* Ogre::TerrainPagedWorldSection::getGridStrategy ( ) const
virtual

Convenience method - this section always uses a grid strategy.

◆ getGridStrategyData()

virtual Grid2DPageStrategyData* Ogre::TerrainPagedWorldSection::getGridStrategyData ( ) const
virtual

Convenience method - this section always uses a grid strategy.

◆ setLoadingIntervalMs()

virtual void Ogre::TerrainPagedWorldSection::setLoadingIntervalMs ( uint32  loadingIntervalMs)
virtual

Set the interval between the loading of single pages in milliseconds (ms)

◆ getLoadingIntervalMs()

virtual uint32 Ogre::TerrainPagedWorldSection::getLoadingIntervalMs ( ) const
virtual

Get the interval between the loading of single pages in milliseconds (ms)

◆ loadPage()

void Ogre::TerrainPagedWorldSection::loadPage ( PageID  pageID,
bool  forceSynchronous = false 
)
virtual

Overridden from PagedWorldSection.

Reimplemented from Ogre::PagedWorldSection.

◆ unloadPage() [1/2]

void Ogre::TerrainPagedWorldSection::unloadPage ( PageID  pageID,
bool  forceSynchronous = false 
)
virtual

Overridden from PagedWorldSection.

Reimplemented from Ogre::PagedWorldSection.

◆ handleRequest()

WorkQueue::Response* Ogre::TerrainPagedWorldSection::handleRequest ( const WorkQueue::Request req,
const WorkQueue srcQ 
)
virtual

◆ handleResponse()

void Ogre::TerrainPagedWorldSection::handleResponse ( const WorkQueue::Response res,
const WorkQueue srcQ 
)
virtual

◆ setDefiner()

void Ogre::TerrainPagedWorldSection::setDefiner ( TerrainDefiner terrainDefiner)
inline

References OGRE_DELETE.

◆ getManager()

PageManager* Ogre::PagedWorldSection::getManager ( ) const
inherited

◆ getName()

virtual const String& Ogre::PagedWorldSection::getName ( void  ) const
inlinevirtualinherited

Get the name of this section.

◆ getStrategy()

virtual PageStrategy* Ogre::PagedWorldSection::getStrategy ( ) const
inlinevirtualinherited

Get the page strategy which this section is using.

◆ setStrategy() [1/2]

virtual void Ogre::PagedWorldSection::setStrategy ( PageStrategy strat)
virtualinherited

Change the page strategy.

Remarks
Doing this will invalidate any pages attached to this world section, and require the PageStrategyData to be repopulated.

◆ setStrategy() [2/2]

virtual void Ogre::PagedWorldSection::setStrategy ( const String stratName)
virtualinherited

Change the page strategy.

Remarks
Doing this will invalidate any pages attached to this world section, and require the PageStrategyData to be repopulated.

◆ setSceneManager() [1/2]

virtual void Ogre::PagedWorldSection::setSceneManager ( SceneManager sm)
virtualinherited

Change the SceneManager.

Remarks
Doing this will invalidate any pages attached to this world section, and require the pages to be reloaded.

◆ setSceneManager() [2/2]

virtual void Ogre::PagedWorldSection::setSceneManager ( const String smName)
virtualinherited

Change the SceneManager.

Remarks
Doing this will invalidate any pages attached to this world section, and require the pages to be reloaded.
Parameters
smNameThe instance name of the SceneManager

◆ getSceneManager()

virtual SceneManager* Ogre::PagedWorldSection::getSceneManager ( ) const
inlinevirtualinherited

Get the current SceneManager.

◆ getWorld()

virtual PagedWorld* Ogre::PagedWorldSection::getWorld ( ) const
inlinevirtualinherited

Get the parent world.

◆ getStrategyData()

virtual PageStrategyData* Ogre::PagedWorldSection::getStrategyData ( ) const
inlinevirtualinherited

Get the data required by the PageStrategy which is specific to this world section.

◆ setBoundingBox()

virtual void Ogre::PagedWorldSection::setBoundingBox ( const AxisAlignedBox box)
virtualinherited

Set the bounds of this section.

◆ getBoundingBox()

virtual const AxisAlignedBox& Ogre::PagedWorldSection::getBoundingBox ( ) const
virtualinherited

Get the bounds of this section.

◆ load()

virtual bool Ogre::PagedWorldSection::load ( StreamSerialiser stream)
virtualinherited

Load this section from a stream (returns true if successful)

◆ save()

virtual void Ogre::PagedWorldSection::save ( StreamSerialiser stream)
virtualinherited

Save this section to a stream.

◆ frameStart()

virtual void Ogre::PagedWorldSection::frameStart ( Real  timeSinceLastFrame)
virtualinherited

Called when the frame starts.

◆ frameEnd()

virtual void Ogre::PagedWorldSection::frameEnd ( Real  timeElapsed)
virtualinherited

Called when the frame ends.

◆ notifyCamera()

virtual void Ogre::PagedWorldSection::notifyCamera ( Camera cam)
virtualinherited

Notify a section of the current camera.

◆ loadOrCreatePage()

virtual Page* Ogre::PagedWorldSection::loadOrCreatePage ( const Vector3 worldPos)
virtualinherited

Load or create a page against this section covering the given world space position.

Remarks
This method is designed mainly for editors - it will try to load an existing page if there is one, otherwise it will create a new one synchronously.

◆ getPageID()

virtual PageID Ogre::PagedWorldSection::getPageID ( const Vector3 worldPos)
virtualinherited

Get the page ID for a given world position.

◆ unloadPage() [2/2]

virtual void Ogre::PagedWorldSection::unloadPage ( Page p,
bool  forceSynchronous = false 
)
virtualinherited

Ask for a page to be unloaded with the given (section-relative) PageID.

Remarks
You would not normally call this manually, the PageStrategy is in charge of it usually.
Parameters
pThe Page to unload
forceSynchronousIf true, the page will always be unloaded synchronously

◆ _prepareProceduralPage()

virtual bool Ogre::PagedWorldSection::_prepareProceduralPage ( Page page)
virtualinherited

Give a section the opportunity to prepare page content procedurally.

Remarks
You should not call this method directly. This call may well happen in a separate thread so it should not access GPU resources, use _loadProceduralPage for that
Returns
true if the page was populated, false otherwise

◆ _loadProceduralPage()

virtual bool Ogre::PagedWorldSection::_loadProceduralPage ( Page page)
virtualinherited

Give a section the opportunity to prepare page content procedurally.

Remarks
You should not call this method directly. This call will happen in the main render thread so it can access GPU resources. Use _prepareProceduralPage for background preparation.
Returns
true if the page was populated, false otherwise

◆ _unloadProceduralPage()

virtual bool Ogre::PagedWorldSection::_unloadProceduralPage ( Page page)
virtualinherited

Give a section the opportunity to unload page content procedurally.

Remarks
You should not call this method directly. This call will happen in the main render thread so it can access GPU resources. Use _unprepareProceduralPage for background preparation.
Returns
true if the page was populated, false otherwise

◆ _unprepareProceduralPage()

virtual bool Ogre::PagedWorldSection::_unprepareProceduralPage ( Page page)
virtualinherited

Give a section the opportunity to unprepare page content procedurally.

Remarks
You should not call this method directly. This call may well happen in a separate thread so it should not access GPU resources, use _unloadProceduralPage for that
Returns
true if the page was unpopulated, false otherwise

◆ holdPage()

virtual void Ogre::PagedWorldSection::holdPage ( PageID  pageID)
virtualinherited

Ask for a page to be kept in memory if it's loaded.

Remarks
This method indicates that a page should be retained if it's already in memory, but if it's not then it won't trigger a load. This is useful for retaining pages that have just gone out of range, but which you don't want to unload just yet because it's quite possible they may come back into the active set again very quickly / easily. But at the same time, if they've already been purged you don't want to force them to load. This is the 'maybe' region of pages.
Any Page that is neither requested nor held in a frame will be deemed a candidate for unloading.

◆ getPage()

virtual Page* Ogre::PagedWorldSection::getPage ( PageID  pageID)
virtualinherited

Retrieves a Page.

Remarks
This method will only return Page instances that are already loaded. It will return null if a page is not loaded.

◆ removeAllPages()

virtual void Ogre::PagedWorldSection::removeAllPages ( )
virtualinherited

Remove all pages immediately.

Remarks
Effectively 'resets' this section by deleting all pages.

◆ setPageProvider()

virtual void Ogre::PagedWorldSection::setPageProvider ( PageProvider provider)
inlinevirtualinherited

Set the PageProvider which can provide streams Pages in this section.

Remarks
This is the top-level way that you can direct how Page data is loaded. When data for a Page is requested for a PagedWorldSection, the following sequence of classes will be checked to see if they have a provider willing to supply the stream: PagedWorldSection, PagedWorld, PageManager. If none of these do, then the default behaviour is to look for a file called worldname_sectionname_pageID.page.
Note
The caller remains responsible for the destruction of the provider.

◆ getPageProvider()

virtual PageProvider* Ogre::PagedWorldSection::getPageProvider ( ) const
inlinevirtualinherited

Get the PageProvider which can provide streams for Pages in this section.

References _OgrePagingExport, and Ogre::operator<<().

◆ _readPageStream()

virtual StreamSerialiser* Ogre::PagedWorldSection::_readPageStream ( PageID  pageID)
virtualinherited

Get a serialiser set up to read Page data for the given PageID.

Parameters
pageIDThe ID of the page being requested
Remarks
The StreamSerialiser returned is the responsibility of the caller to delete.

◆ _writePageStream()

virtual StreamSerialiser* Ogre::PagedWorldSection::_writePageStream ( PageID  pageID)
virtualinherited

Get a serialiser set up to write Page data for the given PageID.

Parameters
pageIDThe ID of the page being requested
Remarks
The StreamSerialiser returned is the responsibility of the caller to delete.

◆ getType()

virtual const String& Ogre::PagedWorldSection::getType ( )
virtualinherited

Get the type name of this section.

◆ canHandleRequest()

virtual bool Ogre::WorkQueue::RequestHandler::canHandleRequest ( const Request req,
const WorkQueue srcQ 
)
inlinevirtualinherited

Return whether this handler can process a given request.

Remarks
Defaults to true, but if you wish to add several handlers each of which deal with different types of request, you can override this method.

Reimplemented in Ogre::Terrain, Ogre::TerrainGroup, Ogre::ResourceBackgroundQueue, Ogre::Page, and Ogre::TerrainLodManager.

References Ogre::WorkQueue::Request::getAborted(), and OGRE_NODISCARD.

Referenced by Ogre::DefaultWorkQueueBase::setResponseProcessingTimeLimit().

◆ canHandleResponse()

virtual bool Ogre::WorkQueue::ResponseHandler::canHandleResponse ( const Response res,
const WorkQueue srcQ 
)
inlinevirtualinherited

Return whether this handler can process a given response.

Remarks
Defaults to true, but if you wish to add several handlers each of which deal with different types of response, you can override this method.

Reimplemented in Ogre::Terrain, Ogre::TerrainGroup, Ogre::ResourceBackgroundQueue, Ogre::Page, and Ogre::TerrainLodManager.

References Ogre::WorkQueue::Request::getAborted(), and Ogre::WorkQueue::Response::getRequest().

Member Data Documentation

◆ WORKQUEUE_LOAD_TERRAIN_PAGE_REQUEST

const uint16 Ogre::TerrainPagedWorldSection::WORKQUEUE_LOAD_TERRAIN_PAGE_REQUEST
static

◆ CHUNK_ID

const uint32 Ogre::PagedWorldSection::CHUNK_ID
staticinherited

◆ CHUNK_VERSION

const uint16 Ogre::PagedWorldSection::CHUNK_VERSION
staticinherited

The documentation for this class was generated from the following file: