diff --git a/modules/ovis/samples/ovis_demo.py b/modules/ovis/samples/ovis_demo.py index b607d180b..93e1b9f4b 100644 --- a/modules/ovis/samples/ovis_demo.py +++ b/modules/ovis/samples/ovis_demo.py @@ -31,3 +31,5 @@ iwin.setCameraIntrinsics(K, imsize) while cv.ovis.waitKey(1) != 27: R, t = iwin.getCameraPose() owin.setEntityPose("cam", t, R) + +del iwin # must be destroyed in reverse creation order \ No newline at end of file diff --git a/modules/ovis/src/ovis.cpp b/modules/ovis/src/ovis.cpp index 4d027e4fe..4d4d931a8 100644 --- a/modules/ovis/src/ovis.cpp +++ b/modules/ovis/src/ovis.cpp @@ -238,6 +238,20 @@ struct Application : public OgreBites::ApplicationContext, public OgreBites::Inp return ret; } +#if OGRE_VERSION < ((1 << 16) | (12 << 8) | 3) + void destroyWindow(const Ogre::String& name) + { + for (auto it = mWindows.begin(); it != mWindows.end(); ++it) + { + if (it->render->getName() != name) + continue; + mRoot->destroyRenderTarget(it->render); + mWindows.erase(it); + return; + } + } +#endif + size_t numWindows() const { return mWindows.size(); } void locateResources() CV_OVERRIDE @@ -371,6 +385,10 @@ public: _app->closeApp(); _app.release(); } + else + { + _app->destroyWindow(title); + } } void setBackground(InputArray image) CV_OVERRIDE