U ovom projektu ćemo se upoznati s načinom rada OpenGl-a na Apple-ovoj platformi OSX i potrebnom softveru za izvođenje OpenGl aplikacija na navedenom operacijskom sustavu.
OpenGL je ugrađen u operacijski sustav OSX. Mnoge aplikacije koje dolaze u paketu s operacijskim sustavom koriste upravo OpenGL za postizanje različitih vizualnih efekata. Jedna od takvih aplikacija je iChat koja koristi OpenGl za atraktivnu refleksiju video chata.
Sama činjenica da Apple u svojim aplikacijama koristi OpenGl govori o tome da je ta tehnologija u potpunosti podržana u OSX operacijskom sustavu.
OpenGl ima klijent-server arhitekturu. Aplikacija prilikom poziva OpenGL funkcije pristupa klijentu, a klijent te funkcije prosljeđuje serveru koji onda izvršava zadanu funkciju. Klijent i server mogu biti, ali najčešće nisu odvojena računala. Tip servera ili klijenta nije strogo definiran nego se razlikuje ovisno o implementaciji. Takva arhitektura olakšava paralelno izvođenje zadataka na procesoru i na grafičkoj kartici.
Još jedna od prednosti takve arhitekture je mogućnost asinkronog izvođenja instrukcija. Kada primi instrukciju, klijent je prosljeđuje serveru na izvršavanje i vraća kontrolu aplikaciji bez obzira na to da li je instrukcija do kraja izvršena ili ne. To omogućuje brži rad jer aplikacija ne mora čekati izvršenje svake instrukcije za nastavak rada. Bez obzira na mogućnost asinkronog rada, OpenGL jamči dobar redosljed operacija.
Operacijski sustav OSX klijentski dio rada prepušta procesoru (CPU), dok serverski dio rada dodjeljuje grafičkoj kartici. Uz takav uobičajeni scenarij, OSX omogućuje i renderiranje samo pomoću procesora.
U operacijskom sustavu OSX, OpenGl je razložen u slojeve što omogućuje da svaki zadatak bude izvršen na posebnoj grafičkoj kartici. To znači da se na više grafičkih kartica može spojiti više ekrana koji će prikazivati različite rendere. Postoji 5 slojeva: Hardware, Driver layer, Common OpenGl framework, Window system layer i Application.
Za operacijski sustav je specifičan Window system layer. U tom su sloju uključene OpenGl biblioteke: GL, GLU i GLUT. Common Open Gl je sučelje prema hardveru, dok Driver layer omogućuje uključivanje drivera za različite grafičke kartice.
Postoje dvije kategorije različitih sučelja za korištenje OpenGL-a: Specifične za OSX platformu (korištene u Cocoa aplikacijama) i standardne za OpenGL (korištene u GLUT aplikacijama).
Standardne GLUT aplikacije koriste GLUT library i OpenGL za crtanje direktno na ekran, dok Cocoa aplikacije koriste NSOpenGl library, CGL i OpenGl.
NSOpenGl library je biblioteka klasa koje su namijenjene isključivo OpenGl-u. Zadaci te biblioteke su kreiranje konteksta, upravljanje trenutnim kontekstom, upravljanje objektima za crtanje, pražnjenje spremnika za crtanje, rad s virtualnim ekranima, kreiranje tekstura, kreiranje GLContext objekata i rad s pixel bufferima. Core OpenGL API (CGL) implementira NSOpenGL klase i predstavlja najizravniju poveznicu sa sistemskim funkcionalnostima.
Način izvođenja OpenGl aplikacija na OSX-u je najbolje prikazati pomoću slike.
Vertex data su vektorski podaci, a Pixel data su rasterski podaci, odnosno pixeli. Per-vertex operacije su operacije nad vektorima (primjena transformacijskih matrica i svjetlosnih efekata). Per-pixel operacije su operacije nad pojedinim pikselima (zamućenje, izobličenje, promjena boja i sl.). Pixeli koji čine teksture se usmjeravaju u spremnik tekstura (texture assembly). Rasterizacija (Rasterisation) je transformiranje podataka u fragmente (elementi koji obuhvaćaju sve vrijednosti za piksele). Per-fragment operacije su operacije nad fragmentima poput primjene efekata, testiranja dubine i slično. Nakon procesuiranja fragmenti se spremaju u frame buffer.
Za izradu Cocoa aplikacije potrebno je preuzeti XCode toolset. Radi se o okruženju koje služi za razvoj aplikacija koje su namijenjene pokretanju na Apple-ovim platformama. Za korištenje XCode-a potrebno je imati Apple računalo i na njemu OSX operacijski sustav. Za rad s najnovijim XCode-om je potreban i najnoviji operacijski sustav.
XCode toolset sadrži sve alate koji su potrebni za izradu aplikacija na Apple platformama. Za izradu Cocoa OpenGL aplikacije su nam najzanimljiviji alati XCode i Interface Builder. XCode je editor u kojemu pišemo cijeli kod aplikacije. Ima vrlo specifično sučelje koje se razlikuje od većine drugih IDE-a pa njegovo korištenje u početku može biti dosta zbunjujuće.
U paketu dolazi i alat za dizajn korisničkog sučelja Interface Builder. Pomoću njega je moguće na vrlo jednostavan način dizajnirati korisničko sučelje aplikacije, ali kao i XCode, zahtjeva određeno navikavanje na princip rada. Povezivanje objekata korisničkog sučelja s klasama i metodama je izvedeno na potpuno drugačiji način nego u drugim alatima. Takav način nije lošiji, već možda i bolji i intuitivniji.
Za korištenje OpenGL-a potrebno je u projekt uključiti OpenGl framework. Da bismo koristili OpenGL prozor, trebamo kreirati klasu koja nasljeđuje NSOpenGlView. Kada je kreiramo, pronađemo je u Interface Builderu i jednostavno je prevučemo na formu. Sve što napišemo u toj klasi će se prikazivati na ekranu. Za korištenje kontola na formi potrebno je koristiti klasu GUI Control. U toj klasi se nalaze metode koje će se pozivati kada se koriste komande na formi. U klasu je još potrebno dodati i Outlet. On služi za osvježavanje sadržaja ekrana nakon izvršenja metode koja je pozvana aktiviranjem komande sa forme.
Prilikom izrade pokazne aplikacije bilo je problema oko uključivanja Depth Buffera. Iako je Depth Buffer bio pozvan unutar programskog koda, on jednostavno nije funkcionirao. Da bi se aktivirao Depth Buffer, na Interface Builderu je potrebno u izborniku Depth odabrati veličinu buffera.
OpenGL na OSX-u funkcionira vrlo dobro. Sama činjenica kako Apple u svojim aplikacijama često koristi OpenGL daje do znanja koliko Apple vodi računa i održava tu tehnologiju na svojim platformama. Uz standardne GLUT aplikacije, na OSX-u je uz pomoć njihovog razvojnog okruženja moguće izraditi vrlo efektne aplikacije korištenjem OpenGl-a.
Programeri koji su navikli na drugačija programska okruženja poput Visual Studia ili Eclipse-a mogu imati problema prilikom navikavanja na drugačiji način rada.
Bez obzira na to, Apple svojim developerima pruža kvalitetni toolkit za razvoj aplikacija koji je potpuno besplatan i sadrži sve alate koji su potrebni za rad s OpenGl, ali i drugim aplikacijama.
1. OpenGL Programming Guide for Mac, http://developer.apple.com
2. Cocoa tutorial 1: Window & OpenGL view, http://www.xphere.me/
3. NSOpenGLContext Class Reference, http://developer.apple.com