⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ogrepaginglandscaperenderablemanager.cpp

📁 使用stl技术,(还没看,是听说的)
💻 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 + -