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 : 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 d’exploitation 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 : 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);
}
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.