.[ ČeskéHry.cz ].
glBegin - glVertex - glEnd :: funkce

 
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
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 16. červenec 2009, 17:51:12    Předmět: glBegin - glVertex - glEnd :: funkce Odpovědět s citátem

Zdravím,

otázka je jednoduchá,
co se přesně děje, když volám glBegin, pak nějaké vertexy a nakonec glEnd...
Myslím to tak, co přesně provádí procesor, jak to vypadá s pamětí a co se děje s grafickou kartou...

Dopředu upozorňuji, že mě nezajímá to, že je glBegin-glEnd neefektivní a že je lepší použít VA, popř. VBO apod... to vím i bez toho aby mi to pořád někdo opakoval...jak říkám, zaměřte se především na zodpovězení otázky...

Moc děkuji...

PS: Prosím zdržte se OT...forum je toho plné... Wink
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
michalferko



Založen: 29. 09. 2008
Příspěvky: 83

PříspěvekZaslal: 16. červenec 2009, 18:21:43    Předmět: Odpovědět s citátem

povedal by som ze to je ine pre kazdu implementaciu. Ale tak hadam sa iba zapisuju do interneho bufferu v pamati hodnoty a pri glEnd sa jednym supom poslu na grafiku. Google by mozno vedel odpovedat na urcite implementacie
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ladik-BigBoss



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

PříspěvekZaslal: 17. červenec 2009, 04:14:36    Předmět: Odpovědět s citátem

ano, zalezi na implementaci. rozhodne se ale nemusi cekat na glEnd. to jenom rika, ze se muze pak dalsim glBegin zmenit druh primitiv a ze se muzou menit veci, ktere se mezi glBegin a glEnd menit nesmeji.
S transformaci vertexu se muze zacit hned po kazdem vertexu. S rasterizaci jakmile byl zadan dostatecny pocet vertexu. Takze u jednotlivych trojuhelniku se muze rasterizovat po kazdych 3.

Pokud ma GK volne jednotky muze se proces paralelizovat. Ale inicializace jednotek probiha sekvencne.

Asi nejvetsi nevyhoda je vysoke zatizeni CPU instrukcemi CALL, kdy se kopiruji na zasobnik parametry, aby se v zapeti vyprazdnil...
Kdyz jsem s tim delal nejake pokusy od 5 tisic trojuhelniku bylo CPU tak zahlcene, ze GK nemela absolutne co delat, ted by cisla byla trochu jina, ale trend odpovida.

Takze se tam nedeje zadna magie, trochu optimalizace muze byt pri pouziti s display listy.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 17. červenec 2009, 08:31:13    Předmět: Odpovědět s citátem

s display listy spíš trochu hodně optimalizace (VODO promiň za OT), vypozoroval sem, že se DL chová většinou stejně rychle jako VB
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
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: 17. červenec 2009, 10:29:56    Předmět: Odpovědět s citátem

Viděl jsem testy, kde VBO bylo rychlejší než DL (u NVIDIA), asi se to liší případ od případu. Šlo by také udělat testy, které se budou chovat opačně...

Teď k tématu. Ladik to vesměs shrnul. Jeden z podstatných faktů je, že vertexy se odesílají na GK ve větších dávkách. PCIe pakety musí mít nějakou minimální velikost, aby se linka využila. Rozhodně nejde posílat data na GPU po třech vertexech bez velkých ztrát na propustnosti. Stejně tak grafika nedokáže zpracovávat data po třech vertexech, protože dalších X stream procesorů poběží naprázdno (nelze je tedy použít na nic jiného). GPU se začíná v praxi rozumně využívat při několika tisících vertexech na dávku, tam ale už končí propustnost glBegin/glEnd.

glBegin/glEnd i vertex arrays bez VBO musí používat pomocný buffer pro přenos na GPU, který je ale alokovaný v neodswapovatelné/nepřesunutelné paměti (takhle se musí posílat na GPU všechno), takže glBegin/glEnd není jediný, kdo tímto trpí. Jediný způsob, jak získat přímý přístup do tohoto bufferu, je glMapBuffer/glMapBufferRange.

V Mesa/DRI ani v Mesa/Gallium se glBegin/glEnd moc neoptimalizuje, protože to údajně nemá smysl.
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 16. srpen 2009, 10:42:59    Předmět: Odpovědět s citátem

I když jsem vás na začátku prosil o vynechání OT, sám to poruším...i když trochu to k tématu pořád patří...
Někde jsem četl (Eosie Wink ), že se od DL upouští...
To by znamenalo, že kdybych teď chtěl urychlit vykreslování opakujících se statických objektů přes DL a pustil to na modernějších kartách, které už podporu DL nemají, tak to jednoduše nebude fungovat?
Takže...má cenu se do DL ještě pouštět?
No a co VA, jak jsem pochopil, má to stejná omezení jako glBegin/glEnd...jen s tím, že se volá jen jedna funkce(což to zrychlí)...

Já stále přemýšlím, jak toho vykreslovat více, ale vždy když přistoupím na něco nového, tak zjišťuji, že to má ke spoustě výhodám také spoustu nevýhod...
Proto jsem také založil toto téma...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frca



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

PříspěvekZaslal: 16. srpen 2009, 12:15:09    Předmět: Odpovědět s citátem

Vertex arrays+VBO. To je správná cesta. Ale on to tady Eosie už přece psal, ne?
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Tringi



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

PříspěvekZaslal: 16. srpen 2009, 14:23:24    Předmět: Odpovědět s citátem

VODA napsal:
To by znamenalo, že kdybych teď chtěl urychlit vykreslování opakujících se statických objektů přes DL a pustil to na modernějších kartách, které už podporu DL nemají, tak to jednoduše nebude fungovat?

Nesmysl, fungovat to bude, pakliže explicitně nenastavíš OpenGL profil, který display listy zahazuje. Já nevidím důvod upouštět od display listů.
_________________
WWW | GitHub | TW
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



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

PříspěvekZaslal: 16. srpen 2009, 15:46:13    Předmět: Odpovědět s citátem

Deprecated? Že by tohle byl ten důvod, proč opustit DL? Stejně se hodí jenom na statické modely, takže proč prostě nepoužít VBO?
_________________
www.FRANTICWARE.com
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



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

PříspěvekZaslal: 16. srpen 2009, 20:07:34    Předmět: Odpovědět s citátem

VODA napsal:
Takže...má cenu se do DL ještě pouštět?

Pro pohodlí jsou DL ok, ještě mnoho let to tu bude. Všichni výrobci to dnes podporují (jak efektivně, těžko soudit). Z definice snad žádné karty v historii neměly HW podporu DL, to by musely na hardwarové úrovni implementovat kompletní OpenGL state machine, což je blbost. Typicky se DL rozdělí na části (změna stavů, kreslení geometrie)^*, pokud to jde (pokud to nejde, tak to bude pomalé). DL je vhodné jak na geometrii, tak jako stavové objekty.

GL2.1 a starší, vše při starém.
GL3.0 nic neodstraňuje, jenom označuje věci jako deprecated, tzn. vše při starém.
GL3.1 odstraňuje většinu z deprecated, ale extenze ARB_compatibility je vrací zpět (forward compatibility kontext by měl potlačit zpřístupnění této extenze).
GL3.2 podporuje volitelný Compatibility profil, který úplně všechno vrací zpět (lepší než to mít jako extenzi).

V kuloárech se šušká, že by se DL mohly vrátit v nové lepší formě a s podporou multithreadingu.
_________________
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
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