📄 ogrepaginglandscaperenderablemanager.cpp
字号:
/***************************************************************************
OgrePagingLandScapeRenderableManager.cpp - description
-------------------
begin : Mon Jun 16 2003
copyright : (C) 2003 by Jose A Milan
email : spoke2@supercable.es
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "OgrePagingLandScapeRenderableManager.h"
#include "OgrePagingLandScapeOptions.h"
#include "OgrePagingLandScapeTileManager.h"
namespace Ogre
{
//-----------------------------------------------------------------------
template<> PagingLandScapeRenderableManager* Singleton<PagingLandScapeRenderableManager>::ms_Singleton = 0;
//-----------------------------------------------------------------------
PagingLandScapeRenderableManager::PagingLandScapeRenderableManager( )
{
NumRenderables = PagingLandScapeOptions::getSingleton().num_renderables;
updateCache();
mIndexes = new PagingLandScapeIndexBuffer();
for ( int i = 0; i < NumRenderables; i++ )
{
PagingLandScapeRenderable* rend = new PagingLandScapeRenderable( );
mRenderables.push_back( rend );
mQueue.push( rend );
}
}
//-----------------------------------------------------------------------
PagingLandScapeRenderableManager::~PagingLandScapeRenderableManager( )
{
for ( int i = 0; i < NumRenderables; i++ )
{
delete mRenderables[ i ];
mRenderables[ i ] = 0;
}
// destroy de renderables
mRenderables.clear();
if ( mIndexes != 0 )
{
delete mIndexes;
mIndexes = 0;
}
}
//-----------------------------------------------------------------------
void PagingLandScapeRenderableManager::updateCache( void )
{
NumRenderablesMorphProcess = PagingLandScapeOptions::getSingleton().num_renderables_morph_process;
NumRenderablesDeMorphProcess = PagingLandScapeOptions::getSingleton().num_renderables_demorph_process;
}
//-----------------------------------------------------------------------
PagingLandScapeRenderable *PagingLandScapeRenderableManager::getRenderable( )
{
if ( mQueue.getSize() == 0 )
{
if ( PagingLandScapeTileManager::getSingleton().numMerge() > 0 )
{
PagingLandScapeTileManager::getSingleton().Merge();
}
}
return mQueue.pop( );
}
//-----------------------------------------------------------------------
void PagingLandScapeRenderableManager::freeRenderable( PagingLandScapeRenderable *rend )
{
mQueue.push( rend );
}
//-----------------------------------------------------------------------
PagingLandScapeRenderableManager& PagingLandScapeRenderableManager::getSingleton(void)
{
return Singleton<PagingLandScapeRenderableManager>::getSingleton();
}
//-----------------------------------------------------------------------
int PagingLandScapeRenderableManager::numFree( void ) const
{
return mQueue.getSize( );
}
//-----------------------------------------------------------------------
void PagingLandScapeRenderableManager::Morph( void )
{
int j = (int)mMorphQueue.getSize();
if ( j > NumRenderablesMorphProcess )
{
j = NumRenderablesMorphProcess;
}
for ( int i = 0; i < j ; i++ )
{
PagingLandScapeRenderable *rend = mMorphQueue.pop( );
if ( rend != 0 )
{
rend -> Morph( );
}
}
}
//-----------------------------------------------------------------------
void PagingLandScapeRenderableManager::needMorph( PagingLandScapeRenderable *rend )
{
mMorphQueue.push( rend );
}
//-----------------------------------------------------------------------
int PagingLandScapeRenderableManager::numMorph( void ) const
{
return mMorphQueue.getSize( );
}
//-----------------------------------------------------------------------
void PagingLandScapeRenderableManager::DeMorph( void )
{
int j = (int)mDeMorphQueue.getSize();
if ( j > NumRenderablesDeMorphProcess )
{
j = NumRenderablesDeMorphProcess;
}
for ( int i = 0; i < j ; i++ )
{
PagingLandScapeRenderable *rend = mDeMorphQueue.pop( );
if ( rend != 0 )
{
rend -> Morph( );
}
}
}
//-----------------------------------------------------------------------
void PagingLandScapeRenderableManager::needDeMorph( PagingLandScapeRenderable *rend )
{
mDeMorphQueue.push( rend );
}
//-----------------------------------------------------------------------
int PagingLandScapeRenderableManager::numDeMorph( void ) const
{
return mDeMorphQueue.getSize( );
}
} //namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -