2011-03-27 13 views
18

W jakich przypadkach chciałbym mieć załącznik renderbuffer w FBO OpenGL, zamiast załącznika tekstur, oprócz domyślnego bufora ramki? Jako, że przywiązanie do tekstury wydaje się dużo bardziej wszechstronne.Przetwarzanie bufora renderowania OpenGL FBO lub tekstura

+2

Zastanawiam się nad tym od dłuższego czasu. Domyślam się, że istniała baza starszych programów opartych na PBuffer, a niektórzy ludzie nie chcieli dostosować się do innej koncepcji (np. Napisać do tekstury zamiast pisać do PBuffer i skopiować), więc dokładna funkcjonalność PBuffera została ponownie zaimplementowana na górę FBO, aby zachęcić ich do korzystania z FBO. Naprawdę nie mogę wymyślić żadnego innego powodu, ponieważ załączniki renderowania nie są w ogóle użyteczne (starając się uniknąć mówienia "opóźniony"). Nie ma od razu oczywistego powodu, dla którego renderowanie do tekstury powinno być wolniejsze (lub dowolne inne). – Damon

Odpowiedz

20

Tekstury zapewniają więcej funkcji (pobieranie próbek !, odmiany formatów), a więc są bardziej narażone na utratę wydajności.

Odpowiedź jest prosta: użyj Tekstur wszędzie tam, gdzie musisz pobierać próbki z powierzchni (brak alternatyw).

Użyj Bufory do renderowania wszędzie tam, gdzie nie trzeba próbkować. Sterownik może, ale nie musi, zdecydować o bardziej efektywnym przechowywaniu danych pikseli w oparciu o wyrażoną intencję nie wykonywania próbkowania. Możesz użyć GL blitting później, aby coś zrobić z wynikiem.

+2

Wreszcie, dobra, prosta odpowiedź na to proste pytanie. Dzięki. Wygląda na to, że wiele osób ma tylko wymyślne komentarze na ten temat (innymi słowy - nie wiedzą). –

+0

Co oznacza * próbka z powierzchni *? Czy możesz podać bardziej konkretne przykłady, gdzie trzeba próbkować, a kiedy nie? – bluenote10

+1

@ bluenote10 przez "sampling" mam na myśli sprawdzanie konkretnych wartości tekstury w module cieniującym. Aby uzyskać więcej informacji, zobacz "Funkcje wyszukiwania tekstur" na stronie https://www.opengl.org/wiki/Sampler_%28GLSL%29. Na przykład, jeśli chcesz coś zamazać, twój moduł cieniujący zazwyczaj wypróbuje obszar pikseli i waga je, więc potrzebujesz źródła tekstury. W drugim przypadku, jeśli chcesz tylko narysować coś za pomocą testu głębokości, możesz użyć bufora renderowania głębi. – kvark

1

Rozszerzenie pytania na OpenGL | ES, kolejnym powodem używania RenderBuffers zamiast tekstur jest również to, że tekstury mogą nie być obsługiwane w niektórych konfiguracjach i uniemożliwiają zbudowanie prawidłowego FBO. Szczególnie myślę o teksturach głębi, które nie są natywnie obsługiwane na niektórych urządzeniach, na przykład nVidia Tegra 2/3.

Powiązane problemy