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?