Converting ResourcePtr to MaterialPtr

Problems building or running the engine, queries about how to use features etc.
Post Reply
shellcoder
Gnoblar
Posts: 12
Joined: Thu May 28, 2015 7:02 am

Converting ResourcePtr to MaterialPtr

Post by shellcoder »

Hello, I had been using Ogre 1.8 but after upgrading our project to 1.9 this code no longer seems to work:

Code: Select all

		Ogre::ResourcePtr ptrResource = MaterialManager::getSingleton().getByName(m_pRefTextBGParamDef->strMaterialName);
		if(ptrResource.isNull())
			ptrResource = MaterialManager::getSingleton().getByName(CThemeManager::Get().GetTextBGMaterialName());
		if(!ptrResource.isNull())
		{
			MaterialPtr ptrMaterial = (MaterialPtr)ptrResource; // This one
VS 2012 generates this type cast error: Error 1 error C2440: 'initializing' : cannot convert from 'Ogre::Resource *' to 'Ogre::Material *'

And I searched the documentation but couldn't find any relevant method to do so. Is there any method that I could use? Thanks
scrawl
OGRE Expert User
OGRE Expert User
Posts: 1119
Joined: Sat Jan 01, 2011 7:57 pm
x 216

Re: Converting ResourcePtr to MaterialPtr

Post by scrawl »

Code: Select all

      MaterialPtr ptrMaterial = MaterialManager::getSingleton().getByName(m_pRefTextBGParamDef->strMaterialName);
      if(ptrMaterial.isNull())
         ptrMaterial = MaterialManager::getSingleton().getByName(CThemeManager::Get().GetTextBGMaterialName());
MaterialManager::getByName does return a MaterialPtr, so no casting is necessary.

If you had a ResourcePtr, you would cast it like this:

Code: Select all

ResourcePtr resourcePtr = ...;
MaterialPtr materialPtr = resourcePtr.staticCast<Material>();
shellcoder
Gnoblar
Posts: 12
Joined: Thu May 28, 2015 7:02 am

Re: Converting ResourcePtr to MaterialPtr

Post by shellcoder »

scrawl wrote:

Code: Select all

      MaterialPtr ptrMaterial = MaterialManager::getSingleton().getByName(m_pRefTextBGParamDef->strMaterialName);
      if(ptrMaterial.isNull())
         ptrMaterial = MaterialManager::getSingleton().getByName(CThemeManager::Get().GetTextBGMaterialName());
MaterialManager::getByName does return a MaterialPtr, so no casting is necessary.

If you had a ResourcePtr, you would cast it like this:

Code: Select all

ResourcePtr resourcePtr = ...;
MaterialPtr materialPtr = resourcePtr.staticCast<Material>();
Thanks but after reverting back to 1.8 it seems to work again
Post Reply