C# では、Esri ArcMap 動的表示 (即時モード) の OpenGL コンテキスト内で、テクスチャを作成しようとしています。
GL.glEnable(GL.GL_TEXTURE_2D);
uint[] textures = new uint[1];
GL.glBindTexture(1, textures[0]);
uint error = GL.glGetError();
の値error
は 1281 (無効な値) です。
確認しました - glBegin/glEnd 呼び出しの間にはなく、コンテキストは有効です。私もGLIntercept
呼び出しとエラーをチェックしていましたが、それは私に偽陰性を与えるようです(完全な呼び出しリストをエラーと比較すると、エラーは一致しません-完全な関数リストが表示されている間、glBeginの前に呼び出されるglEndのようなものだけですそのようなことは今までありませんでした)。
ドライバーの問題だと思います。Win7 64 (アプリは 32 ビット) で ATI Radeon 2400 Pro を実行しています。私が使用している ESRI のバージョンは 9.3.1 sp1 です。
私はそれをかなりグーグルで検索し、 http: //www.opengl.org/wiki/Common_Mistakes を見ましたが、私の問題に似たものは何も見つかりません。
そのコードに基づくすべてのプログラムで発生するわけではないようですが、一部のプログラムでは常に発生するため、本当に混乱しています。
次に何を確認すればよいですか?
編集:
そのエラーの前に (実際にはかなり前に) 実行されていたコードを削除し始めたところ、多角形を描画する場合 (そのテクスチャとは関係なく、 glVertexPointer
andを使用して描画される多角形で、テクスチャglDrawArrays
はまったく関連していません)、glLineWidth
そのポリゴンを描画する前に見つかった を削除します。テクスチャをバインドするときにエラーは発生しません。
これはばかげたことであり、意味がなく、ドライバーまたは OpenGL の理解に大きな問題があることはわかっていますが、どちらを理解することはできません :-)
私は削除に非常に注意を払いましたが、それは実際にはその特定の関数のその行だけです:
GL.glDisable(GL.GL_TEXTURE_2D);
GL.glPushMatrix();
GL.glLoadIdentity();
GL.glLineWidth(someWidthParameter); // <-- The only line I comment.
GL.glEnableClientState(GL.GL_VERTEX_ARRAY);
GL.glTranslate(...);
GL.glScale(...);
GL.glVertexPointer(...);
GL.glDrawArrays(...)
GL.glDisableClientState(GL.GL_VERTEX_ARRAY);
GL.glPopMatrix();
GL.glEnable(GL.GL_TEXTURE_2D);
だから今、私は以前よりもさらに混乱しています... 何かアイデアはありますか?