Crash OpenGL avec les cartes graphiques NVidia
Bonjour,
Je code actuellement un viewer d'objet 3D. Mon logiciel contient 4 fenêtres montrant l'objets sous différents Angles.
Jusque là tout va plutôt bien. Je développe ce logiciel avec Qt et utilise donc les Objets OpenGL de cette librairie.
Mon problème est que sur les PC contenant une carte graphique NVidia, le logiciel crash dès que le logiciel essai d'afficher l'objet. J'ai donc tenté d'installer une carte graphique NVidia sur mon PC de développement ( je retrouve mon crash), mon problème est que le logiciel ne crash pas lorsque j'essai de le lancer en mode Debug.
Les informations que j'ai pu récupérer de ce crash sont :
Code:
1 2 3 4 5 6
| <EXE NAME="nvoglv64.DLL" FILTER="CMI_FILTER_THISFILEONLY">
<MATCHING_FILE NAME="nvoglv64.dll" SIZE="30487880" CHECKSUM="0x5AA5A01B" BIN_FILE_VERSION="10.18.13.5362" BIN_PRODUCT_VERSION="10.18.13.5362" PRODUCT_VERSION="10.18.13.5362" FILE_DESCRIPTION="NVIDIA Compatible OpenGL ICD" COMPANY_NAME="NVIDIA Corporation" PRODUCT_NAME="NVIDIA Compatible OpenGL ICD" FILE_VERSION="10.18.13.5362" ORIGINAL_FILENAME="nvoglv32.dll" INTERNAL_NAME="nvoglv32.dll" LEGAL_COPYRIGHT="(C) 2015 NVIDIA Corporation. All rights reserved." VERDATEHI="0x0" VERDATELO="0x0" VERFILEOS="0x40004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x1D17BE1" LINKER_VERSION="0x10064" UPTO_BIN_FILE_VERSION="10.18.13.5362" UPTO_BIN_PRODUCT_VERSION="10.18.13.5362" LINK_DATE="07/23/2015 00:14:44" UPTO_LINK_DATE="07/23/2015 00:14:44" EXPORT_NAME="nvoglv64.dll" VER_LANGUAGE="Anglais (États-Unis) [0x409]" EXE_WRAPPER="0x0" />
</EXE>
<EXE NAME="kernel32.dll" FILTER="CMI_FILTER_THISFILEONLY">
<MATCHING_FILE NAME="kernel32.dll" SIZE="1163264" CHECKSUM="0xADFC88B8" BIN_FILE_VERSION="6.1.7601.23392" BIN_PRODUCT_VERSION="6.1.7601.23392" PRODUCT_VERSION="6.1.7601.18015" FILE_DESCRIPTION="DLL du client API BASE Windows NT" COMPANY_NAME="Microsoft Corporation" PRODUCT_NAME="Système dexploitation Microsoft® Windows®" FILE_VERSION="6.1.7601.18015 (win7sp1_gdr.121129-1432)" ORIGINAL_FILENAME="kernel32" INTERNAL_NAME="kernel32" LEGAL_COPYRIGHT="© Microsoft Corporation. Tous droits réservés." VERDATEHI="0x0" VERDATELO="0x0" VERFILEOS="0x40004" VERFILETYPE="0x2" MODULE_TYPE="WIN32" PE_CHECKSUM="0x11D048" LINKER_VERSION="0x60001" UPTO_BIN_FILE_VERSION="6.1.7601.23392" UPTO_BIN_PRODUCT_VERSION="6.1.7601.23392" LINK_DATE="03/17/2016 22:56:03" UPTO_LINK_DATE="03/17/2016 22:56:03" EXPORT_NAME="KERNEL32.dll" VER_LANGUAGE="Français (France) [0x40c]" EXE_WRAPPER="0x0" />
</EXE> |
Voici la manière dont j'affiche mes objets :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| void Apercu3D::AfficheObjet3D(unsigned int indice, bool picking)
{
QMap<int, QGLBuffer>::Iterator itVertex = listeVertexBuffer.find(listeDesObjets.GetObjectByIndice(indice).GetID());
int nbPoint = listeDesObjets.GetObjectByIndice(indice).GetNbTriangles() * 3;
if (itVertex == listeVertexBuffer.end())
{
vector<CPoint> listePoint = listeDesObjets.GetObjectByIndice(indice).GetPointDessin();
vector<CPoint> listeNormal = listeDesObjets.GetObjectByIndice(indice).GetPointNormal();
int nbPointVBO = static_cast<int>(listePoint.size());
int nbNormal = static_cast<int>(listeNormal.size());
vector<CPoint> laVBO;
laVBO.reserve(nbPointVBO + nbNormal);
for (int i = 0; i < nbPointVBO; ++i)
{
laVBO.push_back(listePoint[i]);
laVBO.push_back(listeNormal[i]);
}
itVertex = listeVertexBuffer.insert(listeDesObjets.GetObjectByIndice(indice).GetID(), QGLBuffer());
itVertex.value().create();
itVertex.value().bind();
itVertex.value().allocate((nbPointVBO + nbNormal) * sizeof(CPoint));
itVertex.value().write(0, laVBO.data(), ((int)laVBO.size() * sizeof(CPoint)));
itVertex.value().release();
}
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnable(GL_PROGRAM_POINT_SIZE);
itVertex.value().bind();
// Vertex attribute
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 2 * sizeof(CPoint), (GLvoid*)0);
glEnableVertexAttribArray(0);
// Normal attribute
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 2 * sizeof(CPoint), (GLvoid*)sizeof(CPoint));
glEnableVertexAttribArray(1);
//Choix du mode d'affichage
if (modeAffichage == FIL_DE_FER)
{
glLineWidth(1);
glPolygonMode(GL_FRONT_AND_BACK , GL_LINE);
}
else if (modeAffichage == VERTEX)
{
glPointSize(5.0);
glPolygonMode(GL_FRONT_AND_BACK , GL_POINT);
}
else
glPolygonMode ( GL_FRONT_AND_BACK , GL_FILL);
glDrawArrays(GL_TRIANGLES,0,nbPoint);
itVertex.value().release();
glPolygonMode ( GL_FRONT_AND_BACK , GL_FILL ) ;
glDisable(GL_PROGRAM_POINT_SIZE);
glEnableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
} |
Avez vous déjà eu ce genre de problème?
Y a t'il quelques chose à ajouter pour gérer les carte NVIDIA?
Voyez vous des choses suspects dans mon code?
Merci d'avance pour vos futurs réponses.