2014-01-16 36 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)支持它。