2

互換性のない画像テクスチャ解像度に起因するエラーをキャッチしようとしています

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, imgdata);


1. Compatible resolution, working fine = 1024x1024, 1920x1200, 1920x1080, 704x891
2. Incompatible resolutions, all giving error = 2058x1734, 1018x1280, 591x602, etc.

glTexImage2Dが#1の解像度で正常に動作し、#2の解像度でエラーが発生する理由がわかりません。次の解像度パターンを抽出できませんでした。これは、一部の解像度が正常に機能している場合とそうでない場合があることを意味します。どうしてか分かりません。

問題は、ユーザーが互換性のない解像度でテクスチャを作成しようとすると、OpenGLがエラーをキャッチし、テクスチャが作成されていない場合は0を取得する必要がありますが、glTexImage2Dは何も返さないため、ユーザーに安全なものを作成できません。「この解像度はサポートされていません。使用しないでください。」しかし、問題は、OpenGLがglTexImage2Dエラーをキャッチしないことです。

実行時の実行中

cout<<until here working fine..<<endl;

glTexImage2D(......) run-time execution stops here and windows gives not responding error.

cout<<"output of something that never executed"<<endl;
Here If I use glGetError() it never works. Because windows gives error in glTexImage2D.

だから、どうすればglTexImage2Dエラーをキャッチできるか知っている人はいますか?エラーが発生した場合は、「この画像は使用しないで、別の画像を使用してください」と表示します。そして0を返します。

このタスクを達成する方法は?また、一部の解像度でのみユーザーを制限することも考えましたが、これは解決策ではありません。右 ?

4

2 に答える 2

4
于 2012-12-22T12:32:34.383 に答える
0

これは奇妙なドライバのバグのようです。OpenGL呼び出しは、何を渡しても(無効なポインターまたはポインター操作で間違ったサイズでない限り)クラッシュすることはありません。また、ロードに失敗したテクスチャにパターンは見られません。

通常、有効なテクスチャに関しては、アスペクト比と寸法の3つの制限機能のみが必要です。

  • テクスチャは、高すぎたり広すぎたりして処理できない場合があります。
  • 古いカードでは、テクスチャを正方形にする必要がある場合があります(幅=高さ)。
  • 古いカードでは、テクスチャの寸法を2の累乗にする必要がある場合があります(幅= 2n ;高さ= 2m)。

テクスチャの寸法に実際のパターンが表示されません。

テクスチャフォーマット(つまり、色深度/カラーチャンネル)は別の問題かもしれませんが、それが実際にここに関係しているとは思わないでください。

于 2012-12-22T10:31:41.680 に答える