Режим для ігор GLUT призначений для забезпечення високопродуктивного рендеринга в повному екрані. В цьому режимі деякі функції GLUT, такі як спливаючі меню і вікна, відключені для збільшення продуктивності.
Перше, що ми повинні зробити, це задати параметри ігрового режиму, тобто параметри екрану. Ці параметри можуть включати в себе дозвіл екрана, глибину пікселя і частота оновлення.
Формат налаштувань виглядає наступним чином:
W - ширина екрану в пікселях.
H - висота екрана в пікселях.
Bpp - кількість біт на піксель.
RR - частота кадрової розгортки в герцах.
Перш, ніж ми підемо далі, зверніть увагу, що ці налаштування доступні тільки за запитом до апаратного забезпечення. Якщо зазначений режим не доступний, то настройки ігноруються.
"800 × 600: 32 @ 100" - дозвіл 800 × 600; глибина кольору (32 bits); 100Hz
"640 × 480: 16 @ 75" - дозвіл 640 × 480; глибина кольору (16 bits); 75Hz
Хоча ми зазвичай маємо чітке уявлення про дозвіл екрана і всіх параметрах, на щастя, ми не повинні вказувати їх все. Ми можемо залишити деякі поля, і нехай GLUT заповнить прогалини сам. Наступні рядки шаблону є допустимим частковим зазначенням налаштувань екрану:
GLUT може обробляти всі комбінації до тих пір, поки порядок між ними зберігається. Так, наприклад, вказівки частоти поновлення перед глибиною кольору не допускається.
Припустимо, ми хочемо встановити дозвіл екрана, але не дбаємо про глибину пікселя або частоти оновлення, то ми можемо написати щось на кшталт "800 × 600".
Якщо, з іншого боку, ми просто хотіли встановити повноекранний режим при поточному дозволі, але з глибиною кольору 32 біт, ми могли б написати ": 32".
Ці кілька прикладів не показують всі можливості повної рядка екрану налаштувань. Ми можемо використовувати будь-яку з рядків шаблонів, представлених вище.
Перш за все ми повинні налаштувати GLUT у відповідність із затребуваними параметрам для повноекранного режиму. Функції GLUT, що встановлює режим гри - glutGameModeString. Синтаксис виглядає наступним чином:
void glutGameModeString # 40; const char * string # 41; ;
* String - рядок, що містить потрібні налаштування.
GLUT виконує перевірку аргументу glutGameModeString. Хоча функція не повертає код помилки, ми можемо переконатися, що режим зазначений в правильному порядку. GLUT надає функцію, яка, серед інших можливостей, дозволяє нам перевірити, якщо зазначений режим є дійсним. Синтаксис функції:
int glutGameModeGet # 40; GLenum info # 41; ;
info - запитувана інформація.
Для того, щоб перевірити, що наданий режим активний, інформаційна змінна приймає значення попередньо визначених констант: GLUT_GAME_MODE_POSSIBLE.
В цьому випадку, яке значення вказує, чи є заданий режим дійсним, нульове значення означає говорить про активність саме заданого режиму. Якщо припустити, що ми отримали нульове значення в якості значення, що повертається, то ми можемо увійти, або, по крайней мере, спробувати увійти, в режим гри з glutEnterGameMode. Ця функція фактично встановлює для екрану потрібну настройку, якщо вони дійсні. Синтаксис виглядає наступним чином:
void glutEnterGameMode # 40; void # 41; ;
Функція main для ініціалізації GLUT c застосуванням режиму гри з настройками дозволу 800 на 600 може мати приблизно такий вигляд:
Функція ініціалізації повинна зареєструвати всі необхідні зворотні виклики, а також виконати необхідну ініціалізацію OpenGL. Наприклад, ми могли б написати наступне:
Це може бути так, якщо ми хочемо мати можливість перемикання між режимами гри і віконним режимом під час виконання програми. Наступний фрагмент коду передбачає, що ми починаємо в віконному режимі. Потім користувач може натиснути F1 для переходу в режим гри. F6 приносить користувача назад в режим вікна. В цьому випадку main # 40; # 41; повинна визначати властивості вікна, реєстрацію функцій і зворотних викликів і увійти в основний цикл.
Функція, яка повідомляє GLUT покинути ігровий режим.
void glutLeaveGameMode # 40; void # 41; ;
Функція, яка буде обробляти спеціальними клавішами перемикання режимів:
Існує така дрібниця, яка дуже важлива в функції вище, коли ми входимо в режим гри з glutEnterGameMode ми повинні зареєструвати зворотні виклики знову, і перевизначити контекст OpenGL. Режим гри рівносильний новому вікну, з іншими настройками OpenGL і GLUT. Це означає, що функції зворотного виклику в режим вікна не будуть працювати в ігровому режимі. Для того щоб використовувати функції зворотного виклику ми повинні зареєструвати їх знову. Крім того, OpenGL ініціалізація повинна бути визначена знову. Наприклад дисплей списків, створених для вікна режим повинні бути визначені ще раз при вході в ігровому режимі.
GLUT має спеціальну функцію для запиту параметрів стану для режиму гри. glutGameModeGet. Синтаксис цієї функції зазначений вище, коли ми згадали, що одним з можливих значення для аргументу було GLUT_GAME_MODE_POSSIBLE.
Є кілька можливостей для аргументу glutGameModeGet, які охоплюють всі потреби в правильному режимі програмування гри. Значення, що повертаються для кожного випадку представлені нижче:
GLUT_GAME_MODE_ACTIVE - Якщо додаток працює в режимі гри, glutGameModeGet потім поверне нульове значення, якщо у віконному режимі он поверне нуль.
GLUT_GAME_MODE_POSSIBLE - Як уже згадувалося вище, це може бути використано для перевірки рядка, яка визначає налаштування режими гри. Це хороший тон звернутися до glutGameModeGet з цим значенням перед входом ігровий режим.
GLUT_GAME_MODE_DISPLAY_CHANGED - Як згадувалося раніше при вході в режим гри немає ніякої гарантії, що режим відображення дійсно змінився. Це значення може бути використано для перевірки, якщо режим гри був дійсно активований.
GLUT_GAME_MODE_WIDTH - повертає ширину екрана.
GLUT_GAME_MODE_HEIGHT - повертає висоту екрану.
GLUT_GAME_MODE_PIXEL_DEPTH - повертає глибину кольору біт на піксель від поточного режиму.
GLUT_GAME_MODE_REFRESH - фактична частота оновлення в герцах.
Останні чотири варіанти мають сенс тільки тоді, коли ми знаходимося в ігровому режимі. Ці варіанти будуть викликати glutGameModeGet зі значенням -1, якщо останній рядок, що визначає режим настройки гри не діє, навіть якщо ми вже знаходимося в ігровому режимі. Так, наприклад, якщо ми з запущеного додатку в режимі гри з роздільною здатністю 640 х 480 і захотіли його змінити на 1600 х 1200, і режим не збігається з фактичними апаратними конфігураціями. то GLUT не змінить дозвіл і режим гри залишиться з роздільною здатністю 640 на 480. Однак при з'ясуванні поточної висоту. ми отримаємо -1. а не 480, хоча фактична висота 480.
Наступний код ілюструє використання glutGameModeGet.