C#.NET3.5sp1アプリケーションにたくさんのOpenGlレンダリングコードがあります。コードの一部は、この質問にあります。
大きな問題:915MやQ35などのIntelチップセットでコードがまったく実行されていません。これらのチップセットはopengl1.4を実行するように仕様が定められており、私のコードはすべて2の累乗です。マシンに応じて、DellまたはIntelの最新のドライバにアップデートしてみました。
クラッシュの失敗には2つのタイプがあります。
- glActiveTextureARBで失敗します。915Mは、その拡張機能にそれを含まないようです。
- シェーダーの読み込みに失敗しました。つまり、glGenProgramsARBです。
XPの915MまたはWindows7のQ35でこれらの関数を呼び出そうとすると、マシンの現在の状態に応じて、フリーズまたはクラッシュが発生します。
もう1つの悪い障害があります。これは、ディスプレイが前の質問を修正していないことです。つまり、レンダリングされたディスプレイは、16を表示するはずのときに8ビットデータを表示しているように見えます。これは、XPを実行している最新のdellドライバーであるQ35チップセットで発生しています。
これについて何か考えはありますか?glDrawPixelsに戻ることを検討しています。それは遅いですが、機能するからです。
編集:より多くのコード!次のコードは、Q35チップセットを搭載したWindows XPWindows7マシンの両方でGL_INVALID_VALUEエラーで失敗します。
const int mSize = 256;
ushort[] theImage = new ushort[mSize * mSize];
...
//datasetup
int x, y, i = 0 ;
for (x = 0; x < mSize; x++) {
for (y = 0; y < mSize; y++) {
theImage[(y * mSize) + x] = (ushort)i++;
}
}
...
//onpaint
int theTexName;
Gl.glGenTextures(1, out theTexName);
Gl.glBindTexture(Gl.GL_TEXTURE_2D, theTexName);
Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_LUMINANCE16, mSize, mSize,
0, Gl.GL_LUMINANCE, Gl.GL_UNSIGNED_SHORT, theImage);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
//theMagBuffer = null;
Gl.glDisable(Gl.GL_BLEND);
Gl.glEnable(Gl.GL_TEXTURE_2D);
Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL);
Gl.glColor4d(1.0, 1.0, 1.0, 1.0);
Gl.glPushMatrix();
Gl.glBindTexture(Gl.GL_TEXTURE_2D, theTexName);
Gl.glBegin(Gl.GL_QUADS);
Gl.glTexCoord2f(0, 1);
Gl.glVertex2f(0, mSize);
Gl.glTexCoord2f(0, 0);
Gl.glVertex2f(0, 0);
Gl.glTexCoord2f(1, 0);
Gl.glVertex2f(mSize, 0);
Gl.glTexCoord2f(1, 1);
Gl.glVertex2f(mSize, mSize);
Gl.glEnd();
Gl.glDisable(Gl.GL_TEXTURE_2D);
Gl.glDisable(Gl.GL_FRAGMENT_PROGRAM_ARB);
Gl.glPopMatrix();
GetGLError("MAG");
Gl.glFinish();