.[ ČeskéHry.cz ].
Problém s glClear (2)
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
]semo[



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

PříspěvekZaslal: 9. leden 2015, 17:35:34    Předmět: Odpovědět s citátem

perry: taky mám ten pocit, že tak nějak to fungovalo. Ale už si to nepamatuju, proto jsem tam hodil ten otazník a víc asi nevysvětlím. Taky sem myslel, jestli třeba interně nemají v driverech nějakou hrůzu, která emuluje FBO s pomocí renderu do screenu.

Ale zkus ještě tohle:
Blbé stavy - na intelu se mi to stávalo. Tam kde většinou textura už funguje, u intelu musíš zavolat glEnable(GL_TEXTURE_2D), atp. Třeba i tohle bych zkontroloval a zkusmo to přidal před glTexImage2D... Je to někdy peklo.

A zjistit hodnotu GL_MAX_VIEWPORT_DIMS, tim je velikost RT taky limitovaná. Pravděpodobně to tim nebude, ale tak pro úplnost. Pak bych šel po těch glErrorech a špatných stavech (glDepthMask, scissor test...). Zkus nějaký gl debugger...
_________________
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. leden 2015, 18:01:33    Předmět: Odpovědět s citátem

perry napsal:
Postni ještě ten kód, kde tu texturu připojuješ na render (vč. změny viewportu).

kód:
   /*
    * Počátek renderu do FBO.
    */
   bool Texture::begin(void)
   {
      if (!dynamicTexture || fboUsed || extLib.isNull())
      {
         return false;
      }

      glPushAttrib(GL_VIEWPORT_BIT);
      extLib->glBindFramebuffer(GL_FRAMEBUFFER, fboIndex);
      glDrawBuffer(GL_COLOR_ATTACHMENT0);
      glReadBuffer(GL_COLOR_ATTACHMENT0);
      glViewport(0, 0, texWidth, texHeight);
      glEnable(GL_SCISSOR_TEST);
      glScissor(0, 0, texWidth, texHeight);

      fboUsed = true;
      return true;
   }

   /*
    * Konec renderu do FBO.
    */
   void Texture::end(void)
   {
      if (!dynamicTexture || !fboUsed || extLib.isNull())
      {
         return;
      }

      glDisable(GL_SCISSOR_TEST);
      extLib->glBindFramebuffer(GL_FRAMEBUFFER, 0);
      glDrawBuffer(GL_BACK);
      glReadBuffer(GL_BACK);
      glPopAttrib();

      fboUsed = false;
   }


Tady bych řekl chyba nebude... prostě zlobí driver na intelu, protože na jiných kartách se to neděje...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 9. leden 2015, 19:13:35    Předmět: Odpovědět s citátem

To vypadá celkem OK na připojení FBO. Nevím, co je / dělá

kód:
extLib->glBindFramebuffer


Resp. jako co to dělá na pozadí. Nikde totiž nevidim, že by to připojovalo ten depth buffer, co chceš vymazat. Já to připojuju samostatně

FBO

kód:
GL_CHECK( glBindFramebuffer(GL_FRAMEBUFFER, this->frameBufferID) );
for (all textures){
  GL_CHECK( glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + attachIndex, GL_TEXTURE_2D, this->textures[i]->textureID, 0) );
         attachIndex++;      
}


textureID je ID vygenerované textury

Depth Buffer

kód:

GL_CHECK( glBindRenderbuffer(GL_RENDERBUFFER, this->id) );
   GL_CHECK( glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, this->id) );   


id je pak ID vytvořeného depth bufferu (který ale není tetura)

Takhle to mám v GL ES2/3 ale i v klasickém 4/3. Jak je to ve starších verzích, nevím.
---
Jinak poznámka k logice. Proč tvoříš depth buffer dohromady s texturou? To vypadá tak divně.
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



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

PříspěvekZaslal: 9. leden 2015, 19:30:51    Předmět: Odpovědět s citátem

Aha... a já myslel, že se to připojuje automaticky zavoláním glBindFramebuffer(GL_FRAMEBUFFER, ...)...

Takže všechny ty attachmenty musím připojit znovu, když chci do FBO zapisovat?
_________________
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: 9. leden 2015, 19:35:06    Předmět: Odpovědět s citátem

Teď jsem to tam zkusil napsat a pořád to dělá tu samou chybu, takže to prostě nemůže být v mém kódu, ale je to driverem...
_________________
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: 9. leden 2015, 19:37:35    Předmět: Odpovědět s citátem

tak samozrejme pripojit texturu alebo renderbuffer k FBO staci raz.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 9. leden 2015, 20:01:28    Předmět: Odpovědět s citátem

citace:
tak samozrejme pripojit texturu alebo renderbuffer k FBO staci raz.


ale pokud z ní chci číst v shaderu jako z textury, tak jí musím z toho FBO odpojit, ne? Nebo alespoň to bylo doporučováno někde v nějakém tutoriálu. Ono i bez toho odpojení z toho většinou jde číst, ale nějaký driver se může vztekat. Dřív u DX9 mi to občas právě blblo, pokud jsem texturu neodpojil jako render atrget a chtěl z ní číst (a naopak).
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 10. leden 2015, 11:14:48    Předmět: Odpovědět s citátem

jen pro jistotu: mas urcite zapnuty depth-write (glDepthMask(GL_TRUE)) pred glClear(...| GL_DEPTH_BUFFER_BIT), ze?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



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

PříspěvekZaslal: 10. leden 2015, 11:24:20    Předmět: Odpovědět s citátem

OpenGL specifikacia hovori ze dojde k nedefinovanemu spravaniu sa ak

  • an image from texture object T is attached to the currently bound draw frame-
    buffer at attachment point A
  • the texture object T is currently bound to a texture unit U, and
  • the current programmable vertex and/or fragment processing state makes it
    possible (see below) to sample from the texture object T bound to texture
    unit U


inak povedane ak textura T je zaroven zdrojom pre citanie a aj zapisovanie. teda staci aby FBO nebolo v dany moment aktivne. ak to blbne tak je to bug v driver. teda to doporucenie je pravdepodobne pre vyhnutiu sa tejto zapisovacej slucke.

quas4 napsal:
jen pro jistotu: mas urcite zapnuty depth-write (glDepthMask(GL_TRUE)) pred glClear(...| GL_DEPTH_BUFFER_BIT), ze?

to by nesposobilo ze mu zmaze len cast buffera. to by skor implikovalo pouzitie glScissor()
_________________
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: 10. leden 2015, 11:31:38    Předmět: Odpovědět s citátem

I bez glScissor() to dělá oné chování. Jak jsem řekl, myslím, že je to driverem, neboť na všech ostatních strojích, kde je nějaká rozumná grafická karta to problémy nedělá. Navíc jsem to vyřešil i na tomto notebooku přidáním jednoho dummy FBO s maximálními rozměry, do kterého nic nezapisuji, jen ho připojím a odpojím. Na výkon to nemá žádný znatelný dopad.
_________________
Opravdovost se pojí s trýzní...
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