Восстановление поверхностей
Наше приложение благополучно инициализируется и выводит графические данные. Теперь необходимо справиться с возможной потерей поверхностей. При рассмотрении функции
DirectDrawWin::PreDrawScene мы видели, что
DirectDrawWin вызывает виртуальную функцию
RestoreSurfaces(), чтобы производный класс получил возможность восстановить потерянные поверхности. Функция
RestoreSurfaces() отвечает за восстановление как потерянной памяти поверхности, так и ее содержимого. Функция
BounceWin::RestoreSurfaces() выглядит так:
void BounceWin::RestoreSurfaces() { if (surf1->IsLost()==FALSE) return; CString filename; if (GetCurDisplayDepth()==8) filename="tri08.bmp"; else filename="tri24.bmp"; surf1->Restore(); LoadSurface( surf1, filename ); }
|
DirectDraw может отнимать у неактивного приложения только поверхности, находящиеся в видеопамяти, так что нет смысла в восстановлении поверхностей из системной памяти. Поэтому
RestoreSurfaces() сначала проверяет, была ли потеряна единственная вспомогательная поверхность нашего приложения, и если нет — функция прекращает работу. Если же поверхность была потеряна, мы восстанавливаем ее память функцией
Restore(), а содержимое — функцией
LoadSurface().
Содержание Назад Вперед