具有 OpenGL ES 3.1 上下文的 GLSurfaceView
GLSurfaceView with OpenGL ES 3.1 context
我正在使用 OpenGL Android。我知道如何使用 GLSurfaceView
及其自定义派生 类 通过 GLSurfaceView
:
的方法创建 OpenGL ES 2.0 上下文
setEGLContextClientVersion(2);
和 OpenGL ES 3.0 上下文:
setEGLContextClientVersion(3);
如何为 OpenGL ES 3.1 创建上下文?
您不能在创建上下文时明确请求 3.1。根据我的理解,3.1 不作为与 3.0 分开的上下文类型处理。本质上,支持 3.1 的上下文只是一个还支持附加 3.1 功能的 3.0 上下文。
这意味着您仍然可以使用:
setEGLContextClientVersion(3);
如果你想check/verify context 支持什么版本,你可以在context up 和运行:
后查询它
int[] vers = new int[2];
GLES30.glGetIntegerv(GLES30.GL_MAJOR_VERSION, vers, 0);
GLES30.glGetIntegerv(GLES30.GL_MINOR_VERSION, vers, 1);
if (vers[0] > 3 || (vers[0] == 3 && vers[1] >= 1)) {
// We have at least ES 3.1.
}
背景
最新版本的 EGL,即 1.5 [*],实际上确实具有允许指定主要版本和次要版本的上下文创建属性(属性 EGL_CONTEXT_MAJOR_VERSION
和 EGL_CONTEXT_MINOR_VERSION
)。 1.4 及之前的版本只有 EGL_CONTEXT_CLIENT_VERSION
,因此它们没有在创建上下文时指定次要版本的机制。
最新发布的 Android 版本是 5.1.1 [*],仍然只支持 EGL 1.4。所以这不仅仅是GLSurfaceView
不提供接口的问题。较低的本机层也不支持指定次要版本。因此,在 3.0 上下文中添加 3.1 支持确实是唯一的选择。
[*] 在写这个答案的时候。
我正在使用 OpenGL Android。我知道如何使用 GLSurfaceView
及其自定义派生 类 通过 GLSurfaceView
:
setEGLContextClientVersion(2);
和 OpenGL ES 3.0 上下文:
setEGLContextClientVersion(3);
如何为 OpenGL ES 3.1 创建上下文?
您不能在创建上下文时明确请求 3.1。根据我的理解,3.1 不作为与 3.0 分开的上下文类型处理。本质上,支持 3.1 的上下文只是一个还支持附加 3.1 功能的 3.0 上下文。
这意味着您仍然可以使用:
setEGLContextClientVersion(3);
如果你想check/verify context 支持什么版本,你可以在context up 和运行:
后查询它int[] vers = new int[2];
GLES30.glGetIntegerv(GLES30.GL_MAJOR_VERSION, vers, 0);
GLES30.glGetIntegerv(GLES30.GL_MINOR_VERSION, vers, 1);
if (vers[0] > 3 || (vers[0] == 3 && vers[1] >= 1)) {
// We have at least ES 3.1.
}
背景
最新版本的 EGL,即 1.5 [*],实际上确实具有允许指定主要版本和次要版本的上下文创建属性(属性 EGL_CONTEXT_MAJOR_VERSION
和 EGL_CONTEXT_MINOR_VERSION
)。 1.4 及之前的版本只有 EGL_CONTEXT_CLIENT_VERSION
,因此它们没有在创建上下文时指定次要版本的机制。
最新发布的 Android 版本是 5.1.1 [*],仍然只支持 EGL 1.4。所以这不仅仅是GLSurfaceView
不提供接口的问题。较低的本机层也不支持指定次要版本。因此,在 3.0 上下文中添加 3.1 支持确实是唯一的选择。
[*] 在写这个答案的时候。