Biblioteca Glut

Modul pentru jocurile GLUT este proiectat pentru a oferi o performanță de înaltă performanță într-un ecran complet. În acest mod, anumite funcții GLUT, cum ar fi meniurile pop-up și ferestrele, sunt dezactivate pentru a crește performanța.
Primul lucru pe care trebuie să-l facem este să setăm parametrii modului de joc, adică parametrii ecranului. Acești parametri pot include rezoluția ecranului, adâncimea pixelilor și rata de reîmprospătare.
Formatul setărilor este după cum urmează:

W - lățimea ecranului în pixeli.
H - înălțimea ecranului în pixeli.
Bpp este numărul de biți per pixel.
RR - frecvența scanării verticale în hertz.

Înainte de a merge mai departe, rețineți că aceste setări sunt disponibile numai la cerere pe hardware. Dacă modul specificat nu este disponibil, setările sunt ignorate.

"800 × 600: 32 @ 100" - rezoluție de 800 × 600; adâncimea de culoare (32 biți); 100Hz
"640 × 480: 16 @ 75" - rezoluția este 640 × 480; adâncimea de culoare (16 biți); 75Hz

Deși, de obicei, avem o idee clară despre rezoluția ecranului și toți parametrii, din fericire, nu este nevoie să le specificăm pe toate. Putem să lăsăm câteva câmpuri și să lăsăm pe GLUT să completeze el însuși. Următoarele rânduri ale șablonului reprezintă o indicație parțială valabilă a setărilor ecranului:

GLUT poate procesa toate combinațiile atâta timp cât ordinea între ele este păstrată. De exemplu, specificarea ratei de reîmprospătare înainte de adâncimea de culoare nu este permisă.

Să presupunem că dorim să setăm rezoluția ecranului, dar nu ne pasă de adâncimea pixelului sau de rata de reîmprospătare, atunci putem scrie ceva de genul "800 × 600".

Dacă, pe de altă parte, am vrut doar să setăm modul ecran complet la rezoluția curentă, dar cu o adâncime de culoare de 32 de biți, am putea scrie ": 32".

Aceste câteva exemple nu prezintă toate posibilitățile liniei complete a ecranului de setări. Putem folosi oricare dintre liniile șabloanelor prezentate mai sus.

Mai întâi de toate, trebuie să configuram GLUT în conformitate cu parametrii solicitați pentru modul ecran complet. Funcția GLUT care stabilește modul de joc este glutGameModeString. Sintaxa este după cum urmează:

void glutGameModeString # 40; const char * string # 41; ;

* string este un șir care conține setările necesare.

GLUT verifică argumentul glutGameModeString. Deși funcția nu returnează un cod de eroare, putem verifica dacă modul este specificat în ordinea corectă. GLUT oferă o funcție care, printre altele, ne permite să verificăm dacă modul specificat este valabil. Sintaxa funcției:

int glutGameModeGet # 40; Informații GLenum # 41; ;

info - informații solicitate.

Pentru a verifica dacă modul furnizat este activ, variabila de informații ia valoarea constantelor predefinite: GLUT_GAME_MODE_POSSIBLE.

În acest caz, valoarea retur indică dacă modul dat este valabil, o valoare diferită de zero indică activitatea unui anumit mod. Presupunând că avem o valoare diferită de valoarea zero, putem introduce sau cel puțin încercăm să intrăm în modul de joc cu glutEnterGameMode. Această funcție stabilește de fapt ecranul pentru setarea dorită, dacă acestea sunt valide. Sintaxa este după cum urmează:

void glutEnterGameMode # 40; vid # 41; ;

Funcția principală pentru inițializarea GLUT folosind modul de joc cu setările de rezoluție de la 800 la 600 poate arăta astfel:

Funcția de inițializare trebuie să înregistreze toate apelurile de apel necesare, precum și să efectueze inițializarea necesară a OpenGL. De exemplu, am putea scrie următoarele:

Acest lucru poate fi cazul dacă vrem să putem comuta între modurile de joc și modul fereastră în timpul executării aplicației. Următorul fragment de cod presupune că începem în modul fereastră. Apoi utilizatorul poate apăsa F1 pentru a intra în modul de joc. F6 readuce utilizatorul în modul fereastră. În acest caz, principal # 40; # 41; trebuie să definească proprietățile ferestrei, să înregistreze funcțiile și apelurile inverse și să intre în bucla principală.

O funcție care îi spune lui GLUT să părăsească modul de joc.

void glutLeaveGameMode # 40; vid # 41; ;

O funcție care va gestiona tastele speciale pentru comutarea modurilor:

Există o astfel de problemă, care este foarte importantă în funcția de mai sus, când intrăm în modul de joc cu glutEnterGameMode, trebuie să înregistrăm din nou callback-urile și să redefinim contextul OpenGL. Modul de joc este echivalent cu o fereastră nouă, cu alte setări OpenGL și GLUT. Aceasta înseamnă că funcțiile de apel invers în modul fereastră nu vor funcționa în modul de joc. Pentru a utiliza funcțiile de retur, trebuie să le înregistrăm din nou. În plus, inițializarea OpenGL trebuie să fie definită din nou. De exemplu, listele de afișare create pentru modul fereastră trebuie definite din nou când intri în modul de joc.

GLUT are o funcție specială pentru interogarea parametrilor de stare pentru modul de joc. glutGameModeGet. Sintaxa acestei funcții este specificată mai sus, când am menționat că una dintre valorile posibile pentru argument a fost GLUT_GAME_MODE_POSSIBLE.

Există mai multe posibilități pentru argumentul glutGameModeGet, care acoperă toate nevoile pentru modul corect de programare a jocurilor. Valorile returnate pentru fiecare caz sunt după cum urmează:

GLUT_GAME_MODE_ACTIVE - Dacă aplicația rulează în modul de joc, glutGameModeGet va reveni la o valoare nenulă dacă va reveni la zero în modul fereastră.
GLUT_GAME_MODE_POSSIBLE - După cum am menționat mai sus, acest lucru poate fi folosit pentru a testa un șir care definește setările modului de joc. Este un sunet bun să vă referiți la glutGameModeGet cu această valoare înainte de a intra în modul de joc.
GLUT_GAME_MODE_DISPLAY_CHANGED - După cum am menționat mai devreme, atunci când intrăm în modul de joc, nu există nici o garanție că modul de afișare sa schimbat cu adevărat. Această valoare poate fi utilizată pentru a verifica dacă modul de joc a fost activat de fapt.
GLUT_GAME_MODE_WIDTH - returnează lățimea ecranului.
GLUT_GAME_MODE_HEIGHT - returnează înălțimea ecranului.
GLUT_GAME_MODE_PIXEL_DEPTH - Returnează adâncimea de culoare a biților pe pixel din modul curent.
GLUT_GAME_MODE_REFRESH este rata reală de reîmprospătare în Hertz.
Ultimile patru opțiuni au sens doar atunci când suntem în modul de joc. Aceste opțiuni vor apela glutGameModeGet cu o valoare de -1 dacă ultima linie care determină modul de configurare a jocului nu funcționează chiar dacă suntem deja în modul de joc. De exemplu, dacă suntem dintr-o aplicație care rulează în modul de joc cu o rezoluție de 640 x 480 și a vrut să o schimbe la 1600 x 1200 și modul nu se potrivește cu configurațiile hardware reale. apoi GLUT nu va schimba rezoluția și modul de joc va rămâne la o rezoluție de 640 la 480. Cu toate acestea, atunci când se constată înălțimea curentă. obținem -1. nu 480, deși înălțimea reală este 480.

Următorul cod ilustrează utilizarea glutGameModeGet.


Biblioteca Glut

Articole similare