2012-01-08 5 views
1

私はSDL 1.3の公式のAndroidポートを使用しており、それを使ってGLES2レンダラーを設定しています。これはほとんどのデバイスで動作しますが、1人のユーザーにとっては動作しません。ログ出力には次のエラーが表示されます。GL_NUM_SHADER_BINARY_FORMATSのglGetIntegervが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); 

直ちに最後の行(GL_SHADER_BINARY_FORMATS用glGetIntegerv)後、glGetError()はGL_INVALID_ENUMを返します。

+0

これは主に推測ですが、正しく読めばこの仕様ではデバイスがバイナリシェーダフォーマットをサポートしていない可能性があります(GL_NUM_SHADER_BINARY_FORMATS == 0の場合、誰もGL_SHADER_BINARY_FORMATSを呼び出すことはできません) 。 – harism

+0

ありがとう、それは妥当と思われます。ゼロが戻り値であるかどうかを確認し、この部分をスキップすると後で他の問題が発生するかどうかを確認します。 – paulscode

+0

GL_NUM_SHADER_BINARY_FORMATS == 1となります(上記のコード例では、 "hasCompiler"がtrueであるため、nFormatsは2になります)。しかし、GL_SHADER_BINARY_FORMATSのglGetIntegervは引き続きGL_INVALID_ENUMを引き起こしています。私は、問題が発生したときにゼロシェーダーバイナリ形式があることをコードに伝えることで問題を回避しましたが、なぜこれが起きているのか把握したいと思います。しかし、チップをおかげさまで、ありがとうございました。もしあなたがそれを提案していなかったら、回避策を出すのにもっと時間がかかりました! – paulscode

答えて

1

問題はGL_ARB_ES2_compatibility拡張がシステムで適切にサポートされていないことです。

GL_INVALID_ENUMは、上記の拡張の一部であるGL_NUM_SHADER_BINARY_FORMATSおよびGL_SHADER_BINARY_FORMATS列挙型を知らないことを意味します。

対照的に、GL_SHADER_COMPILERが認識されました。これは奇妙です。これらは異なっていることを

#define GL_NUM_PROGRAM_BINARY_FORMATS        0x87fe 
#define GL_PROGRAM_BINARY_FORMATS         0x87ff 

注:

あなたがGL_ARB_get_program_binaryを使用して、代わりにこれら二つを使用して試すことができます

#define GL_SHADER_BINARY_FORMATS          0x8df8 
#define GL_NUM_SHADER_BINARY_FORMATS         0x8df9 

をしかし、彼らはかなり同じことを行う必要があります。

+0

お時間をいただきありがとうございます!これを行う例へのリンクはありますか?私は謝罪する、私はGLに新しいとあなたの答えのいくつかは私の頭(具体的にどのように "GL_ARB_get_program_binary"を使用するには、それらの#definesを置くために、そして私の最初の投稿からコードの何かが変更する必要がある場合。また、これらの変更は、 "GL_ARB_ES2_compatibility extension"を適切にサポートするシステムには何らかの影響を及ぼしますか?(これを使用しているアプリケーションは、多くのデバイスにAndroidマーケットで配布されていますが、そのほとんどは前述の問題がありません) – paulscode

+0

"PROGRAM"の "SHADER"を入れ替えて何が起こっているのかを見てください... –

+0

今、それはうまくいっているかどうかを確認するためのショットを与えます(もしそれを使用すると他のデバイス)。 – paulscode

関連する問題