.[ ČeskéHry.cz ].
GL - Pár otázek ke PBO

 
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: 30. prosinec 2011, 11:33:45    Předmět: GL - Pár otázek ke PBO Odpovědět s citátem

Zdravím,

hledal jsem, ale nikde jsem nenašel na mé otázky odpověď, tak mě tu prosím neukamenujte Wink

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í?Smile

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ěď! 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: 30. prosinec 2011, 13:06:24    Předmět: Odpovědět s citátem

1. asi ano. specifikacia iba hovori ze nemozes volat ziadne prikazy ktore nejak modifikuju namapovany objekt. takziez je mozne namapovat viacero objektov.

2. do glMapBuffer() posielas aj access tak posles GL_READ_WRITE a mozes si tie data precitat upravit a po unmapovani sa tato zmena objavy.
_________________
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: 1. leden 2012, 06:57:36    Předmět: Odpovědět s citátem

1) Aha, ptám se protože mi to tak "funguje", tak jestli to není náhodou nějaká "chyba" jen u mě Smile

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? Rolling Eyes

Díky za odpověď.
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
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