void BatchPage::init(PagedGeometry *_geom, const Any &data) { geom = _geom; int datacast = data.isEmpty() ? 0 : Ogre::any_cast<int>(data); #ifdef _DEBUG if ( datacast < 0) OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS,"Data of BatchPage must be a positive integer. It representing the LOD level this detail level stores.","BatchPage::BatchPage"); #endif mLODLevel = datacast; sceneMgr = geom->getSceneManager(); batch = new BatchedGeometry(sceneMgr, geom->getSceneNode()); fadeEnabled = false; if(!geom->getShadersEnabled()) { // shaders disabled by config shadersSupported = false; } else { // determine if shaders available const RenderSystemCapabilities *caps = Root::getSingleton().getRenderSystem()->getCapabilities(); if (caps->hasCapability(RSC_VERTEX_PROGRAM)) shadersSupported = true; else shadersSupported = false; } ++refCount; }
//----------------------------------------------------------------------------- /// void BatchPage::init(PagedGeometry *geom_, const Any &data) { assert(geom_ && "Can any code set null pointer?"); int datacast = !data.isEmpty() ? Ogre::any_cast<int>(data) : 0; #ifdef _DEBUG if (datacast < 0) OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS,"Data of BatchPage must be a positive integer. It representing the LOD level this detail level stores.","BatchPage::BatchPage"); #endif m_pPagedGeom = geom_; m_pSceneMgr = m_pPagedGeom->getSceneManager(); m_pBatchGeom = new BatchedGeometry(m_pSceneMgr, m_pPagedGeom->getSceneNode()); m_nLODLevel = datacast; m_bFadeEnabled = false; if (!m_pPagedGeom->getShadersEnabled()) m_bShadersSupported = false; // shaders disabled by config else { // determine if shaders available const RenderSystemCapabilities *caps = Root::getSingleton().getRenderSystem()->getCapabilities(); // For example, GeForce4MX has vertex shadres 1.1 and no pixel shaders m_bShadersSupported = caps->hasCapability(RSC_VERTEX_PROGRAM) ? true : false; } ++s_nRefCount; }
//------------------------------------------------------------------------ MtlPtr MaterialUtil::getMtl(const MaterialPtr& _material, MatGenParams& _rMatGenParams) { if(!_material->getNumTechniques()) return MtlPtr(); Technique* technique = _material->getTechnique(0); UserObjectBindings& uob = technique->getUserObjectBindings(); Any mtlAny = uob.getUserAny( USER_MTL ); Any matGenParamsAny = uob.getUserAny( USER_MAT_GEN_PARAMS ); if(mtlAny.isEmpty() || matGenParamsAny.isEmpty()) return MtlPtr(); MtlPtr mtl = *any_cast<MtlPtr>(&mtlAny); _rMatGenParams = *any_cast<MatGenParams>(&matGenParamsAny); return mtl; }
//------------------------------------------------------------------------ MatGenParams MaterialUtil::getMatGenParams(const MaterialPtr& _material) { if(!_material->getNumTechniques()) return MatGenParams(); Technique* technique = _material->getTechnique(0); UserObjectBindings& uob = technique->getUserObjectBindings(); Any matGenParamsAny = uob.getUserAny( USER_MAT_GEN_PARAMS ); if(matGenParamsAny.isEmpty()) return MatGenParams(); return *any_cast<MatGenParams>(&matGenParamsAny); }
//------------------------------------------------------------------------ MtlPtr MaterialUtil::getMtl(const MaterialPtr& _material) { if(!_material->getNumTechniques()) return MtlPtr(); Technique* technique = _material->getTechnique(0); UserObjectBindings& uob = technique->getUserObjectBindings(); Any mtlAny = uob.getUserAny( USER_MTL ); if(mtlAny.isEmpty()) return MtlPtr(); MtlPtr mtl = *any_cast<MtlPtr>(&mtlAny); return mtl; }
//----------------------------------------------------------------------------- /// void WindBatchPage::init(PagedGeometry *geom, const Any &data) { int datacast = !data.isEmpty() ? Ogre::any_cast<int>(data) : 0; #ifdef _DEBUG if (datacast < 0) { OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS, "Data of WindBatchPage must be a positive integer. It representing the LOD level this detail level stores.", "WindBatchPage::WindBatchPage"); } #endif m_pBatchGeom = new WindBatchedGeometry(geom->getSceneManager(), geom->getSceneNode(), geom); m_nLODLevel = datacast; m_pPagedGeom = geom; m_bFadeEnabled = false; const RenderSystemCapabilities *caps = Root::getSingleton().getRenderSystem()->getCapabilities(); m_bShadersSupported = caps->hasCapability(RSC_VERTEX_PROGRAM) ? true : false; // <-- DELETE THIS ++s_nRefCount; }
void WindBatchPage::init(PagedGeometry *geom, const Any &data) { int datacast = data.isEmpty() ? 0 : Ogre::any_cast<int>(data); #ifdef _DEBUG if ( datacast < 0) OGRE_EXCEPT(Exception::ERR_INVALIDPARAMS,"Data of WindBatchPage must be a positive integer. It representing the LOD level this detail level stores.","WindBatchPage::WindBatchPage"); #endif mLODLevel = datacast; mGeom = geom; sceneMgr = geom->getSceneManager(); batch = new WindBatchedGeometry(sceneMgr, geom->getSceneNode()); dynamic_cast<WindBatchedGeometry*>(batch)->setGeom(geom); fadeEnabled = false; const RenderSystemCapabilities *caps = Root::getSingleton().getRenderSystem()->getCapabilities(); if (caps->hasCapability(RSC_VERTEX_PROGRAM)) shadersSupported = true; else shadersSupported = false; ++refCount; }