0

グラフィック カード OpenGL で完全に動作するコードがあります。

ただし、GDI 汎用 OpenGL ドライバーを使用して OpenGL エミュレーションに切り替えると、非常に奇妙なエラーが発生します。

GL エラー - 関数 glBindTexture(GL_TEXTURE_2D,1) がエラー GL_INVALID_ENUM を生成しました

glBindTexture() のドキュメントには、GL_INVALID_ENUM は、ターゲットの列挙型が間違っている場合にのみ返すことができると書かれています。ただし、GL_TEXTURE_2D は正しい列挙型です。グラフィック カードの OpenGL ドライバーで動作します。

私は確信しています: 1) glBindTexture がそのエラーを生成しています - エラーログ付きの GLIntercept トラッカーを使用しています 2) テクスチャが割り当てられ、サイズは 512 x 4 です 3) テクスチャにはデータが割り当てられています: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_textureImage .width(), m_textureImage.height(), 0, GL_BGRA, GL_UNSIGNED_BYTE, m_textureImage.bits()); 4) テクスチャにデータを割り当ててから実際にテクスチャを使用するまでの間の OpenGL コンテキストは変更されません。

このようなエラーを返す可能性がある他の文書化されていない理由はありますか? 問題を見つける方法はありますか?

4

2 に答える 2

2

glBindTexture(GL_TEXTURE_2D, 1)(1)から返される値ではなく、固定テクスチャIDを割り当てるのは珍しいglGenTexturesです。とはいえ、無効な​​値はを返すべきではありませんGL_INVALID_ENUM

GL_TEXTURE_2Dを介してテクスチャデータを割り当てる前に、テクスチャ'name'(ID)をバインドしていglTexImage2Dますか?GLドライバーは2の累乗(NPOT)テクスチャをサポートしていますか?

最後に、GL状態でテクスチャリングを有効にしていますglEnable(GL_TEXTURE_2D)か?私はそれがあなたが言及したエラーコードをもたらすとは確信していませんが。

よくわかりません。あなたは私が言及したすべてをしたかもしれません!見落としの可能性を検討しているだけです。

于 2012-08-30T15:51:33.070 に答える
0

これは、GlIntercept 画像ロガーの問題として特定されています。ロガーは、OpenGL 1.1 では使用できないいくつかの OpenGL 1.2 列挙型を使用しています。

この問題は GLIntercept で修正されています。画像ログなしで GLIntercept を使用することは、GDI 汎用 OpenGL レンダラーにとって安全なはずです。

于 2012-09-07T10:16:55.613 に答える