我正在开发一个需要访问OpenGL ES 2.0纹理像素的Android NDK应用程序。
OpenGL扩展允许使用
OpenGL扩展允许使用
GraphicBuffer
类来实现此功能,例如在这里, 这里和这里中所述。所有这些方法都需要使用GraphicBuffer
类,但该类不是NDK的一部分(例如在这里中)。显然,这需要访问私有的C ++ Android API(来自AOSP-Android Open Source Project)。
首先,如果我实际构建并链接AOSP repo,我的应用程序是否能在与“纯”NDK版本相同的Android设备上运行?
有人能提供详细的指导说明以及这样做的利弊吗?
其次,Android的 "图形架构" 文档 中写道:
根据this,ANativeWindow
公共的Surface类是用Java编写的。在C/C++中等效的是ANativeWindow类, 可以通过Android NDK半暴露地使用。您可以使用ANativeWindow_fromSurface()调用从Surface获取ANativeWindow。 就像它的Java语言近亲一样,您可以锁定它,使用软件渲染,并解锁和发布。
要从本机代码创建EGL窗口表面,需要将EGLNativeWindowType的实例传递给eglCreateWindowSurface()。 EGLNativeWindowType只是ANativeWindow的一个同义词,因此您可以自由地将其转换为另一个。
GraphicBuffer
是对ANativeWindowBuffer
的“简单包装”。因此,第二个问题是:是否可能仅使用EGL和NDK函数(无需AOSP)创建与GraphicBuffer
兼容的OpenGL纹理表面?如果可以,如何实现?