//---------------------------------------------------------------------
// Ukazkovy priklad cislo 22
// Autor: Pavel Tisnovsky
//
// Program provede inicializaci OpenGL a GLUTu a nasledne na konzoli
// vypise informace o bitove hloubce jednotlivych bufferu. Informace
// se vypisou pri stlaceni klavesy 'i'. Zmenou parametru funkce
// glutInitDisplayMode() lze docilit jine konfigurace bufferu.
//---------------------------------------------------------------------
#include <GL/glut.h> // hlavickovy soubor funkci GLUTu a OpenGL
#include <stdio.h>
//---------------------------------------------------------------------
// Funkce pro vypis informaci o nastaveni bufferu
//---------------------------------------------------------------------
void printBuffersInfo(void)
{
char *anone[]={"ne", "ano"}; // pravdivostni hodnoty
printf( "Hloubkovy buffer\n"
"Bitova hloubka Z-bufferu: %d\n\n"
"Barvovy buffer\n"
"Pocet bitu na cervenou slozku: %d\n"
"Pocet bitu na zelenou slozku: %d\n"
"Pocet bitu na modrou slozku: %d\n"
"Pocet bitu na alfa slozku: %d\n\n"
"Akumulacni buffer\n"
"Pocet bitu na cervenou slozku: %d\n"
"Pocet bitu na zelenou slozku: %d\n"
"Pocet bitu na modrou slozku: %d\n"
"Pocet bitu na alfa slozku: %d\n\n"
"Dalsi konfigurace\n\n"
"Velikost barevne palety: %d\n"
"Double-buffering povolen: %s\n"
"True color rezim povolen: %s\n"
"Stereo rezim povolen: %s\n\n",
glutGet(GLUT_WINDOW_DEPTH_SIZE),
glutGet(GLUT_WINDOW_RED_SIZE),
glutGet(GLUT_WINDOW_GREEN_SIZE),
glutGet(GLUT_WINDOW_BLUE_SIZE),
glutGet(GLUT_WINDOW_ALPHA_SIZE),
glutGet(GLUT_WINDOW_ACCUM_RED_SIZE),
glutGet(GLUT_WINDOW_ACCUM_GREEN_SIZE),
glutGet(GLUT_WINDOW_ACCUM_BLUE_SIZE),
glutGet(GLUT_WINDOW_ACCUM_ALPHA_SIZE),
glutGet(GLUT_WINDOW_COLORMAP_SIZE),
anone[glutGet(GLUT_WINDOW_DOUBLEBUFFER)],
anone[glutGet(GLUT_WINDOW_RGBA)],
anone[glutGet(GLUT_WINDOW_STEREO)]);
}
//---------------------------------------------------------------------
// Funkce pro inicializaci vykreslovani
//---------------------------------------------------------------------
void onInit(void)
{
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // barva pozadi
}
//---------------------------------------------------------------------
// Nastaveni souradneho systemu v zavislosti na velikosti okna
//---------------------------------------------------------------------
void onResize(int w, int h) // argumenty w a h reprezentuji novou velikost okna
{
glViewport(0, 0, w, h); // viditelna oblast pres cele okno
glMatrixMode(GL_PROJECTION); // zacatek modifikace projekcni matice
glLoadIdentity(); // vymazani projekcni matice (=identita)
glOrtho(0, w, 0, h, -1, 1); // mapovani abstraktnich souradnic do souradnic okna
}
//---------------------------------------------------------------------
// Tato funkce je volana pri kazdem prekresleni okna
//---------------------------------------------------------------------
void onDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT); // vymazani vsech bitovych rovin barvoveho bufferu
glFlush(); // provedeni a vykresleni vsech zmen
}
//---------------------------------------------------------------------
// Tato funkce je volana pri stlaceni ASCII klavesy
//---------------------------------------------------------------------
void onKeyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break; // pokud byla stlacena klavesa ESC, konec programu
case 'i':
case 'I':
printBuffersInfo(); // vypsani informaci o jednotlivych bufferech
break;
default:
break;
}
}
//---------------------------------------------------------------------
// Hlavni funkce konzolove aplikace
//---------------------------------------------------------------------
int main(int argc, char **argv)
{
glutInit(&argc, argv); // inicializace knihovny GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL);// nastaveni bufferu
glutCreateWindow("Priklad na OpenGL cislo 22");// vytvoreni okna pro kresleni
glutReshapeWindow(100, 100); // zmena velikosti okna
glutPositionWindow(10, 10); // pozice leveho horniho rohu okna
glutDisplayFunc(onDisplay); // registrace funkce volane pri prekreslovani okna
glutReshapeFunc(onResize); // registrace funkce volane pri zmene velikosti okna
glutKeyboardFunc(onKeyboard); // registrace funkce volani pri stlaceni klavesy
onInit(); // inicializace vykreslovani
glutMainLoop(); // nekonecna smycka, kde se volaji zaregistrovane funkce
return 0; // navratova hodnota vracena operacnimu systemu
}
//---------------------------------------------------------------------
// Konec zdrojoveho souboru
//---------------------------------------------------------------------