Koji su najbolji savjeti za OpenGL® performanse?

Nakon što je program napisan, često može potrajati isto toliko vremena za optimizaciju koda i podatkovnih datoteka kao i za pisanje koda na prvom mjestu. To je osobito istinito kada se pokušava poboljšati OpenGL® performanse. Mnogi čimbenici mogu utjecati na performanse, od veličine i formata datoteka teksture do količine geometrije u sceni, do opcija renderiranja koje se koriste tijekom rasterizacije. Zapravo dodavanje koda može ubrzati rad programa ako je taj kod namijenjen otkrivanju i izbjegavanju posebnih funkcija koje grafička kartica ne podržava. Dobre prakse programiranja i razumijevanje uobičajenih uskih grla u izvedbi OpenGL® mogu uvelike doprinijeti poboljšanju brzine i kvalitete OpenGL® aplikacije.

Jedno područje u kojem se mogu postići velika poboljšanja performansi OpenGL® je unutar strukture podataka same aplikacije. OpenGL® scene i animacija obično zahtijevaju veliku količinu podatkovnih stabala, podatkovnih struktura i nizova. Korištenje struktura spremnika i algoritama pretraživanja koji koriste najmanje moguće vrijeme, a i dalje ispunjavaju potrebe aplikacije, može ubrzati brzinu obrade podataka i premještanja u grafičku procesorsku jedinicu (GPU) za prikaz. Razumijevanje kako OpenGL® zahtijeva formatiranje podataka također može pomoći, jer bi se mogle dogoditi neke optimizacije vremena prevođenja ovisno o jeziku koji se koristi.

Datoteke tekstura uobičajeno su područje u kojem se mogu poboljšati performanse OpenGL®. Ove slikovne datoteke trebale bi imati dimenzije u pikselima koje su samo stupnjeve dvojke, čak i ako to hardver ne zahtijeva. Također ih treba optimizirati unutar uređivača slika kako bi bili što manji. Općenito, animirani ili pokretni objekti ne trebaju teksture koje su toliko detaljne kao objekti koji ostaju mirni. Korištenje najmanjih mogućih tekstura bez žrtvovanja previše kvalitete može uvelike povećati brzinu kadrova.

Jedna uobičajena zamka, posebno za nove programere ili umjetnike, je korištenje previše geometrije. Postoji niz trikova koji mogu pomoći da se smanji broj poligona u modelu bez žrtvovanja detalja. Jedna česta pogreška je korištenje geometrije modela za predstavljanje detalja koji se mogu mnogo učinkovitije prikazati na slici teksture. Većina modela je zapravo vrlo jednostavna, a složene značajke su stvarno implementirane pomoću mapa bumpova, normala i mapiranja tekstura. Pojednostavljeni, optimizirani modeli povećat će performanse OpenGL® smanjenjem broja izračuna koje je potrebno izvesti na svakom vrhu.

Za neke aplikacije može biti korisno programirati za najmanji zajednički nazivnik kada je u pitanju hardver. Neke vrhunske grafičke kartice implementiraju OpenGL® značajke koje su nevjerojatno uzbudljive, ali ih većina drugih kartica ne podržava. Korištenjem nekoliko proširenja i oslanjanjem na hardversko ubrzanje samo za osnovne zadatke, OpenGL® performanse mogu se poboljšati u gotovo svim sustavima, sprječavajući situacije u kojima određena linija grafičkih kartica nije u stanju postići prihvatljivu brzinu kadrova.

Softver za profiliranje također je vrlo važan kada se pokušava poboljšati OpenGL® performanse. Profiler će mjeriti koliko je vremena potrebno za izvršavanje svake linije koda, svake funkcije i svake operacije unutar programa. Ovo može biti nevjerojatno učinkovit način za prepoznavanje lokacije uskog grla. Ako određena funkcija traje dulje od drugih, tada se može ciljati na optimizaciju. To ponekad može dovesti do opsežnog ponovnog pisanja određenih segmenata koda, ali, u konačnici, može stvoriti program koji radi što je moguće glatko.