2014-01-16 35 views
0

我试图做的事:glBindBuffer与GL_PIXEL_PACK_BUFFER枚举返回错误代码

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

尝试阅读http://developer.android.com/training/graphics/opengl/environment.html – Xonar

+0

谢谢,但我忘了提及这是在本机可执行文件。 – jacob

+0

好吧,那么如何创建OpenGL上下文?你只需要设置上下文版本为3. – Xonar

回答

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之外的其他值的行为并未真正定义。

0

我使用的Nexus 7(2012年),而这可能是我的问题(虽然我认为eglCreateContext会失败EGL_CONTEXT_CLIENT_VERSION,3)

0

下面是在Android中初始化OpenGL ES 3.0上下文的正确方法 - 创建OpenGL ES 2.0上下文并检查创建上下文的GL版本是否为3.0。是的,你不需要明确指定EGL_CONTEXT_CLIENT_VERSION3 - GLES 3.0完全向后兼容w/2.0,这就是为什么如果硬件支持它,Android创建ES 3.0上下文的原因。如果硬件无法运行ES 3.0,则可以使用运行Android 2.2或更高版本的任何设备上100%的常用ES 2.0。

在我们的应用程序中,我正是按照这种方式来完成它,并且它可以工作(但我使用Java)。

在Android 4.3发布的第一天里,除了Romain Guy之外,没有人解释过这个问题:我相信这个人。

P.S.说到的Nexus 7第一代的 - 是的,它的GPU(的Tegra3)不支持ES 3.0,以及Tegra4 - 只有次世代Tegra5的Tegra K1)支持它。