2012-03-21 10 views
7

Potrzebuję zastosować niektóre shadery pikseli do bitmapy (używając OpenGL) i wysłać wynik na serwer. Rendering powinien być wykonany w tle, więc nie mogę utworzyć GLSurfaceView w tym celu. Moje pytanie brzmi: czy możliwe jest renderowanie OpenGL na Androidzie bez użycia GLSurfaceView? Jak renderowanie bezpośrednio do mapy bitowej, płótna lub jakiegoś bufora/macierzy? A może po prostu można użyć jakiegoś obojętnego GLSurfaceView?OpenGl renderuje bezpośrednio do mapy bitowej (bez żadnego widoku)

+0

Możliwy duplikat [Uruchom Androida OpenGL w tle jako zasobu renderującego dla aplikacji?] (Http://stackoverflow.com/questions/6524212/run-android-opengl-in-background-as-rendering-resource-for- app) –

Odpowiedz

4

This SO post zawiera link do an anddev post. Trochę w dół, ktoś stworzył klasę PixelBuffer, która ponownie używa interfejsu GLSurfaceView.Renderer, ale poza tym, tylko EGL.

+0

Na szczęście właśnie skończyłem mój własny renderer oparty na tym samym pomyśle. Dziękuję za odpowiedź i link myślowy. Może być użyteczny dla innych. –

+0

Wspomniany obiekt PixelBuffer zawiera dobry dowód koncepcji, ale ma krytyczny problem z wydajnością: Po wykonaniu bufora tworzona jest druga kopia mapy bitowej poprzez kopiowanie każdego piksela w pętlę, co może spowodować 100% lub więcej zwiększenie czasu pracy! Po prostu pokazuje, że ważne jest, aby ramka referencyjna była prosta w OGL. – tomwhipple

+1

Ponadto PixelBuffer działa na niektórych telefonach, ale nie na innych. Fragmentacja Yay! – tomwhipple

0

Wygląda na to, że chcesz renderować obiekt bufora ramki (tzn. Bezpośrednio do tekstury). Jest to zdecydowanie możliwe. Po prostu znajdź odpowiedź tutaj lub w sieci. Znalazłem ten bez zbytniego wysiłku. Nie jestem pewien, czy używasz GL ES 1.1 lub 2.0.

http://blog.shayanjaved.com/2011/05/13/android-opengl-es-2-0-render-to-texture/

wygląda również jak APIDemos w SDK zawiera próbkę do 1,1

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/FrameBufferObjectActivity.html

+0

Dziękuję za odpowiedź. Jak widzę, obie metody zależą od GLSurfaceView. Potrzebuję renderowania bez ekranu/działania/układu. Mam na myśli w pewnym wątku tła. Zastanawiam się, czy GLSurfaceView jest w stanie stworzyć kontekst GL bez możliwości zainicjowania jego powierzchni (ponieważ wymaga ekranu do narysowania). Dziękuję za podpowiedź i wydaje mi się to przydatne. –

+0

@boulder robi GLSurfaceView nie zainicjować, jeśli jest on poza ekranem? Co jeśli jest na ekranie 1px? –

+0

@BradMoore Nie pamiętam teraz. Możesz to sprawdzić całkiem łatwo. O ile pamiętam, nie można korzystać z GLSurfaceView bez ekranu. Opcja 1px nie była opcją, ponieważ renderowanie powinno być wykonane w serwisie. –

Powiązane problemy