Since all program events are usually handled on FrameStarted, ...ended, etc events, removing frame listener might cause ogre to crash.
I suggest to modify _fireFrameStarted (and similar functions) to take into consideration event removal.
Perhaps this (or something similar) can help:
bool Root::_fireFrameStarted(FrameEvent& evt)
{
OgreProfileBeginGroup("Frame", OGREPROF_GENERAL);
_syncAddedRemovedFrameListeners();
// Tell all listeners
for (set<FrameListener*>::type::iterator i = mFrameListeners.begin(); i != mFrameListeners.end(); ++i)
{
//Add this modification
if(mRemovedFrameListeners.size())
{
set<FrameListener*>::type::iterator it = mRemovedFrameListeners.find(*i);
if(it != mRemovedFrameListeners.end())
continue;
}
//end of added block
if (!(*i)->frameStarted(evt))
return false;
}
return true;
}
when to safely use removeFrameListener
-
- Gnoblar
- Posts: 4
- Joined: Tue Oct 10, 2017 2:04 am
-
- OGRE Team Member
- Posts: 1995
- Joined: Sun Mar 30, 2014 2:51 pm
- x 1075
- Contact:
Re: when to safely use removeFrameListener
please create an issue or even better a pull-request here:
https://github.com/OGRECave/ogre/issues
https://github.com/OGRECave/ogre/issues
-
- Gnoblar
- Posts: 4
- Joined: Tue Oct 10, 2017 2:04 am
Re: when to safely use removeFrameListener
Yes, I did it, but I'm not sure I created pull request correctly. I'm not really familiar with it...