Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 11. červen 2011, 22:38:11 Předmět: Podivné chování glBindFramebuffer |
|
|
Momentálně jsem se setkal s jedním problémem s procedurou glBindFramebuffer, na linuxech. Pro informaci používám fglrx (ne OpenSource drivery) s driverem ve verzi 11.5 (ani na 11.4 neběží).
V čem je problém, především v tom, že po vytvoření framebufferu (glGenFramebuffers) zavolám předpokládaně glBindFramebuffers, s parametery GL_FRAMEBUFFER a id framebufferu které bylo vytvořeno v předchozí proceduře. Problém je, že obdržím error s GL_INVALID_ENUM, což má nastat pouze v případě, že první parametr NENÍ GL_FRAMEBUFFER. Takže velké WTF?
Vzhledem k rendereru který momentálně používám, deferred renderer - tak toto je sakra velký problém. Buď jsem tedy něco přehlédl, nebo že by znovu slavné AMD Drivery?
Zdroják generace fbo pro linux:
kód: |
glGenRenderbuffers( 1, &rbo );
glBindRenderbuffer( GL_RENDERBUFFER, rbo );
glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT, window_t->window_width, window_t->window_height );
glBindRenderbuffer( GL_RENDERBUFFER, 0 );
glGenFramebuffers( 1, &fbo );
glBindFramebuffer( GL_FRAMEBUFFER, fbo );
int e = glGetError(); printf("%d\n", e);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, dynamic_tex, 0);
glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbo );
GLenum status = glCheckFramebufferStatus( GL_FRAMEBUFFER );
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
|
V integeru e je chyba 1280, což je GL_INVALID_ENUM afaik. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 11. červen 2011, 22:53:34 Předmět: |
|
|
Je GL_FRAMEBUFFER definovaný správně?
Funguje to na NVIDII? _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 11. červen 2011, 22:56:11 Předmět: |
|
|
Podle všeho je, odpovídá adrese 0x8D40 což je stejné jako GL_FRAMEBUFFER_EXT.
Na NVidii nemám možnost kód ozkoušet, ale co je zajímavé, stejný kód funguje pod jiným OS, pod Windows XP, už léta.
EDIT: Zkusím napsat ještě nějaký sample čistě jen na offscreen rendering ... ale myslím že bude výsledek stejný. _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
Vilem Otte

Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 11. červen 2011, 23:10:46 Předmět: |
|
|
No jo, chyba nalezena a opravena ...
Ve skutečnosti to bylo v procedurách na získání extensionu (glXGetProcAddress, pod widlema wglGetProcAddress), problém v knihovně, kterou jsem dříve stavěl (variace na glew) a nedávno ji překompiloval pod linuxy a v úpravách nějaké typedefy přepsal. Takže adresa glBindFramebuffer neodpovídala proceduře glBindFramebuffer...
Nicméně díky, pomohlo mi to s tím zda GL_FRAMEBUFFER odpovídá skutečně té adrese (vzpomněl jsem si na extensiony).
Tak si jdu dát pár facek a na příště raději při kompilaci na jinou platformu ještě proletět kód, jestli jsem si někde s něčím omylem nepohrál... _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 12. červen 2011, 00:58:18 Předmět: |
|
|
Původně mě napadlo (což jsem ale považoval za nepravděpodobné), že bys mohl mít špatnou verzi libGL, což by mohlo právě způsobit to, že by pointery na některý funkce ukazovaly na jiný funkce a dostával bys GL errory. (stát se to může, když si někdo rozmrdá linux) _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
|