我正在使用SDL 1.3的官方Android端口,並使用它來設置GLES2渲染器。它適用於大多數設備,但對於一個用戶而言,它不起作用。日誌輸出顯示以下錯誤:爲什麼glGetIntegerv爲GL_NUM_SHADER_BINARY_FORMATS生成GL_INVALID_ENUM?
error of type 0x500 glGetIntegerv
我查找了0x500,它引用了GL_INVALID_ENUM。我已經在SDL庫中的以下代碼中追蹤了問題的發生地點:(完整的源代碼非常大,我剪掉了日誌記錄和基本的錯誤檢查行,所以如果我沒有在這裏包含足夠的信息,請告訴我)
glGetIntegerv(GL_NUM_SHADER_BINARY_FORMATS, &nFormats);
glGetBooleanv(GL_SHADER_COMPILER, &hasCompiler);
if(hasCompiler)
++nFormats;
rdata->shader_formats = (GLenum *) SDL_calloc(nFormats, sizeof(GLenum));
rdata->shader_format_count = nFormats;
glGetIntegerv(GL_SHADER_BINARY_FORMATS, (GLint *) rdata->shader_formats);
緊接最後一行(glGetIntegerv爲GL_SHADER_BINARY_FORMATS),glGetError()之後返回GL_INVALID_ENUM。
這主要是一種猜測,但在這種情況下,如果我正確讀取它,違反規範,這可能意味着設備不支持任何二進制着色器格式(如果GL_NUM_SHADER_BINARY_FORMATS == 0,則'假設'沒有人會調用GL_SHADER_BINARY_FORMATS) 。 – harism 2012-01-08 20:09:39
謝謝,這似乎是合理的。我會看看零是否是返回值,並且看看是否跳過這部分將在稍後導致任何其他問題。 – paulscode 2012-01-08 21:39:50
原來GL_NUM_SHADER_BINARY_FORMATS == 1(在上面的代碼示例中nFormats變成了2,因爲「hasCompiler」爲true)。但是,GL_SHADER_BINARY_FORMATS的glGetIntegerv仍然會導致GL_INVALID_ENUM。當問題發生時,我通過告訴代碼中存在零着色器二進制格式來解決這個問題,但是我仍然想知道爲什麼會發生這種情況。儘管非常感謝您的提示,但如果您沒有提出建議,可能需要更長的時間才能提出解決方法! – paulscode 2012-01-09 03:04:10