GLUT (2): výhody a nevýhody

6. 5. 2003
Doba čtení: 5 minut

Sdílet

V předchozím dílu jsme si popsali základní charakteristiku knihovny GLUT a důvody jejího vytvoření a používání. V dnešním dílu si stručně popíšeme výhody a nevýhody použití této knihovny v aplikacích, které mají být přenositelné na různé platformy a pro grafický výstup používají knihovnu OpenGL.

Výhody a nevýhody použití knihovny GLUT

Výhody

První velkou výhodou použití knihovny GLUT je možnost vytvoření platformově nezávislých aplikací na úrovni zdrojového kódu; překlad se samozřejmě musí při přechodu na jinou platformu provést. Tyto aplikace mohou pro svůj grafický výstup používat knihovnu OpenGL a základní prvky GUI. U aplikací ovládaných z příkazové řádky (command line) lze dosáhnout přenositelnosti poměrně jednoduše, protože lze využívat například funkce z knihoven odpovídajících normě POSIX. Tyto knihovny, spolu s dalšími utilitami (automake apod.) mohou zajistit systémovou nezávislost a přenositelnost zdrojových kódů aplikace.

U grafických aplikací možnost jednoduché tvorby přenositelných aplikací dlouhou dobu neexistovala. V podstatě na každou významnější platformu byla vyvinuta jedna nebo i více knihoven pro programování počítačové grafiky a tvorbu grafického uživatelského rozhraní. Zakládání oken a tvorba grafického uživatelského rozhraní (GUI) je v současné době buď programována přes aplikační rozhraní (API) daného operačního systému, nebo se používají více či méně multiplatformní knihovny, z nichž nejznámnější jsou například GTK, Qt, wxWindows, Motif, aux či tk [1] [2] [3] [4] [5].

Použitím těchto knihoven lze vytvořit přenositelnou aplikaci s vlastním GUI, ale většinou nelze uspokojivě vyřešit práci s OpenGL. Jednou z výjimek je knihovna Qt, ta však má na druhou stranu nemalé problémy s licencí (pro některé platformy je nutná registrace spojená s poplatky, také podpora OpenGL existuje na některých platformách pouze pro předplacenou verzi). Určitá podpora pro OpenGL existuje i v knihovně wxWindows, je však omezena pouze na objektově orientované jazyky (i když sama dobře objektově navržená není), což je pro některé projekty nevýhodné – například ještě dnes jsou některé matematické modely řešeny ve Fortranu. Pro objektové programování v jazyce C++ existuje rozšíření knihovny GLUT z C do C++, které se jmenuje GlutMaster. Bližší informace o tomto rozšíření najdete na [10].

Druhou výhodou knihovny GLUT je jednoduchost rozhraní (funkčních volání), kterou knihovna GLUT představuje [6] [7] [8]. Jak si ukážeme v dalších dílech, lze i poměrně složitý program napsat s pomocí knihovny GLUT velmi jednoduše. Většinu operací není v některých případech potřeba vůbec provádět, protože knihovna GLUT má implicitně nastavené rozumné (předpokládané) hodnoty, například počáteční velikost okna, nastavení framebufferu apod.

Třetí výhodou je podpora systémově nezávislého vykreslování bitmapových a vektorových znaků z několika znakových sad (i když s omezeními na znakovou sadu ASCII a ISO-8859–1) a možnost tvorby základních trojrozměrných těles, což se hodí hlavně při počátečním nastavování kamery, materiálů a osvětlení.

Nevýhody

Mezi nevýhody použití GLUTu patří už samotná nutnost vytvoření a používání nové vrstvy funkcí, která je vložena mezi aplikaci a platformově závislé knihovny či API. To s sebou přináší poněkud vyšší paměťové nároky. Volání funkcí operačního systému a grafického prostředí přes další funkční mezivrstvu se může projevit i na celkové rychlosti aplikace nebo době odezvy. Knihovna GLUT je však poměrně malá (řádově stovky kB, srovnejme s některými dalšími toolkity, jejichž velikost dosahuje až několika megabytů) a funkce poměrně jednoduché, takže tyto nevýhody nejsou pro většinu aplikací kritické.

Další, poněkud závažnější nevýhodou je to, že s použitím GLUTu ztrácí programátor možnost řízení celé aplikace na úrovni operačního systému. To znamená, že například smyčka zpráv použitá ve většině správců oken (Window managers) není pro programátora viditelná a nemá možnost ji nijak přímo ovlivnit, což se může projevit například v horším ovládání aplikace. Jedním z důsledků tohoto „zapouzdření“ je, že nelze jednoduše vytvořit modální dialogová okna nebo získávat zprávy od okolních aplikací.

Třetí nevýhodou je zatím malá podpora novějších periferních zařízení. Problematická je například podpora kolečka na myši, které se dnes stává již standardem a pro aplikace pracující s trojrozměrnou scénou je často s výhodou používáno. GLUT naopak podporuje taková vstupní zařízení, která se na dnešních typických počítačích téměř nepoužívají, například takzvaný spaceball nebo dial and button box. Existuje i rozšíření knihovny GLUT nazvané GameGLUT, ve kterém je zabudována mimo jiné i podpora pro herní zařízení, zejména pro různé druhy joysticků.

Poslední vážnou nevýhodou je nemožnost tvorby složitějších prvků grafického uživatelského rozhraní, jako jsou tlačítka, seznamy, výběrové boxy, editační pole, scrollbary apod. V knihovně GLUT je podporováno pouze vytváření samostatných oken, suboken, překryvných oken (overlay) a tvorba vyskakovacích (pop-up) menu, která mohou být svázána s některým tlačítkem na myši. Tato minimalistická koncepce sice vychází z nutnosti podporovat jen podmnožinu GUI prvků dostupných na všech platformách, nicméně pro složitější aplikace (z hlediska grafického uživatelského rozhraní, ne nutně funkčnosti) by bylo vhodné do knihovny doprogramovat i některé složitější prvky.

V dalším dílu si ukážeme, jakým způsobem lze pomocí příkazů GLUT vytvořit a zobrazit okna, do kterých je možné vykreslovat (renderovat) 2D a 3D tělesa pomocí příkazů OpenGL. Dále si ukážeme způsob tvorby suboken (tj. rozdělení jednoho okna na okna menší) a přepnutí zobrazení jednoho okna přes celý desktop (takzvaný režim full-screen).

Reference

[1] Phil Karlton: <i>OpenGL Graphics with the X Window System, Ver. 1.0</i>,

Silicon Graphics, April 30, 1993.

bitcoin_skoleni



[2] Kilgard, Mark J.: <i>OpenGL and X, Part 2: Using OpenGL with Xlib</i>,

The X Journal, SIGS Publications, January/February 1994.

[3] Kilgard, Mark J.: ''OpenGL and X, Part 3: Integrating OpenGL with Motif '',

The X Journal, SIGS Publications, July/August 1994.

[4] Kilgard, Mark J.: <i>An OpenGL Toolkit</i>,

The X Journal, SIGS Publications, November/December 1994.

[5] Kilgard, Mark J.: <i>Programming OpenGL for the X Window System</i>,

Addison-Wesley, ISBN 0–201–48359–9, 1996.

[6] Kolektiv autorů: <i>GLUT Page</i> (dokumentace ke knihovně GLUT)

www.opengl.or­g/developers/do­cumentation/glut­.html

 

[7] Kilgard, Mark, J.: <i>GLUT Specification</i> (specifikace GLUTu, existuje i PDF verze)

www.opengl.or­g/developers/do­cumentation/glut/spec­3/spec3.html

[8] Kolektiv autorů: <i>Frequently Asked GLUT Questions</i> (často kladené otázky o knihovně GLUT)

www.opengl.or­g/developers/do­cumentation/glut/glut­_faq.html

[9] Nate R.: <i>GLUT for Windows 32</i> (popis a download implementace knihovny GLUT pro operační systémy Microsoft Windows)

www.xmission.com/~na­te/glut.html

[10] Stetten George and Crawford Korin: <i>GlutMaster version 0.3</i> (objektové rozšíření knihovny GLUT pro práci s C++)

www.stetten.com/ge­orge/glutmaster/glut­master.html 

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.