Page 1 of 1
[Solved] 1.10 to 1.11 Paged Geometry upgrade
Posted: Sun Feb 03, 2019 4:02 am
by saintnick
Ogre Version: 1.11
Trying to upgrade the following code from 1.10 to 1.11. Ran into three problems.
1. Ogre manual calls for SharedPtr::operator unspecified_bool_type() instead.
Code: Select all
Ogre::MeshPtr &mesh;
if (mesh.isNull())
{
// do stuff
}
//is the following correct?
if (!mesh)
{
// do stuff
}
2. Ogre manual calls for Ogre::static_pointer_cast instead. Not sure how to replace staticCast with static_pointer_cast.
Code: Select all
m_ptrMaterial = Ogre::MaterialManager::getSingleton().getByName(mat, rg).staticCast<Ogre::Material>();
3. Ogre manual calls for getSubMeshes() instead. I changed SubMeshIterator to SubMeshList and use getSubMeshes. Not sure how replicate the behavior of iterator in the while statement. Is Make_Iterator correct?
Code: Select all
Mesh::SubMeshIterator subMeshIterator = mesh->getSubMeshIterator();
while (subMeshIterator.hasMoreElements()) {
SubMesh *subMesh = subMeshIterator.getNext();
edit:
Building Paged Geometry I got these issues:
https://github.com/OGRECave/ogre-caelum/issues/1. paroj posted: "you must use the install location/ install ogre first". How do I do this on windows?
Re: 1.10 to 1.11 upgrade
Posted: Tue Feb 05, 2019 8:21 pm
by loath
1.
isNull() still works.
2.
Code: Select all
auto material = Ogre::static_pointer_cast<Ogre::Material>(resource); // resource is Ogre::ResourcePtr
3.
Code: Select all
auto submeshes = mesh->getSubMeshIterator ();
for (auto submesh = submeshes.begin (); submesh != submeshes.end (); ++submesh) { /* do work */ }
the code you posted looks fine though.
Re: 1.10 to 1.11 upgrade
Posted: Wed Feb 06, 2019 1:14 am
by paroj
3. @loath your suggestion still uses the deprecated getSubMeshIterator. A better replacement would be
Code: Select all
for(auto subMesh : mesh->getSubMeshes())
{
}
Re: 1.10 to 1.11 upgrade
Posted: Wed Feb 06, 2019 1:49 am
by loath
good to know. i will update, thanks!
Re: 1.10 to 1.11 upgrade
Posted: Wed Feb 06, 2019 2:10 pm
by saintnick
loath wrote: ↑Tue Feb 05, 2019 8:21 pm
1.
isNull() still works.
Error C4996 'Ogre::SharedPtr<Ogre::Texture>::isNull': was declared deprecated
Ogre version 1.11.4. Notes say use SharedPtr::operator unspecified_bool_type().
Re: 1.10 to 1.11 upgrade
Posted: Thu Feb 07, 2019 3:52 am
by rpgplayerrobin
Yeah, I always get errors when using isNull, the first example you wrote is the correct one to avoid isNull with resource pointers.
Re: 1.10 to 1.11 upgrade
Posted: Thu Feb 07, 2019 3:20 pm
by saintnick
Thank you all for your help. I have fixed these compile errors and now when I try to run the code base the following shows up in Ogre.log:
Code: Select all
19:05:45: Added resource location '' of type 'FileSystem' to resource group 'Impostors'
19:05:45: Ogre::FileNotFoundException::FileNotFoundException: Cannot locate resource Impostor.HKSHDSOJOKUYFPGCRGINXONWCOTCIZTF.128.dds in resource group Impostors. in ResourceGroupManager::openResource at ogre-source\OgreMain\src\OgreResourceGroupManager.cpp (line 699)
19:05:45: Texture: Impostor.HKSHDSOJOKUYFPGCRGINXONWCOTCIZTF.128.png: Loading 1 faces(PF_A8B8G8R8,1024x512x1) with 10 hardware generated mipmaps from Image. Internal format is PF_A8B8G8R8,1024x512x1.
This is Example1 from the Paged Geometry add on. I have got Trees to show up after upgrading Paged Geometry to Ogre 1.11. However you can't get close to the trees before they disappear. I have included a video link of the behavior below.
http://www.mediafire.com/file/vf53b6yh ... M.mp4/file
Re: 1.10 to 1.11 Paged Geometry upgrade
Posted: Thu Feb 07, 2019 8:05 pm
by loath
good to know saintnick... not sure why my isNull is compiling but i see now that it's deprecated and will fix it.
the main issue i had with upgrading to strict resourcing is not realizing all the places i was taking advantage of the automatic group resolution. for example, CreateEntity() is easy to misuse because the non-mesh-ptr versions make group assumptions and default to "General".
Re: 1.10 to 1.11 Paged Geometry upgrade
Posted: Thu Feb 07, 2019 9:24 pm
by rpgplayerrobin
@saintnick
The error you see in the log is probably because of this code in the Paged Geometry addon:
Code: Select all
String fileNamePNG = "Impostor." + String(key, sizeof(key)) + '.' + StringConverter::toString(textureSize) + ".png";
String fileNameDDS = "Impostor." + String(key, sizeof(key)) + '.' + StringConverter::toString(textureSize) + ".dds";
//Attempt to load the pre-render file if allowed
needsRegen = force;
if (!needsRegen){
try{
texture = TextureManager::getSingleton().load(fileNameDDS, "Impostors", TEX_TYPE_2D, MIP_UNLIMITED);
}
catch (...){
try{
texture = TextureManager::getSingleton().load(fileNamePNG, "Impostors", TEX_TYPE_2D, MIP_UNLIMITED);
}
catch (...){
needsRegen = true;
}
}
}
It seems to try to load the DDS texture first in the code as you may see. As I do not know how the system works I cannot help you solve it, but it should be possible to check if the resource exists or if the actual file exists before trying to load it.
Re: 1.10 to 1.11 Paged Geometry upgrade
Posted: Thu Feb 07, 2019 11:41 pm
by saintnick
Thanks for the responses. I have solved the graphical bug and the plugin is working. Is forking pagedgeometry at OGRECave the best way to share this with the 1.11 community?
Re: 1.10 to 1.11 Paged Geometry upgrade
Posted: Thu Feb 07, 2019 11:49 pm
by paroj
saintnick wrote: ↑Thu Feb 07, 2019 11:41 pm
Thanks for the responses. I have solved the graphical bug and the plugin is working. Is forking pagedgeometry at OGRECave the best way to share this with the 1.11 community?
yes, fork and create a pull request with your change
Re: 1.10 to 1.11 Paged Geometry upgrade
Posted: Fri Feb 08, 2019 12:37 am
by saintnick
I have compiled my project using this 1.11 branch and can confirm it is working.
https://github.com/Belsnickle/ogre-page ... /tree/1.11
When the application exits the following code crashes.
Code: Select all
void BatchedGeometry::clear()
{
//Remove the batch from the scene
if (m_pSceneNode)
{
m_pSceneNode->removeAllChildren();
if (m_pSceneNode->getParent())
m_pSceneNode->getParentSceneNode()->removeAndDestroyChild(m_pSceneNode);
else
m_pSceneMgr->destroySceneNode(m_pSceneNode);
m_pSceneNode = 0;
}
m_pSceneNode = 0; is the code that crashes on exit. Line 376 in BatchedGeometry.cpp. Can I just delete the line as the scene node was already destroyed?
Re: 1.10 to 1.11 Paged Geometry upgrade
Posted: Fri Feb 08, 2019 12:54 am
by paroj
no, you should rather fix the code that accesses the nullptr without checking.
Also the pull-request should target the upstream repository, not your own. Use this link:
https://github.com/OGRECave/ogre-pagedg ... ickle:1.11
Re: 1.10 to 1.11 Paged Geometry upgrade
Posted: Fri Feb 08, 2019 12:59 am
by rpgplayerrobin
Nulling the pointer should not make it crash, are you sure it doesn't crash on the line before?
Anyway, I do null my own scene nodes when I am done destroying them, so it seems something else is going on with your crash.
I would never recommend using "removeAndDestroyChild", because that in turn also removes and destroys all of that nodes children.
If you then try to remove another scene node that was a child of that one, it will crash, and I think that is what has happened here.
Here is how I destroy scene nodes in my game, which has never had any issues:
Code: Select all
void Destroy(SceneNode* resource)
{
// Destroy the node
if (resource->getParent() != NULL)
((SceneNode*)resource->getParent())->removeChild(resource);
app->m_SceneManager->destroySceneNode(resource);
resource = NULL;
}
Re: 1.10 to 1.11 Paged Geometry upgrade
Posted: Fri Feb 08, 2019 2:01 am
by paroj
you are only nulling the pointer inside your destroy method which is pretty useless.
Also the whole method only does what destroySceneNode alone would do.
Re: 1.10 to 1.11 Paged Geometry upgrade
Posted: Fri Feb 08, 2019 2:21 am
by rpgplayerrobin
I was merely making a suggestion to change the way he would destroy the scene node, as something there seems to be off (since there was a crash).
But yeah, I will change my own function now. The nulling was probably a leftover from a "**" input I had a long time ago, but I did not know it removed the node from its parent.
You know how it is, having a code laying around for years without noticing it until now ("If it ain't broke, don't fix it").