我在C#.NET 3.5 sp1應用程序中有很多OpenGl渲染代碼。一些代碼可以在this question中找到。紋理不工作在opengl /陶英特爾芯片組上的C#
巨大的問題:代碼根本不在intel芯片組上運行,例如915M或Q35。這些芯片組專門用於運行opengl 1.4,我的代碼全部是功能強大的,等等。我嘗試更新從戴爾或英特爾的最新驅動程序,具體取決於機器。
有兩種類型的死機故障:
- 如果未能在glActiveTextureARB。 915M顯然不包括在其擴展中。
- 着色器加載失敗,即glGenProgramsARB。
試圖在XP中的915M或Windows 7上的Q35上調用這些函數會導致凍結或崩潰,具體取決於機器目前的感受。
還有一個更糟糕的失敗,那就是顯示器沒有修復上一個問題,即渲染的顯示器看起來應該顯示16時顯示8位數據。在Q35芯片組上出現這種情況,最新的dell驅動程序,運行XP。
對此有何看法?我正在考慮回到glDrawPixels,因爲即使這很慢,它也可以工作。
編輯:更多代碼!下面的代碼將失敗,並在同時獲得Windows的GL_INVALID_VALUE錯誤XP中的Windows 7計算機與Q35芯片組:
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();
當你說「我的代碼是所有冪的兩個漂亮的等等」你的意思是,紋理是一個大小是2的冪? – Chris 2009-07-16 03:15:25