netlib.narod.ru< Назад | Оглавление | Далее >

Восстановление поверхностей

Наше приложение благополучно инициализируется и выводит графические данные. Теперь необходимо справиться с возможной потерей поверхностей. При рассмотрении функции 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().


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz