OpenGL - Koncepcja i architektura Aplikacja odwo!uje si" poprzez funkcje API OpenGL bezpo#rednio do karty graficznej (z pomini"ciem systemu operacyjnego). Programowanie grafiki komputerowej Rados!aw Mantiuk Wydzia! Informatyki Zachodniopomorski Uniwersytet Technologiczny Implementacja software'owa - wszystkie funkcje mog" by# wykonywane przez CPU, jednak producenci kart mog" zast$powa# cz$%# funkcji OpenGL swoimi rozwi"zaniami sprz$towymi. Dla programisty ta zamiana jest niewidoczna. Aplikacja OpenGL Sterownik karty graficznej Karta graficzna - GPU OpenGL - Open Graphics Library! OpenGL: architektura systemu do programowania grafiki komputerowej (programowanie grafiki -> synteza obrazów)! Wspomaganie sprz$towe (system graficzny czasu rzeczywistego).! Bazuje na specyfikacji (nie implementacji).! Maszyna stanu (ang. rendering state machine).! Rozszerzalno%#.! Wieloplatformowo%# (OpenGL ES).! Wiele typów danych (np. sta!opozycyjne i zmiennoprzecinkowe).! Mo&liwo%# po!"czenia z ró&nymi j$zykami. OpenGL - Architektura (1)! 1993: pierwsza wersja OpenGL 1.0 (== IRIX GL 5.0) w 1993 roku (IRIX GL 1.0 1983).! 2001: OpenGL 1.4, vertex shader (programowalo%# operacji na wierzcho!kach).! 2003: OpenGL 1.5, fragment shader (oprogramowalno%# operacji na fragmentach).! Standard - OpenGL Khronos Group (ARB (Architecture Review Board), 3Dlabs, Apple, ATI, Dell Computer, IBM, Intel, NVIDIA, SGI, and Sun Microsystems).! Implementowana przez producentów kart graficznych.! Dost$pna na wi$kszo%ci platform sprz$towych i programowych (OpenGL ES).! Rozszerzalna (ang. OpenGL extensions). Mo&liwe pomini$cie przetwarzania wierzcho!ków. Evaluator - zamiana obiektów z!o&onych na obiekty podstawowe. Fragment Operations - sk!adanie obiektów 2D wygenerowanych przez rasteryzer i umieszczanie ich we frambufferze. OpenGL - Architektura (2) OpenGL - zestaw funkcji s!u&"cych do tworzenia dwu- i trójwymiarowych obiektów oraz kontrolowania w jaki sposób obiekty te s" renderowane do framebuffer a. Pisanie programu w OpenGL u: 1. utworzenie okna we framebuffer ze, 2. przechwycenie kontekstu okna, 3. renderowanie obiektów w oknie (np. rysowanie linii, wielok"tów, itp.). Architektura OpenGL bazuje na maszynie stanu kontroluj"cej dzia!anie zestawu funkcji graficznych. Wykorzystywana jest lista rozkazów (ang. display list) Biblioteka ma architektur$ klient-serwer. Klient wysy!a polecenia do serwera. Klient nie musi znajdowa# si$ na komputerze z serwerem. Publiczne API biblioteki zaimplementowane jest w C. Biblioteka nie obs!uguje operacji wej%cia (np. myszy, klawiatury) i wyj%cia (np. monitora). Biblioteka rysuje obiekty podstawowe sk!adaj"ce si$ z jednego lub wielu wierzcho!ków (wiecho!ek - ang. vertex). Ka&dy wierzcho!ek przetwarzany jest niezale&nie od innych. Jego parametrami s": po!o&enie, kolor, wektor normalny, wspó!rz$dne tekstury. Do przetwarzania wierzcho!ków wykorzystywane s" funkcje graficzne (obliczenia macierzowe, równanie o%wietlenia, antyaliasing, itp.). OpenGL 3.0! Shader model 4.0! geometry shader: per primitive programability! texture array! compact floating point textures (HDR)! FBO! depth-peeling (przezroczysto%#)! color space conversions (support for srgb) Przysz!o%# OpenGL: programowanie tessallacji (np. w LOD), CPU bed" generowa!y z!o&one instrukcje steruj"ce GPU (glcalllist), Eliminacja selektorów. Lepsze po!"czenie z shaderami (GLSL). 1
OpenGL - Rasteryzacja fragment - zbiór danych wykorzystywanych do narysowania jednego piksela obrazu. Jego parametrami s" po!o&enie, dane o kolorze, wspó!. tekstury, wspó!. mg!y i Z-bufora dla poszczególnych punktów rastra, stan buforów Alpha, Stencil, itp. OpenGL: Bufory Bufor (miejsce w pami$ci) tworzony w CPU i przesy!ny do GPU. VBO (ang. Vertex Buffer Object) 1. utworzenie bufora z danymi o wierzcho!kach (po!o&enie, kolory, itp.) 2. utworzenie VBO (GL_ARRAY_BUFFER) (skopiowanie danych z CPU do GPU) 3. glbindbuffer() + gldrawarray() (mo&liwo%# podania offset'u) OpenGL ES: Embedded Systems OpenGL ES: 1.x i 2.x Standard obejmuj"cy wybrane funkcje OpenGL, przeznaczone do implementacji w urz"dzeniach o ograniczonych zasobach (urz"dzeniach przeno%nych). Uproszczone wersje standardów (usuni$to szereg funkcji). Mechanizmy!$czenia funkcji OpenGL ES z natywnym systemem operacyjnym. Wprowadzono dzia!anie na zmiennych sta!opozycyjnych (OpenGL ES 1.x). Programowalny potok graficzny (OpenGL ES 2.x). Coformance tests - testy zgodno%ci biblioteki ze standardem. 1.X - dwa profile zmiennych (fixed-point i mixed) 2.X - shader'y (OpenGL shading language), brak kompatybilnosci z 1.x OpenGL ES: Urz"dzenia http://www.glbenchmark.com OpenGL - GLUT (OpenGL Utility Toolkit) Biblioteka s!u&"ca do rysowania okien pod OpenGL em. Wieloplatformowo%#. Dost$pna jako open source. Funkcje: Wy%wietlanie okien, w których mo&e odbywa# si$ renderowanie realizowane przez OpenGL (mo&e by# otwarte wiele takich okien), Obs!uga zdarze' wej%cia/wyj%cia za pomoc" callback ów. Obs!uga urz"dze' wej%ciowych (np. klawiatura, mysz). Obs!uga timer ów. Pop-up menu. Generowanie biblioteki obiektów z!o&onych. Wspomaganie wczytywania bitmap i fontów bitmapowych. Zarzadzanie oknami. 2
OpenGL - Graficzne interfejsy u&ytkownika GLUI Biblioteka s!u%$ca do budowy interfejsów u%ytkownika pracuj$cych pod OpenGL (wymagana biblioteka GLUT). OpenGL - GLUI Procesory GPU (Graphics Processor Unit) Programowalny procesor pracuj"cy niezale&nie od CPU. Programowalne procesory GPU shader - program wykonywany na GPU (ang. Graphics Processor Unit) szybkie operacje macierzowe - architektura SIMD (w ograniczonym zakresie MIMD), zrównoleglenie oblicze& (wiele potoków renderuj$cych, stream programming), mog$ by' wykorzystane do innych oblicze& GPGPU (General Purpose GPU), szybszy rozwój ni% CPU (brak rozbudowanej logiki),!$czenie architektury GPU i CPU. Vertex shader Transformacje zwi$zane z wierzcho!ami: obliczenie po!o&enia, koloru, wektorów normalnych, wspó!rz$dnych tekstur. Fragment shader Transformacje zwi$zane z fragmentami: obliczanie koloru fragmentu, teksturowanie, obliczanie o%wietlenia (Phong shading), mg!a. Zastosowania: efekty zwi"zane z deformacjami kamer (lens effects) - obiektywy fisheye, itp., zginanie i skr$canie obiektów, lokalny ruch obiektów (falowanie wody, ruch ubrania, itp.), teselacja (ang. tesselation) trójk"tów po!"czona z animacj". Zastosowania: proceduralne teksturowanie, obliczanie tekstury z wykorzystaniem danych ze standardowych tekstur, mapowanie tekstur. 3
Fragment shader - przyk!ady Fragment shader - Phong shading (Cg) Programowanie shaderów J$zyki programowania: GLSL - OpenGL Shading Language, CG (nvidia) HLSL (Microsoft) CUDA - Compute Unified Device Architecture Technologia programowania algorytmów GPGPU (General Purpose GPU). Dost$pna na GPU nvidia, seria 8 i nowsze (GTX GPU). Stream processing - SIMD, zrównoleglenie. Programowanie wysokopoziomowe (program C + rozszerzenia). CUDA - Compute Unified Device Architecture OpenVG - Vector Graphics Acceleration Standard i API s!u%$ce do rysowania dwuwymiarowej grafiki wektorowej i rastrowej. Rysowanie wspomagane sprz$towo. Stadard unifikujacy zestaw funkcji (niezalezny od urzadzenia). Rysowanie tekstów. Wspomaganie dla Adobe Flash. Anty-aliasing. Zmniejszenie zu&ycia baterii poprzez wykorzystanie wspomagania sprz$towego. Podzia! zada' mi$dzy CPU i GPU niewodoczny dla u&ytkownika. Skalowalno%# (!atwo%# zmiany rozdzielczo%ci). Wspomaganie istniej"cych j$zyków (postscript, flash, itp.) 4
Open CL (Computation Library) Wykorzystanie do oblicze& ca!ych zasobów komputera (np. CPU i GPU równocze#nie). Dost$pny na wielu platformach. Interfejs API napisany w C. Kody (ród!owe programu przekacywane do OpenCL Runtime i dynamicznie kompilowane. Literatura 1. Tomas Moller, Eric Haines, Real-Time Rendering, A K Peters, ISBN 1-56881-101-2 2. NVIDIA Whitepapers http://partners.nvidia.com/developer,.introduction to Vertex Shaders. Introduction to Pixel Shaders. 3. OpenGL Programming Guide (The Red Book), http://fly.srk.fer.hr/~unreal/ theredbook/ OpenGL ES Specyfikacja objemuj"ca wybrane funkcje OpenGL, przeznaczone do implementacji w urz"dzeniach o ograniczonych zasobach (urz"dzeniach przeno%nych). 5