Листинг 22.9
DEVM0DE dmScreenSettings: memsetC&dmScreenSettings. 0. sizeof(DEVM0DE)); dmScreenSettings.dmSize - sizeof(DEVM0DE):
dmScreenSettings.dmPelsWidth - GetSystemMetrics(SM_CXSCREEN); dmScreenSettings.dmPelsHeight - GetSystemMetncs(SM_CYSCREEN ): dmScreenSettings.dir.Fields - DM_PELSWIDTH | DM_PELSHEIGHT; ChangeDi spl aySettingsC&dmScreenSettings. CDSJULLSCREEN) ;
После перевода системы в полноэкранный режим функция StartOpenGKhWnd. &hGLRC) ) по-прежнему не управляет форматом пикселов, а переключение страниц в функции RenderOO выполняется копированием. Не изменяется также время вывода примитивов.
Использование расширений Доступ к расширениям Стандартная часть OpenGL менее гибко организует взаимодействие с операционной системой по сравнению с интегрированной в Windows библиотекой DirectX и не учитывает многих новых возможностей, которые предоставляются графическими ускорителями. Производители ускорителей или разработчики программного обеспечения имеют возможность, не изменяя стандарта, реализовывать функции, расширяющие возможности OpenGL. Указатель на строку, содержащую список поддерживаемых расширений, можно получить при помощи следующего вызова: char *s - (char *)glGetString(GL_EXTENSIONS)
В проекте OpenGL_ext вызов glGetStringC ) и вывод списка доступных расширений выполняется после выбора соответствующего пункта меню. В листинге 22.10 показан фрагмент функции OnMenuO, в котором выполняются чтение сведений о разработчике библиотеки, типе ускорителя, строке расширений и вывод этих данных на экран.
Листинг 22.10
char s[4096]; strcpy(s.Conf); int L - strlen(s); int j « 0:
for(int i-0; i<L; i++) //Вставка разделителей строк.
if(j++>50 && s[i]-' ') {j-0: s[iK\t'; } TIMESTRING(hWnd.-l.s): char s[4096];
Conf - (char*) glGetString(GL_VENDOR); //Фирма-разработчик
strcpy(s.Conf);
strcat(s."\t Ускоритель ");
Conf - (char*) glGetString(GL_RENDERER): //Графический ускоритель
strcat(s.Conf);
strcat(s."\t Версия ");
Conf = (char*) glGetString(GL_VERSION); //Версия OpenGL. strcat(s.Conf);