IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

read access violation glBindBuffer [OpenGL 3.x]


Sujet :

OpenGL

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut read access violation glBindBuffer
    Bonjour (ou rebonjour pour certains),

    Voilà j'ai un read access violation, erreur basique encore une fois sur un glBindBuffer, voici le bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    GLuint handle[] = {0, 1};
    glGenBuffers(2, handle);
     
    glBindBuffer(GL_ARRAY_BUFFER, handle[0]); ------ Erreur soulevé ici
    glBufferData(GL_ARRAY_BUFFER, 24 * 3 * sizeof(float), v, GL_STATIC_DRAW);
     
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, handle[1]);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36 * sizeof(GLuint), el, GL_STATIC_DRAW);

    les deux solutions trouvés sont l'une à propos de la carte graphique, mais je rame là dessus je n'ai donc encore rien pu essayer. L'autre serait à propos de glewInit non appelé, sauf que je n'utilise pas glew et que je ne veux pas l'utiliser ... Le code est basé sur une application tiré du livre OpenGL 4.0 Shading Cookbook, qui doit marcher normalement (travaillant en qt, j'avais la flemme de perdre du temps à le compiler, je l'avoue).

    Des idées, explication, quelque chose ?

    Merci par avance et pour l'attention !

  2. #2
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    Pour information, si je place le bout de code suivant avant et non après le bout précédent, l'erreur est renvoyé au glBindVertexArray de ce bout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    glGenVertexArrays(1, &m_vaoHandle);
    glBindVertexArray(m_vaoHandle);

  3. #3
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Je suppose que vu que tu n'utilises pas GLEW, tu as toi-même initialisé les fonctions de l'API OpenGL non supportées de base par Windows? (dont font notamment partie les fonctions de gestion des VBO et VAO)
    Je pense que oui, ou que ce n'est pas nécessaire, car tu arrives à initialiser ton VAO (tu arrives bien à l'initialiser?)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  4. #4
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    Je suis passée par un wrap Qt et j'utilise QOpenGLFunctions_3_1, je suppose donc qu'ils l'ont fait auparavant. Les deux fonctions où le problème est soulevé appartiennent à cette classe. Du coup, je ne sais pas si c'est un problème du côté de Qt ou non :S

  5. #5
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    As-tu vérifié les valeurs contenues dans handle, après l'appel à glGenBuffers?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  6. #6
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    J'ai 0 et 1 comme à l'initialisation, je ne sais pas si c'est normal

  7. #7
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    C'est bizarre pour le 0.
    Tu devrais initialiser à -1 ou GL_INVALID_INDEX tes 2 valeurs.
    Ensuite, utilise la fonction glGetError (de cette manière, ça marche bien), c'est ta meilleure amie, ou les extensions de débogage, si tu y as accès.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  8. #8
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    J'ai mis -1, l'exception est en fait levé juste après le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glGenBuffers(2, handle);
    J'ai mis un point d'arrêt avant, vérifier ça valeur (non défini puisque initialisé à -1, j'ai quelque chose comme 429694..95), refait une step et l'exception se lève à ce moment là. Désolé pour ce détail éronné :S

    Je vais regarder les liens passés et je repasse dès que j'ai du nouveau Merci beaucoup !

  9. #9
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    Je galère ...

    le premier lien j'ai un problème de "LNK2019", mais aucune idée du pourquoi (fichiers GLErrors)

    Le second me met "C2373: 'OpenGL::CallbackDebugLog'ÿ: red‚finitionÿ; modificateurs de type diff‚rents
    \GlDebug.hpp(57)ÿ: voir la d‚claration de 'OpenGL::CallbackDebugLog'" (fichiers GlDebug)

  10. #10
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Pour le premier je ne sais pas, mais pour le second, ajoute CALLBACK après le void, pour les 2 callbacks, dans le cpp
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  11. #11
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    Erreur LNK2019 également

    GlDebug.obj:-1: error: LNK2019: symbole externe non résolu __imp__glGetString@4 référencé dans la fonction "void __cdecl OpenGL::LoadDebugFunctions(void)" (?LoadDebugFunctions@OpenGL@@YAXXZ)

    J'ai remplacé #include <GL/gl.h> par #include <GL/GL.h> (car je n'ai pas en minuscule) et ça ne fait rien.

    Sinon c'est la ligne 832 de QOpenGLFunctions_3_1 qui semble renvoyer l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    inline void QOpenGLFunctions_3_1::glGenBuffers(GLsizei n, GLuint *buffers)
    {
          d_1_5_Core->GenBuffers(n, buffers);
    }

  12. #12
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Ah oui... Qt (je l'aime pas beaucoup lui...)
    Effectivement glGetString que j'utilise est la version de base d'OpenGL, mais toi, il faudrait que tu utilises la version de QOpenGLFunctions.

    Mais en Qt, tu as ça: QOpenGLDebugLogger
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  13. #13
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    Merci ! Je n'ai pas le reflexe de prendre ce genre de classe Qt, je le devrais.

    QOpenGLDebugLogger ne me renvoie rien ... J'ai fait exactement ce qui est indiqué dans la doc qt, j'ai le qdebug de test d'affichage qui marche bien, mais rien de plus

  14. #14
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    J'ai une piste, mais là je rebloqué sur le pourquoi. J'ai décidé de revenir sur un exemple plus simple, un triangle, que je ne classe pas pour le moment. J'ai fait affiché le triangle coloré dans la classe de visualisation et tout marche pour le mieux que ce soit sur l'initialisation ou le render. Du coup, je l'ai classé comme suit :

    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
     
    #include "triangle.h"
     
    Triangle::Triangle(QOpenGLShaderProgram *program)
    {
        m_vertexAttr = program->attributeLocation("vPositions");
        m_colorsUniform = program->attributeLocation("vColor");
        m_vertices = new GLfloat[9];
        m_colors = new GLfloat[9];
     
        m_vertices[0] = -0.5f;
        m_vertices[1] = -0.5f;
        m_vertices[2] = 0.0f;
        m_vertices[3] = 0.5f;
        m_vertices[4] = -0.5f;
        m_vertices[5] = 0.0f;
        m_vertices[6] = 0.0f;
        m_vertices[7] = 1.0f;
        m_vertices[8] = 0.0f;
        m_vertices[9] = 0.0f;
        m_vertices[10] = 0.0f;
        m_vertices[11] = 0.0f;
     
        m_colors[0] = 1.0f;
        m_colors[1] = 0.0f;
        m_colors[2] = 0.0f;
        m_colors[3] = 0.0f;
        m_colors[4] = 1.0f;
        m_colors[5] = 0.0f;
        m_colors[6] = 0.0f;
        m_colors[7] = 0.0f;
        m_colors[8] = 1.0f;
        m_colors[9] = 0.0f;
        m_colors[10] = 0.0f;
        m_colors[11] = 1.0f;
    }
     
    void Triangle::render()
    {
        //program->setAttributeArray(m_skyboxAttribut, );
        glVertexAttribPointer(m_vertexAttr, 3, GL_FLOAT, GL_FALSE, 0, m_vertices);
        glVertexAttribPointer(m_colorsUniform, 3, GL_FLOAT, GL_FALSE, 0, m_colors);
     
        glEnableVertexAttribArray(m_vertexAttr);
        glEnableVertexAttribArray(m_colorsUniform);
     
        glDrawArrays(GL_TRIANGLES,0,3);//TRIANGLES 3 LINES 4 POINTS m_arraySize/3
        glDisableVertexAttribArray(m_vertexAttr);
        glDisableVertexAttribArray(m_colorsUniform);
    }
    j'ai repris exactement le code dans l'initialisation et je l'ai mis dans le constructeur, de même dans le render. J'ai bien fait attention à ce que l'ordre d'appel soit totalement identique, la seule modification étant de faire une classe. Mais j'ai un abord sur le glVertexAttribPointer du render, première méthode du render. Je pense que l'erreur précédente et celle-ci se rejoignent. Toutefois, je n'arrive pas à comprendre pourquoi en classant, je me retrouve avec cette erreur. Auriez vous des idées ?

    Merci pour votre attention

  15. #15
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Tu parles de classer, mais classer quoi?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  16. #16
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    Classer tout ce qui est spécifique au triangle (sa couleur, vertex, render ect.)

  17. #17
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 032
    Billets dans le blog
    12
    Par défaut
    Peut-on voir le code d'initialisation des tampons?
    D'ailleurs, lors de ton rendu tu ne bindes ni ton VAO ni tes VBO, c'est normal?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  18. #18
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    J'ai fait les bind dans le render entre temps. Je viens de trouver la solution ... Il manque simplement à l'initialisation dans la classe Triangle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    initializeOpenGLFunctions();
    Je l'avais mis dans la classe plus haut, mais il semblerait que ce soit nécessaire dans toutes les classes utilisant des fonctions de QOpenGLFunctions_3_1.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/11/2014, 17h15
  2. [DATA] Read Acces Violation In Task
    Par JeromeMATHIAS dans le forum SAS Base
    Réponses: 0
    Dernier message: 03/05/2011, 17h27
  3. access violation at adress 0057744.read of address 000000
    Par zanoubya dans le forum Débuter
    Réponses: 2
    Dernier message: 21/06/2010, 17h34
  4. [débutant]Access violation reading location
    Par gate35 dans le forum C++
    Réponses: 6
    Dernier message: 13/05/2009, 14h32
  5. Acess violation avec le composant TShockwaveCtl
    Par Nik_Meilleur dans le forum C++Builder
    Réponses: 1
    Dernier message: 07/04/2007, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo