J'ai beaucoup de code de rendu OpenGl dans une application C# .NET 3.5 sp1. Une partie du code peut être trouvée dans this question.Les textures ne fonctionnent pas dans opengl/Tao pour C# sur les chipsets Intel
Énorme problème: Le code ne fonctionne pas du tout sur les chipsets Intel, comme le 915M ou le Q35. Ces chipsets sont spec'd pour courir 1.4 ouvert, et mon code est tout-puissant de deux et ainsi de suite. J'ai essayé de mettre à jour les derniers pilotes de Dell ou d'Intel, selon la machine.
Il existe deux types de défaillances de l'accident:
- A défaut sur glActiveTextureARB. 915M ne l'inclut apparemment pas dans ses extensions.
- A défaut de chargement de shader, à savoir glGenProgramsARB.
Si vous essayez d'appeler ces fonctions sur le 915M sous XP ou sur le Q35 sur Windows 7, cela provoque un gel ou un blocage, selon la configuration actuelle de la machine.
Un autre problème est encore plus grave: l'affichage ne corrige pas la question précédente, c'est-à-dire que l'affichage affiche des données 8 bits alors qu'il devrait apparaître 16. Cela se produit sur le chipset Q35 , en cours d'exécution XP.
Des commentaires à ce sujet? Je pense retourner à glDrawPixels, car même si c'est lent, ça fonctionne.
EDIT: plus de code! Le code suivant échoue avec une erreur de GL_INVALID_VALUE à la fois un windows xp a windows 7 machine avec le chipset 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();
Quand vous dites "mon code est tout pouvoir de deux gentil et ainsi de suite" voulez-vous dire que les textures sont une taille qui est une puissance de 2? – Chris
oui. Ce code n'est clairement pas conforme à la puissance de deux, je réalise maintenant. d'oh ... – mmr
Mais, pour être juste, ce code ne fonctionne pas avec la puissance de deux activé. – mmr