Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 30. prosinec 2011, 11:33:45 Předmět: GL - Pár otázek ke PBO |
|
|
Zdravím,
hledal jsem, ale nikde jsem nenašel na mé otázky odpověď, tak mě tu prosím neukamenujte
1) Je možné (nebo spíš povolené) po zavolání glMapBufferARB, ten PBO (a texturu/fbo) unbindnout, a pak někdy zase bindnout a zavolat glUnmapBufferARB? Bude ta pamět stále validní? A to i když unbindnu/změním OpenGL context, a pak ho zase bindnu na ten původní?
2) Je nějak možné u PBO získat přístup k "původním" datům (např. u textury), a to jak pro čtení tak i zápis zároveň? Jsou tam jen operace PACK/UNPACK, ale co když chci modifikovat ty původní data (přes ukazatel získaný z glMapBufferARB), a pak chci aby po zavolání glUnmapBufferARB se ty data "uložily" zpět (do té textůry)? Jde to nějak udělat bez nutnosti explicitního kopírovaní těch původních dat?
Pokud to nejde s PBO, jde to vůbec nějak udělat? Myslím tím získaní přístupu (tj. ukazatele do paměti) přímo k těm datům toho objektu (textura/fbo).
Díky moc za jakoukoliv odpověď!  _________________
 |
|
Crypton

Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 1. leden 2012, 06:57:36 Předmět: |
|
|
1) Aha, ptám se protože mi to tak "funguje", tak jestli to není náhodou nějaká "chyba" jen u mě
2) Právě že jsem už GL_READ_WRITE zkoušel, ale ty "původní" data tam nejsou, jde buď o nově alokovanou pamět, a nebo mi to vrací paměť z předešlých snímků, zřejmě, ale možná že tam dělám nějakou prasárnu, co se PBO týče.
Zkouším získat přístup k té paměti takto:
kód: |
glBindTexture(GL_TEXTURE_2D, textureId); GLCheckError();
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pixelbufferId); GLCheckError();
glBufferDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, size, NULL, GL_STREAM_DRAW_ARB); GLCheckError();
void* buffer = glMapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, GL_READ_WRITE_ARB); GLCheckError();
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); GLCheckError();
glBindTexture(GL_TEXTURE_2D, 0); GLCheckError(); |
A takto tu pamět zase "uvolním":
kód: |
glBindTexture(GL_TEXTURE_2D, textureId); GLCheckError();
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pixelbufferId); GLCheckError();
glUnmapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB); GLCheckError();
glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, textureFormat, textureType, NULL); GLCheckError();
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0); GLCheckError();
glBindTexture(GL_TEXTURE_2D, 0); GLCheckError(); |
Vidíš v tom nějakou chybu?
Díky za odpověď. _________________
 |
|