我正在尝试:
glBindBuffer(GL_PIXEL_PACK_BUFFER,pbo_id);
在Android 4.3中我得到'枚举错误代码',虽然文档说我可以使用GL_PIXEL_PACK_BUFFER。也许我没有使用'OpenGL ES 3.0'? 我需要什么来强制使用v3?
OpenGL上下文:
EGLint numConfigs = 0;
EGLint configAttribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_RECORDABLE_ANDROID, 1,
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_ALPHA_SIZE, 8,
EGL_NONE
};
result = eglChooseConfig(mEglDisplay, configAttribs, &mEglConfig, 1,
&numConfigs);
if (result != EGL_TRUE) {
fprintf(stderr,"eglChooseConfig error: %#x", eglGetError());
return UNKNOWN_ERROR;
}
EGLint contextAttribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 3,
EGL_NONE
};
mEglContext = eglCreateContext(mEglDisplay, mEglConfig, EGL_NO_CONTEXT,
contextAttribs);
if (mEglContext == EGL_NO_CONTEXT) {
fprintf(stderr,"eglCreateContext error: %#x", eglGetError());
return UNKNOWN_ERROR;
}
答案 0 :(得分:1)
所以是的,让Android 4.3不保证OpenGL ES 3.0,它只是为兼容设备启用它。该设备需要支持OpenGL ES 3.0的GPU。 Nexus 7(2012)拥有仅支持OpenGL ES 2.0的NVIDIA Tegra 3 SoC。您无法“强制”此设备使用3.0上下文。
至于eglCreateContext
没有失败,我不确定。快速查看规范似乎没有真正定义除2和1之外的其他值的行为。
答案 1 :(得分:0)
我正在使用nexus 7(2012),这可能是我的问题(尽管我认为eglCreateContext会因EGL_CONTEXT_CLIENT_VERSION而失败,3)
答案 2 :(得分:0)
这是在Android中初始化OpenGL ES 3.0上下文的正确方法 - 创建OpenGL ES 2.0上下文并检查创建的上下文的GL版本是否为3.0。是的,您不需要明确指定EGL_CONTEXT_CLIENT_VERSION
3
- GLES 3.0完全向后兼容w / 2.0,这就是Android在硬件支持时创建ES 3.0上下文的原因。如果硬件无法运行ES 3.0,您将获得通常的ES 2.0,在运行Android 2.2及更高版本的任何设备上100%可用。
在我们的应用程序中,我正是以这种方式完成它并且它有效(尽管我使用Java)。
在Android 4.3发布的第一天,除了Romain Guy之外没有其他人解释过:https://plus.google.com/u/0/+RomainGuy/posts/iJmTjpUfR5E - 我相信这个人。
P.S。说到Nexus 7 1st gen - 是的它的GPU( Tegra3 )不支持ES 3.0,以及 Tegra4 - 只有下一代 Tegra5 ( Tegra K1 )支持它。