main.cpp
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// create the application instance
AppDelegate app;
return Application::getInstance()->run();
}
Application裏的run()循環調用了導演類Director的mainLoop();
while(!glview->windowShouldClose())
{
QueryPerformanceCounter(&nNow);
if (nNow.QuadPart - nLast.QuadPart > _animationInterval.QuadPart)
{
nLast.QuadPart = nNow.QuadPart;
director->mainLoop();
glview->pollEvents();
}
else
{
Sleep(0);
}
}
_animationInterval是我們設定的循環間隔,每次前後兩個時間的差大於這個間隔,就執行一次主循環director->mainLoop(),小於這個間隔呢,就一直獲取當前的時間,直到大於這個間隔。
再看mainLoop,
void DisplayLinkDirector::mainLoop()
{
if (_purgeDirectorInNextLoop)
{
_purgeDirectorInNextLoop = false;
purgeDirector();
}
else if (! _invalid)
{
drawScene();
// release the objects
PoolManager::getInstance()->getCurrentPool()->clear();
}
}
調用drawScene()方法繪製場景,並彈出自動回收池,使這一幀被放入自動回收池裏的對象全部被釋放。