0
目標:機器人API> = 23,的OpenGL ES 2.OpenGL ES:即使沒有當前上下文,glDeleteFramebuffers也會成功?
以下代碼
private void deleteFBO()
{
android.util.Log.e("FBO", "deleting "+mFramebufferID);
int[] textureIds = new int[1];
int[] mFBORenderToTexture = new int[1];
textureIds[0] = mTextureID;
mFBORenderToTexture[0] = mFramebufferID;
if(GLES20.glGetError()!=GLES20.GL_NO_ERROR)
android.util.Log.e("FBO", "error before deleting");
GLES20.glDeleteTextures(1, textureIds, 0);
GLES20.glDeleteFramebuffers(1, mFBORenderToTexture, 0);
if(GLES20.glGetError()!=GLES20.GL_NO_ERROR)
android.util.Log.e("FBO", "error after deleting");
}
不給我任何錯誤(即我不能看到 '錯誤之前/之後刪除')甚至儘管它肯定是從不包含任何OpenGL上下文的線程調用的。
這怎麼可能?或者,也許glDelete()調用真的會失敗,但我的代碼無法檢測到這一點?
似乎我不明白當持有上下文時需要做什麼OpenGL調用?當我嘗試調用它而沒有保持上下文時,glDrawArrays肯定會給我一個錯誤,並且我認爲我需要在每個情況下都保持它,包括上面的兩個glDelete *()。
是的,就是這樣 - 我設法證明glGetError()本身失敗。這是在Android模擬器和我的Nexus 4上。 – Leszek
這實際上是非常不幸的。那麼如何在這種情況下檢測到失敗的OpenGL調用呢?這裏glDelete()默默地失敗,應用程序似乎仍在運行,但內存當然不會釋放... – Leszek
不要寫錯誤的應用程序 - 這不是你應該在運行時不小心處理的情況。如果必須添加調試檢查,只需在'eglGetCurrentContext()'不返回'EGL_NO_CONTEXT'上添加斷言。 – solidpixel