Привет
Проблема с созданием поверхности в DirectDraw (WM 6 SDK). При первом запуске приложения все ок, но при повторном запуске метод
IDirectDraw::CreateSurface возвращает ошибку
E_OUTOFMEMORY. Ошибка такая возникает только при попытке работать с двойной буферизацией, т.е. при попытке создать поверхность с флагами
DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
если не создавать задний буфер, а простую поверхность то все замечательно работает.
Проверил
DDCAPS - свойства
DDSCAPS_BACKBUFFER и
DDSCAPS_FLIP есть.
Кстати метод
IDirectDraw::GetAvailableVidMem возвращает
E_NOTIMPL
Пробовал запустить все семплы из Windows Mobile 6 SDK — те же симптомы, при первом запуске все ок при повторном та же ошибка. Приходится перегружать устройство чтобы программа снова заработала (создавалась поверхность)
немного деталей:
КПК: Asus A696
операционка: Windows Mobile 6 Classic (CE 5.2.1239, сборка 17746.0.2.4)
собиралось под: Windows Mobile 6 Professional SDK, Visual Studio 2008
какие есть соображения в чем вообще может быть проблема? может у кого-то есть опыт подобной проблемы? или наоборот, у кого-то все замечательно работает под WM6/на Asus A696. Интересны любые комментарии тех кто работал с DirectDraw на Windows Mobile.
P.S. D3DM работает без проблем.
Здравствуйте, Аноним, Вы писали:
А>Если операционка Windows Mobile 6 Classic, то почему используется Windows Mobile 6 Professional SDK, а не Classic?
потому что
здесь Microsoft пишет:
Windows Mobile for Pocket PC = Windows Mobile Classic (download the Windows Mobile 6 Professional SDK)
GNE>>Asus A696
А>Видеодрайвер твоего Asus A696 поддерживает двойную буферизацию? Например, мой HTC-S620 (WM 6.1 Classic) не поддерживает.
я без понятия где это проверить/прочитать

но, по идее, если DirectDraw возвращает что
DDSCAPS_BACKBUFFER и
DDSCAPS_FLIP есть, то должен поддерживать, эмулятор например не поддерживает и это легко проверить проверив эти свойства.
Кроме того, в первый раз (после перезагрузки устройства) все запускается нормально и работает...
Здравствуйте, iGNER, Вы писали:
GNE>я без понятия где это проверить/прочитать
но, по идее, если DirectDraw возвращает что DDSCAPS_BACKBUFFER и DDSCAPS_FLIP есть, то должен поддерживать, эмулятор например не поддерживает и это легко проверить проверив эти свойства.
У меня также возвращает DDSCAPS_BACKBUFFER, но реально он не поддерживается. Видимо из-за OEM специфики.
GNE>Кроме того, в первый раз (после перезагрузки устройства) все запускается нормально и работает...
Вот это уже интересно — вначале все работает, но потом сбиваются какие-то настройки ... А на голой машине (после хардресета) работает?