.[ ČeskéHry.cz ].
OGL: Problém s framebuffery?

 
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
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 20. prosinec 2011, 01:19:08    Předmět: OGL: Problém s framebuffery? Odpovědět s citátem

Čaute,

chtěl bych se zeptat, co všechno musím "nastavit" po nabindování framebufferu? Všimnul jsem si, že se "musí" nastavit viewport přes glViewport, tedy pokud má jiné rozměry než ten předešlý.

Rendereju teď hodně do textůry, a mám těch framebufferů více, každý má jíný rozměr (tj. rozměr textůry), a dělám zřejmě něco špatně, protože mám výslednou textůru úplně "dotrhanou".

Obrázek toho co myslím:
Edit: Removed...

Jak můžete vidět, něco je hodně špatně. Ten bílý čtverec má být textůra kurzoru, a můžete tam vidět ten pohyb (schválně jsem nevolal glClear).

Z nějakého podivného důvodu se všude vykresluje hlavní framebuffer (prvně vytvořený, do kterého se blitují všechny ostatní framebuffery a textury), a to i na místech kde vůbec nic nevykresluju.

Napadá mě že to může být chyba driveru, ale všechny ostatní hry mi běží normálně, a i když nic exotického (si myslím) nedělám, bude ta chyba asi mojí straně.

Kontroluju všude jestli náhodou nebinduju omylem běžný framebuffer, a taky kontroluju všechny textůry a jiné parametry. Stále nemůžu přijít na to kde je chyba, a vyzkoušet to na jiném PC zatím taky nemůžu.

Trápím se s tím už skoro 5 dní, a pořád nemůžu přijít na to kde je problem... a kód jsem už několikrát úplně přepsal. Prostě lama, no Rolling Eyes

Edit: Problém vyřešen...
_________________


Naposledy upravil Crypton dne 29. prosinec 2011, 13:55:11, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



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

PříspěvekZaslal: 20. prosinec 2011, 09:28:18    Předmět: Odpovědět s citátem

to ti nehadze ten kod ziadne errory?

glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); je chyba lebo tam moze ist len GL_FRONT GL_BACK ...

okrem toho vobec netreba volat glDrawBuffer() a glReadBuffer()

za dalsie nemas prehodene width height v glBlitFramebuffer()?

a potom
glBindTexture(GL_TEXTURE_2D, source.getTextureId()); GLCheckError();
...glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); GLCheckError(); // Draw as textured quad

kreslis kopec stvorcov ale nemenis texturu. preto ti kresli vsade rovnaku.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 20. prosinec 2011, 10:02:30    Předmět: Odpovědět s citátem

nou napsal:
to ti nehadze ten kod ziadne errory?

Právě že žádné chyby to neháže...

nou napsal:
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); je chyba lebo tam moze ist len GL_FRONT GL_BACK ...

Google mi tvrdí pravý opak Smile

nou napsal:
okrem toho vobec netreba volat glDrawBuffer() a glReadBuffer()

Já vím, dal jsem to tam jen pro jistotu, až na konec, když jsem hledal kde je chyba...

nou napsal:
oza dalsie nemas prehodene width height v glBlitFramebuffer()?

Mám, a to schválně, abych ten framebuffer blitnul převráceně. Tam chyba není...

nou napsal:
a potom
glBindTexture(GL_TEXTURE_2D, source.getTextureId()); GLCheckError();
...glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); GLCheckError(); // Draw as textured quad

kreslis kopec stvorcov ale nemenis texturu. preto ti kresli vsade rovnaku.

Binduju tu zdrojovou textůru (source), kterou se chystám vykreslit do toho cílového framebufferu (target), je to problém? Rolling Eyes
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



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

PříspěvekZaslal: 20. prosinec 2011, 10:11:44    Předmět: Odpovědět s citátem

no som tie tri bodky pochopil ze volas glDrawArrays() viackrat a kreslis stvorce do sceny.

pochopil som to inak dobre ze mas jeden hlavny FBO do ktoreho kreslis rozne textury (nie glBlitFramebuffer) ktory nakoniec blitnes do okna?
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
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: 20. prosinec 2011, 10:15:35    Předmět: Odpovědět s citátem

citace:
Google mi tvrdí pravý opak

Někdy je dobré nevěřit google a podívat se na skutečnou funkci dokumentovanou v api - http://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffer.xml. Pleteš si to s http://www.opengl.org/registry/specs/ARB/draw_buffers.txt kam se do toho dávají attachmenty (color, depth, etc.) a který slouží k MRT, ty však MRT neprovádíš.

U 3. části kódu neprovádíš glClear (ten bys měl provést vždy). a u 2. ostatně taky ne - měníš frame buffer, měl bys mu vymazat color i depth buffer každý snímek taky (nejen backbufferu), jinak ti tam zůstanou věci, které jsi tam měl předtím.
_________________
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: 1050

PříspěvekZaslal: 20. prosinec 2011, 12:06:28    Předmět: Odpovědět s citátem

heh a ono tam je chyba. podla specifikacie (PDF) ma byt argumentom glDrawBuffer[s]() GL_BACK, GL_FRONT ... ak je bindnuty klasicky framebuffer.
ak je bindnuty FBO tak tam musi ist GL_NONE a GL_COLOR_ATTACHMENTi

ale podla mna bude chyba v tom aku texturu vobec binduje pri kresleni cez glDrawArrays().
a je to glBlitFramebuffer() v tretej casti jedine? lebo hovorit ze blitujem je nepresne ak len kreslim otexturovany 2D stvorec.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 29. prosinec 2011, 13:52:58    Předmět: Odpovědět s citátem

Tak už jsem to vyřešil. Byl to problém s pamětí, a to docela dost brutální. Problém byl hlavně na straně driveru, a nepomohlo ani kompletní přeinstalování a aktualizace na nejnovější verzi.

Konkrétně byl problém s UV koordináty, když jsem vykresloval ten otexturovaný obdelník. Nastavoval jsem je totiž vždy na [0, 0, 1, 1], a když jsem vykresloval ten obdelník na pozici, která i trochu přesahovala rozměr té cílové textury, aniž bych ty UV koordináty nějak "clampnul", tak došlo k úplnému "rozhození" té cílové textůry. Přitom jsem už na začátku zkoušel zapnout scissor test, a nepomohlo to.

Zjistil jsem to tak, že jsem si před a po každém vykreslování do té cílové textury tu texturu uložil do souboru.

P.S. Možná že to i bude tím, že mám graf. kartu AMD Mobility Radeon HD 4200, která má sdílenou paměť Rolling Eyes
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



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

PříspěvekZaslal: 30. prosinec 2011, 15:13:16    Předmět: Odpovědět s citátem

Ta grafika má stejný ovladače, jako odpovídající normální Radeony, jen je o hodně pomalejší (ty integrované jsou obvykle 1-2 generace za tou řadou, jejíž jsou jakože lowend, tj. zde 4000).
_________________
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: 31. prosinec 2011, 11:50:19    Předmět: Odpovědět s citátem

Ovladač má často jiný kód pro různé karty. I v rámci jedné generace hw jsou rozdíly (např. úplně jiná implementace occlusion queries u ATI X1800 a ATI X1600). U grafik se sdílenou pamětí se např. musí memory controller nastavit jinak. Taky může jít o bug v hardwaru, který se projevuje pouze u těchto karet (takové bugy se obvykle musí v driveru nějak obcházet).
_________________
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