我在 C# .NET 3.5 sp1 应用程序中有很多 OpenGL 渲染代码。一些代码可以在这个问题中找到。
大问题:代码根本无法在英特尔芯片组上运行,例如 915M 或 Q35。这些芯片组被指定为运行 opengl 1.4,我的代码都是 2 的幂等。我已经尝试更新到戴尔或英特尔的最新驱动程序,具体取决于机器。
有两种类型的崩溃故障:
- glActiveTextureARB 失败。915M 显然不包括在其扩展中。
- 着色器加载失败,即 glGenProgramsARB。
尝试在 XP 的 915M 或 Windows 7 的 Q35 上调用这些函数会导致死机或崩溃,这取决于机器目前的感觉。
还有一个更严重的故障,那就是显示器没有解决之前的问题,即渲染的显示器看起来像是在显示 8 位数据,而它应该显示 16。这发生在 Q35 芯片组、最新的戴尔驱动程序、运行 XP 上。
对此有什么想法吗?我正在考虑回到 glDrawPixels,因为即使速度很慢,它也可以工作。
编辑:更多代码!以下代码在带有 Q35 芯片组的 windows xp 和 windows 7 机器上都失败并出现 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();