flush before deleting screens

This commit is contained in:
Glenn Maynard
2005-07-23 06:36:11 +00:00
parent 703c96a53a
commit 9cf25ad2b1
+12 -3
View File
@@ -152,9 +152,15 @@ namespace
return false; return false;
} }
void BeforeDeleteScreen()
{
/* Deleting a screen can take enough time to cause a frame skip. */
SCREENMAN->ZeroNextUpdate();
}
/* If we're deleting a screen, it's probably releasing texture and other /* If we're deleting a screen, it's probably releasing texture and other
* resources, so trigger cleanups. */ * resources, so trigger cleanups. */
void AfterDeletingScreen() void AfterDeleteScreen()
{ {
/* Now that we've actually deleted a screen, it makes sense to clear out /* Now that we've actually deleted a screen, it makes sense to clear out
* cached textures. */ * cached textures. */
@@ -169,6 +175,8 @@ namespace
* reset the screen group and list of persistant screens. */ * reset the screen group and list of persistant screens. */
void DeletePreparedScreens() void DeletePreparedScreens()
{ {
BeforeDeleteScreen();
FOREACH( LoadedScreen, g_vPreparedScreens, s ) FOREACH( LoadedScreen, g_vPreparedScreens, s )
{ {
if( s->m_bDeleteWhenDone ) if( s->m_bDeleteWhenDone )
@@ -182,7 +190,7 @@ namespace
g_setGroupedScreens.clear(); g_setGroupedScreens.clear();
g_setPersistantScreens.clear(); g_setPersistantScreens.clear();
AfterDeletingScreen(); AfterDeleteScreen();
} }
}; };
@@ -291,8 +299,9 @@ ScreenMessage ScreenManager::PopTopScreenInternal()
{ {
if( ls.m_bDeleteWhenDone ) if( ls.m_bDeleteWhenDone )
{ {
BeforeDeleteScreen();
SAFE_DELETE( ls.m_pScreen ); SAFE_DELETE( ls.m_pScreen );
AfterDeletingScreen(); AfterDeleteScreen();
} }
} }