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 :
Voici la manière dont j'affiche mes objets :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Avez vous déjà eu ce genre de problème?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
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.
Partager