crash in void OgreRenderer::beginRendering()
Posted: Fri Feb 24, 2012 14:09
cegui 0.7.6
ogre v1.7.2
d_pimpl->d_previousVP = d_pimpl->d_renderSystem->_getViewport();
This line will return a deleted viewport* pointer when destroy cegui window befor OgreRenderer::beginRendering().
The order is:
1. destory a cegui window
2. Window::onChildRemoved()
getTargetRenderingSurface().invalidate();
3. RenderingWindow::invalidate()
d_textarget.clear();
4. OgreTextureTarget::clear()
d_renderSystem._setViewport(d_viewport);
5. OgreRenderTarget::~OgreRenderTarget()
delete d_viewport;
6. OgreRenderer::beginRendering()
d_pimpl->d_previousVP = d_pimpl->d_renderSystem->_getViewport(); <-----return a deleted viewport in order 5.
d_pimpl->d_previousVP->getCamera()->getProjectionMatrixRS(); <------------crash
ogre v1.7.2
d_pimpl->d_previousVP = d_pimpl->d_renderSystem->_getViewport();
This line will return a deleted viewport* pointer when destroy cegui window befor OgreRenderer::beginRendering().
The order is:
1. destory a cegui window
2. Window::onChildRemoved()
getTargetRenderingSurface().invalidate();
3. RenderingWindow::invalidate()
d_textarget.clear();
4. OgreTextureTarget::clear()
d_renderSystem._setViewport(d_viewport);
5. OgreRenderTarget::~OgreRenderTarget()
delete d_viewport;
6. OgreRenderer::beginRendering()
d_pimpl->d_previousVP = d_pimpl->d_renderSystem->_getViewport(); <-----return a deleted viewport in order 5.
d_pimpl->d_previousVP->getCamera()->getProjectionMatrixRS(); <------------crash