Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 1. srpen 2013, 17:16:47 Předmět: Opengl GUI knihovna |
|
|
Sháním se po knihovně pro vykreslování GUI do her. Potřebuji, aby byla multiplatformní (minimálně GNU/Linux a Windows) a fungovala s C++ aplikací vykreslující přes OpenGL/freeglut. Jde mi hlavně o vykreslování herního menu, takže hlavní je možnost nastavovat každé instanci prvku GUI vlastní vzhled (každé tlačítko může vypadat jinak), dále bych využil možnost definovat části GUI (prvky, jejich pozice, velikost, vzhled) pomocí nějakého textového souboru (třeba nějakého XML), ale není to podmínkou, to si můžu doprogramovat sám. No a mělo by to být jednoduché a v ideálním případě s co nejméně závislostmi. Jo a knihovna musí být zdarma, výrazně preferuji open-source knihovny.
Jako dostačující se mi zdála knihovna http://code.google.com/p/begui/, dokud se neukázalo, že řeči o multiplatformnosti jsou prachsprostá lež.
Projížděl jsem toto vlákno: http://gamedev.stackexchange.com/questions/3617/good-gui-for-opengl, ale knihovny mě moc nezaujaly. Teď zkouším
http://sourceforge.net/projects/gigi/, ale moc se mi to nezdá. To aby člověk všechny ty knihovny zkompiloval a vyzkoušel, když se o nich chce něco dozvědět.
Nemáte s něčím podobným zkušenosti? Děkuji. |
|
Návrat nahoru |
|
 |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 1. srpen 2013, 20:25:16 Předmět: |
|
|
A co Qt? _________________
 |
|
Návrat nahoru |
|
 |
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 1. srpen 2013, 22:11:16 Předmět: |
|
|
Nevím bohužel o žádném jednoduchém způsobu, jak vykreslovat Qt prvky ve freeglut okně nad scénou hry. Navíc si nemyslím, že by Qt excelovalo ve většině mých dalších požadavků. |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 2. srpen 2013, 00:24:35 Předmět: |
|
|
Gtk ani Qt ti nedovolí vykreslit prvky dovnitř do "opengl" widgetu (tj. např. GtkDrawArea do kterého swapuješ backbuffer z OpenGL) - principielně Gtk by muselo kreslit své widgety do toho backbufferu (a to neumí).
Máš pár možností: buď mít widgety položené na panelu vedle (což je super pro editory, nicméně pro hru to není moc šikovné), nebo to řešit přes dialogová okna (přestylovat je lze imho dostatečně).
Další řešení je to, které jsem zvolil já, nicméně je poněkud zdlouhavé - napsat si vlastní GUI uvnitř OpenGL. Samozřejmě na plnohodnotném GUI jsem strávil DOST času, takže jestli na to spěcháš, asi to nebude ideální (pozn. já to GUI vůbec nepsal pro hru, ale pro aplikaci, kde OpenGL gui bylo prioritou). _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1051
|
|
Návrat nahoru |
|
 |
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 2. srpen 2013, 23:03:25 Předmět: |
|
|
Já nevím, to si to všichni píšete vlastní? Nechce se mi věřit, že zrovna takhle 'běžná' věc není nějak 'vyřešená'. |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 3. srpen 2013, 00:40:56 Předmět: |
|
|
Řekl bych že dost her má vlastní GUI (např. pokud vím, tak Id Tech engine v některých verzích ho určitě měl), hodně se používá CEGUI (Crazy Eddie's GUI).
Já se pro vlastní rozhodl, protože jsem potřeboval multi-platformní řešení (Linux, FreeBSD, OpenBSD, později Windows podporu), a to vše uvnitř OpenGL viewportu (a vzhledem k tomu že můj kód nepoužíval Gtk, ale běžel přímo na X11, resp. u Woken přímo volal WinApi funkce - tak napsat vlastní mi přišlo jednodušší, než se tam pokoušet nějak rvát třeba Gtk).
Jednoduché a hodně populární ve své době bylo IMGUI http://sol.gfxile.net/imgui/. Které ale např. pro mé účely příliš nestrukturované.
Strukturovanější bylo něco takového http://openglgui.sourceforge.net/gui_tut1.html.
Samozřejmě z kompletních ready-to-use toolkitů jsem já v životě použil jen CEGUI - http://www.cegui.org.uk/wiki/index.php/Main_Page, nicméně mě osobně se příliš nelíbil, takže asi nedoporučuji. Co jsem slyšel, tak autor Garrys modu má https://github.com/garrynewman/GWEN, který by možná mohl být použitelný. Ale nevím jak to má s multi-platformností nebo použitelností. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
Lemik
Založen: 30. 07. 2007 Příspěvky: 138
|
Zaslal: 3. srpen 2013, 13:28:25 Předmět: |
|
|
Popřípadě je tu i libRocket, ten to řeší čistě pomocí OpenGL. Formát co používá je HTML a CSS2.
Požaduje "akorát" interface k načítání souborů (třeba fread() ), načítání textur a vykreslování, a implementaci GetElapsedTime(). Já osobně používám SFML, s jehož pomocí vykresluji a řeším ten čas.
Co se mi na libRocket moc nelíbí, je že nepoužil (autor) managed pointer, ale reference counting, kdy Ti vrátí pointer, a Ty musíš hlídat, jestli jsi owner a podle toho nakonec zavolat ->RemoveReference(). Něco co by unique_ptr/shared_ptr vyřešil mnohem pohodlněji.
Docela dobré plus je Debugger, kterým můžeš prohlédnout všechny prvky na obrazovce, jejich strukturu apod. a log.
Jen nevím, jestli to není zbytečný overkill jen pro jednoduché menu... |
|
Návrat nahoru |
|
 |
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 7. prosinec 2013, 15:28:10 Předmět: |
|
|
Jak jsem to nakonec vyřešil?
Zvolil jsem CEGUI. Původně jsem vybral GiGi, ale než jsem se k tomu dostal, tak byla GiGi začleněna do mateřského projektu FreeOrion a samostatný vývoj GiGi byl ukončen.
Tak jsem se rozhodl, že půjdu do CEGUI, protože se hodně používá.
Zatím mám napsaný pouze kód pro integraci s mým enginem, takže jsem se do teď zabýval spíše low-level věcmi jako input injecting, render stack a podobně.
Zklamalo mě: v jednom procesu není možné používat více OpenGL contextů najednou. Lze ale pravděpodobně používat více oken, která sdílejí context. Ještě jsem to nezkoušel, ale očekávám, že se při tom objeví pár menších a řešitelných komplikací. Takže tohle nakonec zas tak nevadí, protože se to dá řešit. Dále jsem nenarazil na žádnou žásadní díru v návrhu knihovny.
Potěšilo mě: Relativně jednoduché na používání. Je vidět, že to vývíjí lidé, kteří to používají, takže občas narazím na věci, které mi příjemně ulehčí práci (například relativní rozměry a pozice prvků GUI).
Paleta fičůr je široká, lze používat rozmanitou množinu gui elementů a možnosti skinování jsou rozsáhlé. Skinování není příliš obtížné na pochopení (není to sice úplně triviální, ale poměr 'cena/výkon' za naučení se jak se to skinuje je skvělý).
Implementace do mého kódu byla hodně jednoduchá v porovnání s jinými knihovnami, které jsem zkoušel. Když nepočítám čas, který jsem strávil snahou rozjet to ve více OpenGL contextech (viz výše), tak byla implementace do enginu hodně rychlá. |
|
Návrat nahoru |
|
 |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 7. prosinec 2013, 18:00:08 Předmět: Re: Opengl GUI knihovna |
|
|
TeaTime napsal: |
Jako dostačující se mi zdála knihovna http://code.google.com/p/begui/, dokud se neukázalo, že řeči o multiplatformnosti jsou prachsprostá lež. |
v rychlosti jsem ji zkouknul a nevidim jako velky problem ji naportovat pro linux nebo osx.
Nikde jsem nenasel ty "řeči o multiplatformnosti" - kde je to psano? Nebo je to jen hloupe obvineni z neznalosti?
edit: a dale pises ze "Původně jsem vybral GiGi, ale než jsem se k tomu dostal, tak byla GiGi začleněna do mateřského projektu FreeOrion a samostatný vývoj GiGi byl ukončen."
to je sice mozne ale proc jsi nejdriv zkousel beGUI ktere ma posledni zmenu v Dec 12, 2010 (a za cely rok 2010 vlastne jen 2 drobnosti) a GiGi ma posledni commit 2011-12-15 (a cely rok 2011 je projekt dost zivy). Tvoje logika vyberu a argumentace kriterii si protireci. |
|
Návrat nahoru |
|
 |
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 7. prosinec 2013, 22:13:20 Předmět: Re: Opengl GUI knihovna |
|
|
quas4: ehh, takže teď se tu mám obhajovat za to co jsem napsal? Řeknu to takhle: je mi jedno jestli je pravda to co jsem napsal nebo jestli byla metodika výběru správná a spravedlivá.
U toho begui jsem se asi fakt spletl. Možná jsem to viděl v nějakém seznamu cross-platform knihoven. Nebo mě prostě zmátlo použití termínu 'cross-platform' na hlavní stránce projektu.
Nehodlám se hrabat v cizím kódu a portovat ho kamkoliv.
To s těmi daty posledních commitů je sice zajímavý postřeh, ale nepřesvědčil jsi mě o tom, abych jakkoliv změnil názor na výběr gui knihovny. A jestli jsi tím chtěl sdělit něco jiného, tak mě to nezajímá. |
|
Návrat nahoru |
|
 |
|