我使用BlitFromMemory()将相机流渲染到我的Ogre场景中的纹理。但是,当我调用此函数时,它会以某种方式在内部保存图像,并且不会在下一帧自动释放它,因为我的程序突然开始使用大量内存。当我将这一行注释掉(并且不会每帧更新纹理)时,内存泄漏就消失了......
我不知道这是否是食人魔中的错误,或者我是否应该使用此功能手动释放一些内存......
以下是我的工作:
m_PixelBox = Ogre::PixelBox(width, height, 1, Ogre::PF_R8G8B8, m_currentFrame.ptr<uchar>(0));
m_Texture = Ogre::TextureManager::getSingleton().createManual("CameraTexture",Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D,width,height,0,Ogre::PF_R8G8B8,Ogre::TU_DYNAMIC_WRITE_ONLY_DISCARDABLE);
我执行此操作的每一帧:( newFrame和m_currentFrame都是opencv Mat类型)
newFrame.copyTo(m_currentFrame);
m_Texture->getBuffer()->blitFromMemory(m_PixelBox);
这一切都有效,但它会导致大量的内存泄漏,我只能在短时间内运行我的程序,因为帧很大。