ChangeDisplaySettings не хочет пахать
От: Whirlwind Россия http://whirlwind.ru
Дата: 02.04.05 17:38
Оценка:
Не могу разобраться где грабля. Нужное разрешение выставляет SDL. Проблема с восстановлением режима. Как только не изголялся. И так
WE3D_DWORD dwResult = ChangeDisplaySettings(WE3D_NULL,CDS_UPDATEREGISTRY);

и так
memset(&dm,0,sizeof(dm));
dm.dmSize = sizeof(dm);
dm.dmBitsPerPel = (DWORD)original_DisplayMode.dwBPP;
dm.dmPelsWidth = (DWORD)original_DisplayMode.dwWidth;
dm.dmPelsHeight = (DWORD)original_DisplayMode.dwHeight;
dm.dmFields = DM_PELSHEIGHT | DM_PELSWIDTH | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
dwResult = ChangeDisplaySettings(&dm,CDS_UPDATEREGISTRY);

И так
SDL_FreeSurface(screen);
screen = SDL_SetVideoMode(selected_DisplayMode.dwWidth,
    selected_DisplayMode.dwHeight,original_DisplayMode.dwBPP,
    SDL_FULLSCREEN);
if (screen == WE3D_NULL)
{

И с бубном поплясал. И броадкастом всем орал
WE3D_DWORD lParam = MAKELONG(original_DisplayMode.dwWidth,
    original_DisplayMode.dwHeight);
PostMessage(HWND_BROADCAST,WM_DISPLAYCHANGE,original_DisplayMode.dwBPP,lParam);


Все время что нибудь не то получается. В несколько этапов (SDL+WINAPI) получается восстановить, но окна не реагируют на изменение резы. В остальных случаях реза просто сбрасывается в 640х480х32. При этом CDS выдает DISP_CHANGE_FAILED и хоть тресни — не хочет восстанавливать. Самое интересное, что не хочет восстанавливать только 1024х768х32 (хотя через виндовые ГУИ этот режим прекрасно выставляется и постоянно работает). Например если выставить 1024х768х16 а прогой выбрать какой нить с глубиной 32 бита, то обратно восстанавливается. Я вообще не пойму кто это глючит: то ли дрова, то ли винда, то ли я.

Куда хоть копать, подскажите пожалуйста.
Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.