TextureView vs. GLSurfaceView lub Jak używać GLSurfaceView z EGL14

Jestem zdezorientowany z EGL.

Mój GLSurfaceView tworzy kontekst EGLContext. Teraz tworzę wspólny kontekst. Teraz muszę użyć rozszerzenia EGLExtension.

Metoda, której muszę użyć, nazywa się (> = API18):

EGLExt.eglPresentationTimeANDROID(android.opengl.EGLDisplay display, android.opengl.EGLSurface surface, long time);

Problem polega na tym, że GLSurfaceView tworzy tylko javax.microedition.khronos.egl.EGLContext s.

Co mi mówi, NIE używać GLSurfaceView. Próbowałem więc TextureView, który jest nieco podobny, z tą różnicą, że musisz obsługiwać własne rzeczy EGL. Co jest dobre do tego celu.

Ale: TextureView jest wolniejszy, przynajmniej tak wyglądało, więc nagrałem kilka diagramów za pomocą Method Profiler:

Tutaj TextureView z własną obsługą EGL: Wątek na górze to zegar budzący wątek pośrodku, który renderuje na TextureView. Następnie zostanie wywołany główny wątek, aby przerysować TextureView.

... i tutaj GLSurfaceView z własną obsługą EGL Tym razem zegar jest w środku, wywołuje wątek na górze, aby renderować mój obraz do bufora ramki, który podaję bezpośrednio do SurfaceView (RENDERMODE_WHEN_DIRTY) i wywołuję requestRender do zażądać renderowania widoku.

Jak widać już po krótkim wyglądzie, dzięki GLSurfaceView wygląda to znacznie czystiej niż w przypadku TextureView.

Na obu przykładach nie miałem niczego innego na ekranie i renderowali dokładnie te same siatki za pomocą tego samego modułu cieniującego.

Na moje pytanie: czy istnieje sposób użycia GLSurfaceView z kontekstami EGL14?

Czy zrobiłem coś złego?

questionAnswers(2)

yourAnswerToTheQuestion