如何通过 C++/NDK 访问 OpenGL ES 2(如果不支持EGL_NATIVE_RENDERABLE)

How to access OpenGL ES 2 via C++/NDK if EGL_NATIVE_RENDERABLE is not supported?

本文关键字:不支持 如果不 如果 EGL RENDERABLE NATIVE C++ 何通过 NDK 访问 ES      更新时间:2023-10-16

我的应用程序(用Java引导代码用C++编写)在我的Android MID设备上运行良好,但它无法在朋友的Moto MB865手机上运行。在深入研究 GL 上下文创建过程后,我发现EGL_NATIVE_RENDERABLE对于支持 OpenGL ES 2.0 的所有配置都是GL_FALSE

的。

这意味着我无法使用本机代码访问OpenGL ES 2.0。

为什么系统有这种奇怪的限制?我认为本机代码可以访问在此之前的所有OpenGL配置。

有什么方法可以解决此限制吗?还是我必须编写委托才能通过 JNI 访问 EGL2?

EGL_NATIVE_RENDERABLE

NDK无关。

它仅指示本机渲染 API 绘制缓冲区的功能。

请参阅 EGL 规范:http://www.khronos.org/registry/egl/specs/eglspec.1.4.pdf第2.2.3 Interaction With Native Rendering段:

像素图表面将始终支持本机渲染(到 本机渲染 API 可以绘制到本机像素图的范围)。像素地图 在混合本机和客户端 API 时通常使用图面 渲染是可取的,因为不需要在 对客户端 API 和本机 pixmap 可见的后台缓冲区 对本机呈现 API 可见。但是,像素图表面可能,对于 同样的原因,相对具有受限的功能和性能 到窗口和缓冲区图面。不支持本机渲染 通过 pbuffer 表面,因为 pbuffers 的颜色缓冲区是分配的 内部由 EGL 访问,无法通过任何其他方式访问。

问题的原因应该不同(不支持 GLES 2.0 等)。

相关文章: