OpenGL
Az OpenGL objektum különböző opciók halmaza, melyek az OpenGL állapotát írják le.
// create object
unsigned int objectId = 0;
glGenObject(1, &objectId);
// bind object to context
glBindObject(GL_WINDOW_TARGET, objectId);
// set options of object currently bound to GL_WINDOW_TARGET
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800);
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);
// set context target back to default
glBindObject(GL_WINDOW_TARGET, 0);
Graphical Processing Unit (GPU)
Rendering primitives
Grafikus pipeline [3]
Vertex specification
Egy rendezett vertex lista definiálása, melyet a program a pipeline-nak fog elküldeni. A vertex lista a különböző primitívek (point, line, triangle) határait definiálja. Miután definiáltuk a vertex listát a Vertex rendering folyamat során a draw parancs a megfelelő primitívbe rendereli a vertexeket.
Vertex shader
A vertex rendering eredényét fogadja bemenetként és minden egyes vertexen alap műveleteket végezhet el, majd egy kimenő vertexé alakítja az adatot a felhasználó által definiált program alapján.
Tessellation
A primitíveket két shader segítségével tovább finomítjuk. A Tessellation Control Shader meghatározza a "finomítás számát", majd a Tessellation Evaluation Shader valamilyen interpolációt és esetleg további felhasználó által definiált műveleteket alkalmazva elvégzi a finomítást. Azaz egy folytonos felületet úgy közelítünk, hogy az adott felületet, primitívet egyre kisebb háromszögekre bontjuk.
Geometry shader
Felhasználó által definiált program, mely feldolgozza a beérkező primitíveket és nulla vagy több kimenő primitívet küld a pipeline következő szintjére. Ez egy programozható elágazás a pipeline-ban, melyel szabályozhatjuk a kimenő primitívek számát és műveleteket végezhetünk rajtuk.
Vertex post-processing
Számos fixed műveleten mennek keresztül az adott vertexek, például a vágás műveletén, ahol az adott nézőponthoz képest meghatározzuk az objektum window beli helyét.
Primitive assembly
Az a folyamat, ahol a fő lépések kimeneti vertex adatai összegyűlnek és egy rendezett primitív (point, line, triangle) listába szerveződnek.
Rasterization
Azok a primitívek, melyek eddig eljutnak a pipeline-ban a megadott sorrendben raszterizálódnak. Ennek a raszterizációnak az eredménye fragment-ek sorozata. A fragment állapotok halmaza, melyet arra használunk, hogy kiszámítsuk az adott pixel képernyő beli pozícióját.
Fragment shader
A raszterizációs lépés fragment kimeneteit a fragment shader dolgozza fel. A fragment shader kimenete egy lista a megfelelő színekkel és a hozzájuk tartozó mélység információval.
Grafikus processzor
- Front és Back image buffers: A Front image buffer azokat a tényleges pixel adatokat tartalmazza, amik a viewport-on keresztül láthatók. A viewport a képernyő azon része, ami tartalmazza a window-t és azon belül a renderelt képet. A Back image buffer az a hely, ahová a GPU ténylegesen rendereli az adatokat (scene). Amikor egy adott scene renderelésével végzett a GPU, akkor a két buffer tartalma kicserélődik (buffer swap) és a Front image buffer tartalma megjelenítődik a képernyőn, közben a GPU egy újabb scene-t renderelhet a Back image buffer-be.
- Depth buffer vagy z-buffer: Minden egyes pixel értékhez tárol egy depth értéket, ami meghatározza, hogy az adott pixel milyen távol van az adott kamera nézőponthoz képest. Segítségével szűrhetjük azokat a távoli vagy túl közeli pixeleket, amiket nem szeretnénk megjeleníteni.
- Stencil buffer A stencil buffer egy integer maszkot tartalmaz az image buffer minden pixeléhez, ahol minden pixelhez meghatározhatjuk, hogy meg szeretnénk e jeleníteni vagy nem. Továbbá használják még bonyolult valós idejű árnyékolás kiszámításához is.
- Texture maps: Tulajdonképpen egy kép, amit arra használunk, hogy az egyes objektumok felületének részletes megjelenítést biztosítsunk.
- Vertex buffers: A vertex bufferben a primitívek 3D koordinátáit tároljuk. (3D pontok halmaza)