2013-01-17 21 views
6

Pracuję nad paletą typu aplikacji Android. Używam OpenGL ES 2.0. Zasadniczo mam obraz, w którym każdy ekran dotykowy powinien odpowiadać okręgowi alfa, który ma być zastosowany tam, gdzie pokazano inny obraz leżący poniżej. Próbowałem różnych technik, ale są raczej powolne, ponieważ działa jak przy użyciu organicznego glTexSubImage2D, który spowalnia fazę renderowania. Próbuję zrozumieć użycie FBO, ponieważ pozwalają na renderowanie poza ekranem. Czy ktoś może lepiej wyjaśnić, co oznacza renderowanie poza ekranem i jakie korzyści może przynieść przyspieszenie mojej metody?Android OpenGL FBO poza ekranem

Przypuszczam, że poza ekranem oznacza, że ​​możesz zmienić bufor ramki stworzony przeze mnie, na drodze na DrawFrame? W innym wątku?

Odpowiedz

0

Podejście zajmuje dużo miejsca na przepustowość pamięci, ponieważ trzeba odczytywać (część) ekranu i ponownie zapisywać tę samą ilość danych z powrotem do pamięci GPU. Jest to naprawdę powolne i sprawia, że ​​kod rysunkowy czeka, zanim obraz zostanie przeniesiony z powrotem na GPU przed renderowaniem. Czy zastanawiałeś się nad rysowaniem quadów dla każdego naciśnięcia palca lub jakiegoś rodzaju prymitywu zbliżonego do twoich potrzeb? Dlaczego do tego potrzebujesz OpenGL?

1

Oprócz możliwości renderowania w oknie na ekranie przy użyciu OpenGL ES 2.0, można również renderować niewidoczne powierzchnie poza ekranem o nazwach pbufferów (skrót od bufora pikseli). Pbuffery mogą w pełni wykorzystać dowolne przyspieszenie sprzętowe dostępne dla OpenGL ES 2.0, podobnie jak okno. Pouffery są najczęściej używane do generowania map tekstur. Jeśli chcesz renderować teksturę, zalecamy użycie obiektów bufora ramki (objętych w rozdziale 12, "Obiekty bufora ramki") zamiast jednostek pbufferów, ponieważ są one bardziej wydajne niż w przypadku . Jednak bufory często mogą być przydatne w niektórych przypadkach, gdy nie można użyć obiektów bufora ramki, takich jak podczas renderowania powierzchni poza ekranem za pomocą OpenGL ES, a następnie użycia jej jako tekstury w innym interfejsie API, takim jak jako OpenVG.

[źródło: OpenGL ES Podręcznik programowania 2.0]

Mam nadzieję, że to pomaga. Zapoznaj się z tym uważnie - "pbuffery wciąż mogą być przydatne do renderowania na nieekranową powierzchnię z OpenGL ES"

+0

Jednak widziałem, że wspomniane podejście jest powolne na Androidzie, ze względu na konieczność przełączania między dwoma kontekstami EGL. Zamiast tego szukaj odpowiedzi na stackoverflow, które używają "obiektu bufora ramki" jako bufora offscreen. – ToolmakerSteve