为了在Android NDK上快速访问OpenGL ES 2.0纹理像素,我想使用eglCreateImageKHR()
扩展名。
根据EGL_NATIVE_BUFFER_ANDROID
docs:
ANativeWindowBuffer
是 native 框架类(例如struct
)使用的内部GraphicBuffer
。
不幸的是,由于我使用的是NDK,因此无法直接访问这些类。
NDK native_window
接口(interface)允许我将Java Surface
对象传递给NDK。然后,我可以使用ANativeWindow_fromSurface()
获取不透明的ANativeWindow*
句柄。使用该指针,我可以调用ANativeWindow_lock()
来填充ANativeWindow_Buffer
类型的结构(请注意_
)。
如果我尝试将此&ANativeWindow_Buffer
对象与eglCreateImageKHR()
一起使用,它将失败并显示EGL_BAD_NATIVE_WINDOW
。
我的问题是:如何将ANativeWindow_Buffer
与eglCreateImageKHR()
一起使用,或者如何从ANativeWindowBuffer
或ANativeWindow_Buffer
获得ANativeWindow*
。
最佳答案
根据我在这条道路上发现的信息,ANativeWindow_Buffer
和ANativeWindowBuffer
是完全不同的类型。好吧,它们有些相似,但是绝对不同,因此不能互换使用。
如果要比较,则定义如下:
ANativeWindow_Buffer
:http://androidxref.com/4.4.4_r1/xref/prebuilts/ndk/current/platforms/android-18/arch-arm/usr/include/android/native_window.h ANativeWindowBuffer
:http://androidxref.com/4.4.4_r1/xref/system/core/include/system/window.h 您会注意到它们有一些共同的字段(
width
,height
,stride
和format
)。最大的区别是ANativeWindow_Buffer
包含一个指向实际数据的指针,而ANativeWindowBuffer
包含一个类型为buffer_handle_t
的不透明句柄。因此,如果您找到了如何获取
ANativeWindow_Buffer
的方法,并希望自己顺利到达ANativeWindowBuffer
的方法,那么您...可能就不行了。至少那是我的结论。我认为非常相似的名字只是一个 mock 。我没有找到从NDK代码创建
ANativeWindowBuffer
的方法。至少仅使用受支持的API,我相信这是不可能的。我的研究对象是KitKat。关于android - 从ANativeWindow_Buffer获取ANativeWindowBuffer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27525380/