Autor Wątek: PBO - synchronizacja, czy potrzebna?  (Przeczytany 960 razy)

Offline Montjet

  • Użytkownik

# Marzec 27, 2018, 21:15:41
Cześć!
Stworzyłem sobie obiekt bufora piksela (PBO) w celu asynchronicznej aktualizacji części danych tekstury (niekoniecznie co klatkę).
Tekstura musi być gotowa przed wykorzystaniem jej do renderowania.
Czy jeśli nie skorzystam z glFenceSync tekstura zawsze będzie już zaktualizowana przed wywołaniem glRender?
Albo np. zlecić aktualizacje na samym końcu pętli, tak by w następnej klatce była już gotowa? A może jestem zmuszony do korzystania z obiektów synchronizacji?

I jeszcze jedno, nie znalazłem informacji czy można stosować tą metodę do aktualizacji skompresowanej tekstury? (oczywiście blokami, tak jak jest skompresowana).
« Ostatnia zmiana: Marzec 27, 2018, 21:17:39 wysłana przez Montjet »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Avaj

  • Użytkownik

  • +1
# Kwiecień 02, 2018, 00:27:41
Nie ma czegoś takiego w OpenGL jak glRender, rozumiem że to jest twoja funkcja, która rysuje scenę.

https://www.khronos.org/opengl/wiki/Pixel_Buffer_Object

Cytuj
By allowing OpenGL to manage the memory used as the source or destination of pixel transfer operations, OpenGL is able to avoid explicit synchronization until the user accesses the buffer object. This means that the application can be doing other things while the driver is downloading or uploading pixel data. Fence sync objects can be used to ask whether the process is complete without stalling the CPU.
Z tego wynika, że albo używasz glFenceSync żeby odpytywać czy już jest gotowe, albo używasz bufora i wtedy wymuszasz synchronizację.

Offline Montjet

  • Użytkownik

# Kwiecień 02, 2018, 15:17:55
1. A jak to jest z glMapBuffer, czy jeśli chcę zaktualizować wyłącznie kilkanaście wybranych pikseli, to czy ta funkcja wyśle wyłącznie te dane do VRAM?Czy zawsze to będzie całość, czyli moje zaktualizowane dane + niezmienione?

2. Co w przypadku, gdy na początku przygotuję sobie teksturę (wgram dane), a następnie będę chciał aktualizować ją (nie w całości) - czy dane w PBO, które nie edytuję nadpiszą dane tekstury wartościami losowymi plus zaktualizowanymi?
Zrobiłem test i już wiem, że wyśle całość, a więc potrzeba dodatkowych operacji aby tego uniknąć, bo się da.

Cytuj
Nie ma czegoś takiego w OpenGL jak glRender, rozumiem że to jest twoja funkcja, która rysuje scenę.
Miałem na myśli jakąkolwiek funkcję rysującą OpenGL'a.
« Ostatnia zmiana: Kwiecień 02, 2018, 20:38:51 wysłana przez Montjet »

Offline Avaj

  • Użytkownik

# Kwiecień 06, 2018, 14:04:39
1. A jak to jest z glMapBuffer, czy jeśli chcę zaktualizować wyłącznie kilkanaście wybranych pikseli, to czy ta funkcja
możesz użyć glMapBufferRange, które mapuje tylko wybrany obszar i ma kilka flag dodatkowych, np. czy może zaorać bufor poza tym obszarem czy nie.