GLSurfaceView与OpenGL ES 3.1上下文

时间:2015-09-24 15:51:47

标签: java android opengl-es-2.0 opengl-es-3.0 opengl-es-3.1

我正在使用OpenGL在Android上工作。我知道如何使用GLSurfaceView及其自定义派生类来创建具有GLSurfaceView方法的OpenGL ES 2.0上下文:

setEGLContextClientVersion(2); 

和OpenGL ES 3.0上下文:

setEGLContextClientVersion(3); 

如何为OpenGL ES 3.1创建上下文?

1 个答案:

答案 0 :(得分:3)

创建上下文时,您无法明确请求3.1。根据我的理解,3.1不作为与3.0分开的上下文类型处理。从本质上讲,支持3.1的上下文只是一个3.0上下文,也支持额外的3.1功能。

这意味着您仍然可以使用:

setEGLContextClientVersion(3);

如果要检查/验证上下文支持的版本,可以在上下文运行后查询它:

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_VERSIONEGL_CONTEXT_MINOR_VERSION)。 1.4之前的版本只包含EGL_CONTEXT_CLIENT_VERSION,因此在创建上下文时它们没有指定次要版本的机制。

最新发布的Android版本,即5.1.1 [*],仍然只支持EGL 1.4。因此,GLSurfaceView不提供界面的问题不仅仅是一个问题。较低的本机层也不支持指定次要版本。因此,向3.0上下文添加3.1支持是唯一的选择。

[*]在写这个答案的时候。