.[ ČeskéHry.cz ].
GL_INVALID_ENUM v SwapBuffers ?
Jdi na stránku Předchozí  1, 2
 
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
kerekes



Založen: 29. 07. 2007
Příspěvky: 57

PříspěvekZaslal: 1. červenec 2011, 08:23:29    Předmět: Odpovědět s citátem

Eosie napsal:
OpenGL nejde používat z více vláken zároveň. Pro thread-safety je fakt lepší, aby správa okna i OpenGL běželo pod jedním vláknem (ono to stejně ani jinak funkční udělat nejde).


S tym si dovolim nesuhlasit. Da sa to len treba dat pozor aby:
1. v jednom case volalo gl volania len jedno vlakno.
2. aby tie volania tvorili logicke celky (tj aby vysledna seria gl volani z roznych threadov davala zmysel)
- priklad:
ak v jednom threade kde renderujes nejaku vec volas trebarz bindovanie textury (A), buffra (B), drawcall (C) ... a v tom ti medzi A a B strci druhy (napr streamovaci) thread upload textury, nedajboze vacsej tak to samozrejme crashne, ale ak to oddelis do celkov ktore sa nebudu navzajom bit tak to vpohode funguje

EDIT: beriem spat, na windows to takto jednoducho nefunguje
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 1. červenec 2011, 09:15:03    Předmět: Odpovědět s citátem

I kdyby to šlo, takový postup není využití více vláken Wink (musej na sebe pořád čekat).
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 1. červenec 2011, 12:39:06    Předmět: Odpovědět s citátem

Ono samozřejmě jde udělat rendering z více vláken, když máš více kontextů. Kontexty mohou sdílet buffery, textury a jiný věci, takže spolupráce je možná. glFlush se používá, pokud chceš, aby operace z jednoho kontextu viděl i druhý kontext. Např. když uděláš rendering do textury a nezavoláš glFlush, tak jiný kontext nemusí mít tu texturu aktualizovanou, protože ten renderovací příkaz ještě bude čekat ve frontě toho jednoho kontextu.

Předtím jsem ovšem měl na mysli vícevláknový rendering pouze s jedním kontextem, což samozřejmě nejde, protože jeden kontext se může používat pouze z jednoho vlákna.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
pcmaster



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

PříspěvekZaslal: 1. červenec 2011, 13:16:53    Předmět: Odpovědět s citátem

Ked sme uz pri tom, ako to vlastne funguje? Naspawnujem si vlakna, v kazdom si nainicializujem novy kontext, prepnem si v tom vlakne na svoj RC a potom mozem fakt "renderovat" paralelne? Tj posielat prikazy ako glDraw* v kazdom vlakne na iny kontext na tom istom HW zariadeni? Ako to ten driver potom serializuje? :O
_________________
Off-topic flame-war addict since the very beginning. Registered since Oct. 2003!
Interproductum fimi omne est.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1537
Bydliště: u Prahy

PříspěvekZaslal: 1. červenec 2011, 13:26:45    Předmět: Odpovědět s citátem

Asi podobně, jako když máš souběžně puštěné 2 OpenGL programy Wink.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Játro.m



Založen: 01. 02. 2010
Příspěvky: 230

PříspěvekZaslal: 1. červenec 2011, 14:02:25    Předmět: Odpovědět s citátem

rozběhla se tady zajímavá diskuze, problem solved, vytvářel jsem shader v sdíleným kontextu, to bylo celý proč to padalo. Jakmile jsem toto opravil tak zmizel invalid enum a jede to aji pod ATI. Diky za napady Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 1. červenec 2011, 14:21:23    Předmět: Odpovědět s citátem

pcmaster napsal:
Ked sme uz pri tom, ako to vlastne funguje? Naspawnujem si vlakna, v kazdom si nainicializujem novy kontext, prepnem si v tom vlakne na svoj RC a potom mozem fakt "renderovat" paralelne? Tj posielat prikazy ako glDraw* v kazdom vlakne na iny kontext na tom istom HW zariadeni? Ako to ten driver potom serializuje? :O


Každý kontext si cpe příkazy do fronty. Není to obyčejná fronta, je to spíš buffer příkazů pro GPU v určitém GPU-specific formátu (tzn. jsou tam nějaké pakety), který GPU postupně parsuje a podle toho to vykonává.

Paralelismus je tam v tom, že ta fronta příkazů se plní paralelně (každý kontext má vlastní frontu), ale GPU se předávají za sebou podle pořadí volání glFlush. Pokud glFlush nevoláte, tak se volá automaticky, když je fronta plná. To glFlush ti tam dává možnost určité synchronizace.
_________________
AMD Open Source Graphics Driver Developer
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
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
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