Android NDK'da hızlı OpenGL ES 2.0 doku piksel erişimi elde etmek için, eglCreateImageKHR()
uzantısını kullanmak istiyorum. EGL_NATIVE_BUFFER_ANDROID
docs göre ANativeWindow_Buffer öğesinden ANativeWindowBuffer alma
Eklenti,
EGLImage
kaynağı olarak bir robot cam tamponu (yapıANativeWindowBuffer
) kullanılmasını sağlar.
ANativeWindowBuffer
GraphicBuffer
gibi doğal çerçeve sınıfları tarafından kullanılan bir iç struct
olup. Maalesef, NDK'dayım çünkü bu sınıflara doğrudan erişimim yok.
NDK native_window
arabirimi, bir Java Surface
nesnesini NDK'ya geçirmeme izin veriyor. Daha sonra ANativeWindow*
tutamacını almak için ANativeWindow_fromSurface()
'u kullanabilirim. Bu işaretçi ile ANativeWindow_Buffer
türünü doldurmak için ANativeWindow_lock()
'u arayabilirim (Not _
).
Bu &ANativeWindow_Buffer
nesnesini eglCreateImageKHR()
ile kullanmayı denerseniz, EGL_BAD_NATIVE_WINDOW
ile başarısız olur.
Sorum şu: Nasıl ANativeWindow_Buffer
veya ANativeWindow*
bir ANativeWindowBuffer
nasıl alternatif eglCreateImageKHR()
veya ANativeWindow_Buffer
kullanabilirsiniz.
Gerçekten de, "ANativeWindow_Buffer" yapısı yalnızca, orada iade edilmesi gereken alanları kapsüllemek için kamu API'sında kullanılır ve arayan tarafından ayrılır, böylece yapının adresi gerçek nesneler hakkında hiçbir şey söylemez arkasında. Bunların birbiriyle nasıl ilişkilendiğine ilişkin bir örnek için https: //android.googlesource adresindeki 'Surface :: lock' yöntemine bakın.com/platform/frameworks/native/+/033f7e8e/libs/gui/Surface.cpp (satırlar 792-884, özellikle satırlar 876-880). – mstorsjo