.[ ČeskéHry.cz ].
OpenGL :: FBO :: Scissor testy
Jdi na stránku 1, 2  Další
 
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: 5. červenec 2012, 22:23:39    Předmět: OpenGL :: FBO :: Scissor testy Odpovědět s citátem

Zdravím, chtěl jsem se s vámi podělit o zajímavý bug, kterého jsem si všiml (už když jsem dělal na bakalářce, teď mě to ale teprv začalo s*át), tedy jen na GMA X3100. Týká se renderování do FBO. Když mám více FBO, každý má jiné rozměry a renderuji je za sebou v jednom průchodu, některé části FBO se nemažou když volám glClear...
Myslel jsem, že je to bug driveru pro GMA, ale nakonec se ukázalo, že z mně neznámého důvodu jsou pro attachmenty FBO zapnuté scissor testy... Nedokáži si to logicky vysvětlit, ale stačilo pomocí glDrawBuffer zvolit GL_COLOR_ATTACHMENT0 (což také nechápu, když v dokumentaci není ani zmíňka, že by se dala do této funkce tato hodnota vecpat) a pak vypnout scissor test. Confused

Na jiných grafikách mi to nedělalo, pouze na tom integrovaným shitu...problém sice vyřešen, ale nechápu to... Wink
_________________
Opravdovost se pojí s trýzní...
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: 5. červenec 2012, 23:29:49    Předmět: Odpovědět s citátem

Tak problém není vyřešen...

Je to nějaké zku*vené...u jednoho fbo to se to spraví a u druhého se to posere...omg...
A hlavně vůbec nechápu, proč to ovlivňuje zrovna scissor test... Question Exclamation

EDIT: Doufám, že poslední příspěvek v tomto vlákně není pravdivý... Crying or Very sad
_________________
Opravdovost se pojí s trýzní...
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: 6. červenec 2012, 07:47:36    Předmět: Odpovědět s citátem

Opravdu zajímavé, vypadá to na chybu driveru pro intelácké grafiky. Celou noc jsem pokusoval a zjistil jsem, že když mám připojený FBO a vypnuté scissor testy (což je normální), glClear nevyplní celou oblast (není to problém viewportu, normálně se vše vyrenderuje, ale už se to nesmaže). Zatím jsem to vyřešil tak, že při aktivaci FBO a změně viewportu na velikost FBO textur zapnu scissor test a nastavím ho stejně jako viewport, když končím s kreslením do FBO, vypnu scissor test. Jako zázrakem to začalo fungovat, uvidíme co se stane, když těch framebufferů přidám více...

Intel mě jebe, když jsem stejný program, který u mě nefungoval správně, zkoušel na NVIDIA kartě, tak žádný problémů, na bráchově ATI, žádný problémů, dokonce i na jeho druhé integrované intel grafice nebyl žádný problém (on používá Windows 7, já XP, drivery pro XP jsou pravděpodobně žalostně nakóděné)...

Ach jo...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 6. červenec 2012, 07:54:08    Předmět: Odpovědět s citátem

Intel+OpenGL+Windows nejde dokopy. na Linuxe maju omnoho lepsie ovladace. napr taky Minecraft bezi casto aj s dvojnasobnymi FPS oproti Win.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
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: 6. červenec 2012, 08:43:23    Předmět: Odpovědět s citátem

Uvidíme co to udělá až aplikaci enginu budu kompilovat pro Linux...také předpokládám, že tam nebude žádný problém...

Je pravda, že na Ubuntách mi najednou karta začala podporovat extensiony, které ve Windows sice jsou také údajně podporovány, ale vždy mi to při inicializaci vrátilo chybný pointer na funkci a celá aplikace šla do kytek (viz. UFO: Aftershock, Afterlight - wglChoosePixelFormatARB)...
_________________
Opravdovost se pojí s trýzní...
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: 6. červenec 2012, 11:38:56    Předmět: Odpovědět s citátem

nou napsal:
Intel+OpenGL+Windows nejde dokopy. na Linuxe maju omnoho lepsie ovladace. napr taky Minecraft bezi casto aj s dvojnasobnymi FPS oproti Win.

Linux driver je možná lepší z hlediska podpory extenzí a korektnosti implementace, ale zatím to stále vypadá, že Windows driver je častěji rychlejší.
_________________
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: 6. červenec 2012, 16:50:27    Předmět: Odpovědět s citátem

VODA napsal:
Opravdu zajímavé, vypadá to na chybu driveru pro intelácké grafiky. Celou noc jsem pokusoval a zjistil jsem, že když mám připojený FBO a vypnuté scissor testy (což je normální), glClear nevyplní celou oblast (není to problém viewportu, normálně se vše vyrenderuje, ale už se to nesmaže). Zatím jsem to vyřešil tak, že při aktivaci FBO a změně viewportu na velikost FBO textur zapnu scissor test a nastavím ho stejně jako viewport, když končím s kreslením do FBO, vypnu scissor test. Jako zázrakem to začalo fungovat, uvidíme co se stane, když těch framebufferů přidám více...

Ne, tak jsem to nevyřešil...když tam mám více FBO, je to v pohodě, jakmile tam mám jen jeden, tak to dělá to, co to dělalo, když jsem jich tam měl více před tím, než jsem se to pokusil fixnout... Evil or Very Mad
_________________
Opravdovost se pojí s trýzní...
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: 6. červenec 2012, 17:53:38    Předmět: Odpovědět s citátem

Takže, napsal jsem si vlastní "mazací" funkci, protože jak to tak vypadá, problém je v glClear a začalo vše fungovat...
A jako vedlejší efekt se mi zvedlo FPS cca o 30 snímků (do každého fbo kreslím model Zoji).

Sice jsme si na nedávném srazu dělali srandu (ze mě), jestli si náhodou nebudu implementovat vlastní renderovací API...pokud mě intel bude takhle srát, asi se pustím do vývoje vlastních driverů. Rolling Eyes Laughing

EDIT:
Abyste neřekli, dám sem mojí mazací verzi...myslím, že by to vymyslel leckdo, ale třeba se to někomu bude hodit...

Místo volání glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) použiji toto:
kód:
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_ALWAYS);

glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0, 1.0, 1.0, 0.0, -1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();

glColor4f(clearColorValues[0], clearColorValues[1], clearColorValues[2], clearColorValues[3]);
glRectf(0.0f, 0.0f, 1.0f, 1.0f);

glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glDepthFunc(GL_LESS);


Dalo by se to pochopitelně napsat rozumněji, ale měření dávají jasné výsledky a rychlost je lepší než u glClear...
_________________
Opravdovost se pojí s trýzní...


Naposledy upravil VODA dne 6. červenec 2012, 19:01:51, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 6. červenec 2012, 18:23:46    Předmět: Odpovědět s citátem

myslim ze je vidno ake zle su tie ovladace ak je takyto manualny glClear() rychlejsi ako normalny. len takmimochodom aky vplyv to ma na ATI/nVidia kartach?
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
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: 6. červenec 2012, 18:31:02    Předmět: Odpovědět s citátem

Chystám se to změřit. Dám sem výsledky, až brácha dopaří Diablo 3. Wink
_________________
Opravdovost se pojí s trýzní...
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: 6. červenec 2012, 19:00:50    Předmět: Odpovědět s citátem

Takže, dostal jsem se ke dvěma NVIDIA kartám, ATI zkusím později, až se naskytne příležitost.

Takové malé srovnání na jedné stejné scéně (průměrné hodnoty):

Intel GMA X3100 - glClear: 130 FPS, vlastní: 156 FPS
NVIDIA GeForce 5500FX - glClear: 60 FPS, vlastní: 60 FPS
NVIDIA GeForce GT 630M - glClear: 254 FPS, vlastní: 250 FPS

Pokud to opravdu funguje správně (testoval jsem to na všech možných stavech, kde mi to dělalo chyby), tak jsem jasně zvítězil. Na Intel kartách to pojede rychleji a na zbytku nebude rozdíl skoro znát. Popř. dám do konfigu možnost vybrat si, zda-li použít "native" verzi nebo "safe" verzi mazání bufferů...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 9. červenec 2012, 09:30:17    Předmět: Odpovědět s citátem

OT: Už to tu na fóru zaznělo mnohokrát, ale připomenu: zvykni si měřit čas v nějakých časových jednotkách, milisekundách. Je to mnohem lepší, než 1/T, uvidíš :-).
A vůbec šikovná věc je, napsat si nějaký malý, snadno použitelný timer, který hodíš před měřenou funkci (cyklus) a on se už v konstruktoru inicializuje aktuálním časem a za funkcí použiješ nějakou metodu timer.logResult(), která zdokumentuje, jak dlouho ta funkce trvala. Je to trapně jednoduchý, ale dost šikovný. Pro měření rychlosti OpenGL funkcí, sem používal verzi, která volala před měřením a před logResult funkci glFinish - ale výsledky můžou bejt zavádějící.
_________________
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
VODA



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

PříspěvekZaslal: 9. červenec 2012, 10:26:00    Předmět: Odpovědět s citátem

]semo[ napsal:
OT: Už to tu na fóru zaznělo mnohokrát, ale připomenu: zvykni si měřit čas v nějakých časových jednotkách, milisekundách. Je to mnohem lepší, než 1/T, uvidíš Smile.
A vůbec šikovná věc je, napsat si nějaký malý, snadno použitelný timer, který hodíš před měřenou funkci (cyklus) a on se už v konstruktoru inicializuje aktuálním časem a za funkcí použiješ nějakou metodu timer.logResult(), která zdokumentuje, jak dlouho ta funkce trvala. Je to trapně jednoduchý, ale dost šikovný. Pro měření rychlosti OpenGL funkcí, sem používal verzi, která volala před měřením a před logResult funkci glFinish - ale výsledky můžou bejt zavádějící.

Když jsem psal ty výsledky, napadlo mě, že se ozveš (už jsme na toto téma jednou vedli řeč). Very Happy
Máš pravdu, že by uvádění času v ms bylo lepší, ale já chtěl jen naznačit, že na no-intel kartách není vidět téměř žádný rozdíl a na intel kartách to hodně pomůže...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
if.then



Založen: 13. 04. 2008
Příspěvky: 579

PříspěvekZaslal: 9. červenec 2012, 12:28:41    Předmět: Odpovědět s citátem

Musím uznat, že není špatné zrychlení o 1.28 milisekundy pouhým nahrazením glClear. Ale jestli je o tolik rychlejší udělat změnu depth testu a matic, vyrenderovat jeden polygon a zase to dát do původního stavu oproti vymazání framebufferu na grafickém čipu, tak to o GMA a jeho driverech dost vypovídá Smile

Každopádně je dobře, že je podporuješ, Sollertia je jedna z věcí, které by neměly vyžadovat superpočítač, jak to někdy bývá Smile
_________________
For guns and glory, go to www.ceske-hry.cz.
For work and worry, execute VC++.
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: 9. červenec 2012, 12:40:19    Předmět: Odpovědět s citátem

if.then napsal:
Musím uznat, že není špatné zrychlení o 1.28 milisekundy pouhým nahrazením glClear. Ale jestli je o tolik rychlejší udělat změnu depth testu a matic, vyrenderovat jeden polygon a zase to dát do původního stavu oproti vymazání framebufferu na grafickém čipu, tak to o GMA a jeho driverech dost vypovídá Smile

Většina GPU maže framebuffer právě pomocí vykreslení jednoho velkého quadu a nastavení všech možných stavů (shadery, rasterizer, depth, stencil, colormask, atd.), které pak musí vrátit do původního stavu. Pokud to udělá uživatel, tak to může být někdy podobně rychlý. Rozdíl je jen v tom, že driver může zapnout další stavy, které to mazání urychlí a které uživatel nemá v OpenGL k dispozici.

glClear, glBlitFramebuffer, glDrawPixels, glCopyTexImage, občas dokonce i glGetTexImage... vždy se uvnitř kreslí nějaký quad, který tu operaci realizuje.
_________________
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 1, 2  Další
Strana 1 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