I converted a mesh file to a xml file with memory track, whick detected memory leaks as below:
Code: Select all
Ogre Memory: Detected memory leaks !!!
Ogre Memory: (51) Allocation(s) with total 4272 bytes.
Ogre Memory: Dumping allocations ->
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreSubMesh.cpp(49) : {28 bytes} function: Ogre::SubMesh::SubMesh
(unknown source):(0) : {48 bytes} function:
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMeshSerializerImpl.cpp(1000) : {68 bytes} function: Ogre::MeshSerializerImpl::readSubMesh
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreSubMesh.cpp(49) : {28 bytes} function: Ogre::SubMesh::SubMesh
e:\ogre\sources\ogre_src_v1-8-1\ogremain\include\OgreSharedPtr.h(84) : {4 bytes} function: Ogre::SharedPtr<class Ogre::HardwareIndexBuffer>::SharedPtr
e:\ogre\sources\ogre_src_v1-8-1\ogremain\include\OgreSharedPtr.h(84) : {4 bytes} function: Ogre::SharedPtr<class Ogre::HardwareIndexBuffer>::SharedPtr
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(97) : {12 bytes} function: Ogre::DefaultHardwareIndexBuffer::DefaultHardwareIndexBuffer
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(166) : {56 bytes} function: Ogre::DefaultHardwareBufferManagerBase::createIndexBuffer
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMeshSerializerImpl.cpp(1000) : {68 bytes} function: Ogre::MeshSerializerImpl::readSubMesh
(unknown source):(0) : {48 bytes} function:
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMesh.cpp(143) : {184 bytes} function: Ogre::Mesh::createSubMesh
(unknown source):(0) : {80 bytes} function:
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(166) : {56 bytes} function: Ogre::DefaultHardwareBufferManagerBase::createIndexBuffer
(unknown source):(0) : {48 bytes} function:
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreTechnique.cpp(469) : {464 bytes} function: Ogre::Technique::operator =
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(97) : {12 bytes} function: Ogre::DefaultHardwareIndexBuffer::DefaultHardwareIndexBuffer
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(166) : {56 bytes} function: Ogre::DefaultHardwareBufferManagerBase::createIndexBuffer
(unknown source):(0) : {48 bytes} function:
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMesh.cpp(143) : {184 bytes} function: Ogre::Mesh::createSubMesh
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMeshSerializerImpl.cpp(1000) : {68 bytes} function: Ogre::MeshSerializerImpl::readSubMesh
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreTechnique.cpp(342) : {464 bytes} function: Ogre::Technique::createPass
(unknown source):(0) : {48 bytes} function:
e:\ogre\sources\ogre_src_v1-8-1\ogremain\include\OgreSharedPtr.h(84) : {4 bytes} function: Ogre::SharedPtr<class Ogre::HardwareIndexBuffer>::SharedPtr
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreSubMesh.cpp(49) : {28 bytes} function: Ogre::SubMesh::SubMesh
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMeshSerializerImpl.cpp(1000) : {68 bytes} function: Ogre::MeshSerializerImpl::readSubMesh
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMesh.cpp(143) : {184 bytes} function: Ogre::Mesh::createSubMesh
(unknown source):(0) : {48 bytes} function:
e:\ogre\sources\ogre_src_v1-8-1\ogremain\include\OgreSharedPtr.h(84) : {4 bytes} function: Ogre::SharedPtr<class Ogre::HardwareIndexBuffer>::SharedPtr
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreSubMesh.cpp(49) : {28 bytes} function: Ogre::SubMesh::SubMesh
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreSubMesh.cpp(49) : {28 bytes} function: Ogre::SubMesh::SubMesh
(unknown source):(0) : {80 bytes} function:
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMesh.cpp(143) : {184 bytes} function: Ogre::Mesh::createSubMesh
(unknown source):(0) : {80 bytes} function:
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreTechnique.cpp(469) : {464 bytes} function: Ogre::Technique::operator =
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMeshSerializerImpl.cpp(1000) : {68 bytes} function: Ogre::MeshSerializerImpl::readSubMesh
e:\ogre\sources\ogre_src_v1-8-1\ogremain\include\OgreSharedPtr.h(84) : {4 bytes} function: Ogre::SharedPtr<class Ogre::HardwareIndexBuffer>::SharedPtr
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(97) : {12 bytes} function: Ogre::DefaultHardwareIndexBuffer::DefaultHardwareIndexBuffer
(unknown source):(0) : {80 bytes} function:
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(166) : {56 bytes} function: Ogre::DefaultHardwareBufferManagerBase::createIndexBuffer
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreSubMesh.cpp(49) : {28 bytes} function: Ogre::SubMesh::SubMesh
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMesh.cpp(143) : {184 bytes} function: Ogre::Mesh::createSubMesh
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(166) : {56 bytes} function: Ogre::DefaultHardwareBufferManagerBase::createIndexBuffer
(unknown source):(0) : {80 bytes} function:
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(97) : {12 bytes} function: Ogre::DefaultHardwareIndexBuffer::DefaultHardwareIndexBuffer
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(166) : {56 bytes} function: Ogre::DefaultHardwareBufferManagerBase::createIndexBuffer
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(97) : {12 bytes} function: Ogre::DefaultHardwareIndexBuffer::DefaultHardwareIndexBuffer
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMeshSerializerImpl.cpp(1000) : {68 bytes} function: Ogre::MeshSerializerImpl::readSubMesh
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreMesh.cpp(143) : {184 bytes} function: Ogre::Mesh::createSubMesh
e:\ogre\sources\ogre_src_v1-8-1\ogremain\include\OgreSharedPtr.h(84) : {4 bytes} function: Ogre::SharedPtr<class Ogre::HardwareIndexBuffer>::SharedPtr
..\..\..\Sources\ogre_src_v1-8-1\OgreMain\src\OgreDefaultHardwareBufferManager.cpp(97) : {12 bytes} function: Ogre::DefaultHardwareIndexBuffer::DefaultHardwareIndexBuffer
(unknown source):(0) : {80 bytes} function:
Code: Select all
Ogre::Pass::processPendingPassUpdates(); // make sure passes are cleaned
When I add following code, the momory leaks still exist.
Code: Select all
m_pResourceGroupManager->shutdownAll();
After some debugging, I found the load state of mesh resource is wrong.
Code: Select all
MeshPtr mesh = MeshManager::getSingleton().create("conversion",
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
meshSerializer->importMesh(stream, mesh.getPointer());
Is this a bug?