Per ottenere velocemente l'accesso pixel di trama OpenGL ES 2.0 su Android NDK, voglio utilizzare l'estensione eglCreateImageKHR()
.Ottenere un ANativeWindowBuffer da ANativeWindow_Buffer
Secondo il EGL_NATIVE_BUFFER_ANDROID
docs:
Questa estensione consente utilizzando un buffer finestra Android (struct
ANativeWindowBuffer
) come fonteEGLImage
.
ANativeWindowBuffer
è un interno struct
usato dalle classi del framework native come GraphicBuffer
. Sfortunatamente, dato che sono su NDK, non ho accesso diretto a queste classi.
L'interfaccia NDK native_window
mi consente di passare un oggetto Java Surface
tramite NDK. Posso quindi utilizzare ANativeWindow_fromSurface()
per ottenere un handle opaco ANativeWindow*
. Con questo puntatore posso chiamare ANativeWindow_lock()
per riempire una struttura di tipo ANativeWindow_Buffer
(Nota lo _
).
Se si tenta di utilizzare questo oggetto &ANativeWindow_Buffer
con eglCreateImageKHR()
non riesce con EGL_BAD_NATIVE_WINDOW
.
La mia domanda è: come posso utilizzare ANativeWindow_Buffer
con eglCreateImageKHR()
o in alternativa come ottenere un ANativeWindowBuffer
da ANativeWindow_Buffer
o da ANativeWindow*
.
Infatti, la struttura 'ANativeWindow_Buffer' è utilizzata solo nell'API pubblica, per incapsulare i campi che devono essere restituiti lì, ed è allocata dal chiamante, quindi l'indirizzo della struttura stessa non dice nulla sugli oggetti reali Dietro. Per un esempio su come questi si relazionano tra loro, dai un'occhiata al metodo 'Surface :: lock' in https: //android.googlesource.com/platform/frameworks/native/+/033f7e8e/libs/gui/Surface.cpp (righe 792-884, in particolare, righe 876-880). – mstorsjo