4.15 Как запустить OpenGL на весь экран?
Автор: zombieВ OpenGL нет полноэкранного режима, только оконный. Это, однако, не проблема - ничто не мешает сделать окно размером во весь экран (скажем, 1024x768); истинные размеры экрана можно получить с помощью функции GetSystemMetrics(SM_CYSCREEN).
Как это скажется на производительности - целиком зависит от драйвера видеокарты. В идеале, он должен понимать такую ситуацию как особую. Кстати, драйвера для чипов 3Dlabs так и делают - если окно программы полностью перекрывает экран, используется аппаратная двойная буферизация. Если же окно программы занимает только часть экрана, драйвер просто копирует данные из одной области видеопамяти в другую.
И еще одно замечание. Чтобы курсор мыши не портил вид, его можно спрятать с помощью функции SetCursor(NULL), а показать обратно - используя ту же функцию, но с правильным хэндлом курсора (HCURSOR) в качестве параметра.
Можно использовать библиотеку GLUT. В этой библиотеке имеется функция glutFullScreen(); В этой библиотеке имеется также так называемый Game-Mode. Это значит, что можно задавать не только полноэкранный режим но и определять его параметры, например:
... glutInit(&argc, argv); // Задаётся ширина и высота окна OpenGL glutInitWindowSize(windowwidth, windowheight); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); //Размер экрана:число бит на пиксель@частота обновления экрана glutGameModeString("640x480:16@72"); glutEnterGameMode(); // Войти в Game-Mode ...
Более детально о GLUT смотрите в разделе 7.7. Второй способ, действует только в Windows.
... // Set Display mode 800x600 32bpp DEVMODE md = {0}; md.dmSize = sizeof(md); md.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT; md.dmPelsWidth = 800; // Ширина экрана md.dmPelsHeight = 600; // Высота экрана md.dmFields |= DM_BITSPERPEL; md.dmBitsPerPel = 32; // Количество бит на пиксель int change; change = ChangeDisplaySettings(&md, CDS_FULLSCREEN); ...