.[ ČeskéHry.cz ].
Opengl GUI knihovna

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
TeaTime



Založen: 17. 06. 2011
Příspěvky: 264

PříspěvekZaslal: 1. srpen 2013, 17:16:47    Předmět: Opengl GUI knihovna Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Houp



Založen: 28. 07. 2007
Příspěvky: 672

PříspěvekZaslal: 1. srpen 2013, 20:25:16    Předmět: Odpovědět s citátem

A co Qt?
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
TeaTime



Založen: 17. 06. 2011
Příspěvky: 264

PříspěvekZaslal: 1. srpen 2013, 22:11:16    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 2. srpen 2013, 00:24:35    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1051

PříspěvekZaslal: 2. srpen 2013, 07:11:26    Předmět: Odpovědět s citátem

Qt dovoluje vykreslovat do normalne widgety do OpenGL widgetu. ale pochybujem ze by slo to nejak rozumne skombinovat s glut. to uz skor pouzit na vsetko Qt. http://www.youtube.com/watch?v=TLbO73oQaeU http://doc.qt.digia.com/qq/qq26-openglcanvas.html
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



Založen: 17. 06. 2011
Příspěvky: 264

PříspěvekZaslal: 2. srpen 2013, 23:03:25    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 3. srpen 2013, 00:40:56    Předmět: Odpovědět s citátem

Ř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
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
Lemik



Založen: 30. 07. 2007
Příspěvky: 138

PříspěvekZaslal: 3. srpen 2013, 13:28:25    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



Založen: 17. 06. 2011
Příspěvky: 264

PříspěvekZaslal: 7. prosinec 2013, 15:28:10    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 7. prosinec 2013, 18:00:08    Předmět: Re: Opengl GUI knihovna Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



Založen: 17. 06. 2011
Příspěvky: 264

PříspěvekZaslal: 7. prosinec 2013, 22:13:20    Předmět: Re: Opengl GUI knihovna Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna