2012-01-08 56 views
1

我正在使用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。

+0

這主要是一種猜測,但在這種情況下,如果我正確讀取它,違反規範,這可能意味着設備不支持任何二進制着色器格式(如果GL_NUM_SHADER_BINARY_FORMATS == 0,則'假設'沒有人會調用GL_SHADER_BINARY_FORMATS) 。 – harism 2012-01-08 20:09:39

+0

謝謝,這似乎是合理的。我會看看零是否是返回值,並且看看是否跳過這部分將在稍後導致任何其他問題。 – paulscode 2012-01-08 21:39:50

+0

原來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

回答

1

問題是您的系統上沒有正確支持GL_ARB_ES2_compatibility擴展。

通過GL_INVALID_ENUM它意味着它不知道GL_NUM_SHADER_BINARY_FORMATS和GL_SHADER_BINARY_FORMATS枚舉,這是所述擴展的一部分。

相比之下,GL_SHADER_COMPILER被識別出來,這很奇怪。

您可以嘗試使用GL_ARB_get_program_binary和使用這兩個替代:

#define GL_NUM_PROGRAM_BINARY_FORMATS        0x87fe 
#define GL_PROGRAM_BINARY_FORMATS         0x87ff 

注意的是,這些來自不同:

#define GL_SHADER_BINARY_FORMATS          0x8df8 
#define GL_NUM_SHADER_BINARY_FORMATS         0x8df9 

但是他們應該差不多這樣做。

+0

感謝您花時間回答!有沒有鏈接到一個這樣的例子?我很抱歉,我是GL新手,你的一些答案在我頭上(特別是,如何「使用GL_ARB_get_program_binary」,放置這些#define以及第一篇文章中的代碼中的其他內容是否需要更改。此外,這些更改是否會對那些正確支持「GL_ARB_ES2_compatibility擴展」的系統產生影響?(使用此應用程序的應用程序將在Android Market上分發給許多設備,其中大多數設備沒有上述問題) – paulscode 2012-01-24 14:15:35

+0

只需嘗試交換「SHADER」作爲「PROGRAM」,看看它有什麼... – 2012-01-24 16:44:18

+0

好吧,gotchya現在(對不起)。我會給它一個看看它是否有效(如果使用它對其他有負面影響設備)。 – paulscode 2012-01-25 23:24:03