4.5.13492 Core Profile Context 22.19.673.0
VAO 1 generated
VBO 1 generated
VBO size: 72
New raw model with 6 vertices created
Using VAO 1
Using VAO 1
Using VAO 1
Stopping...
VAO 1 deleted
VBO 1 deleted
Cela fait maintenant plusieurs jours que je cherche, merci pour vos futures réponses. Je tiens aussi à préciser que j'ai une boucle qui vérifie s'il y a des erreurs OpenGL, glGetError == GL_NO_ERROR et que les constructeurs de copie des VBO & VAO ainsi que leurs opérateurs = ont été supprimés. Cordialement, ShE3py
Ben déjà ta boucle de rendu appelle glBufferSubData, qui sert à mettre en VRAM des données qui sont en RAM, donc elle ne peut en aucun cas servir à récupérer les données du buffer.
Ensuite, L'initialisation du VBO et du VAO sont deux choses indépendantes. Un VBO est créé puis rempli (glGenBuffers, glBufferData, glBufferSubData) Ensuite le VAO est créé et "rempli" (en fait on dit quels VBOs il utilisera et le layout des données de ces VBOs).
De plus, dans ton constructeur de VAO tu utilises une variable temporaire de type VBO, qui est donc créée, remplie, puis détruite à la sortie du constructeur de VAO. Donc ton VAO utilise un VBO qui n'existe plus (au mieux).
Conclusion : utilise les extensions de débogage OpenGL, tu devrais te faire insulter par ton driver de carte graphique...
EDIT :
C'est en partie ce qui me saoule avec les tutoriels OpenGL moderne, ils mélangent toujours l'initialisation des VBO avec l'initialisation du VAO qui les utilisera, du coup les gens font l'amalgame.
- Edité par dragonjoker 3 septembre 2017 à 19:12:48
Si vous ne trouvez plus rien, cherchez autre chose.
@Dragonjoker : Quand tu dis ça, faut prendre des pincettes "Ben déjà ta boucle de rendu appelle glBufferSubData, qui sert à mettre en VRAM des données qui sont en RAM"
http://cpp-rendering.io : Vous trouverez tout ce dont vous avez besoin sur Vulkan / OpenGL et le rendu 3D !
@Dragonjoker : Quand tu dis ça, faut prendre des pincettes "Ben déjà ta boucle de rendu appelle glBufferSubData, qui sert à mettre en VRAM des données qui sont en RAM"
Et au fait, learnopengl a le même défaut que les autres, au niveau de la séparation de l'initialisation des VBO et de l'initialisation des VAO, cf. le chapitre sur les VAO de cette page : https://learnopengl.com/#!Getting-started/Hello-Triangle Après, je ne critique pas la qualité de ces tutos, par contre.
- Edité par dragonjoker 4 septembre 2017 à 12:50:14
Si vous ne trouvez plus rien, cherchez autre chose.
Ben déjà ta boucle de rendu appelle glBufferSubData, qui sert à mettre en VRAM des données qui sont en RAM, donc elle ne peut en aucun cas servir à récupérer les données du buffer.
D'après la doc et ce que j'en ai compris, glBufferData créer un nouveau buffer alors que glBufferSubData change les données d'un buffer.
dragonjoker a écrit:
Ensuite, L'initialisation du VBO et du VAO sont deux choses indépendantes. Un VBO est créé puis rempli (glGenBuffers, glBufferData, glBufferSubData) Ensuite le VAO est créé et "rempli" (en fait on dit quels VBOs il utilisera et le layout des données de ces VBOs).
De plus, dans ton constructeur de VAO tu utilises une variable temporaire de type VBO, qui est donc créée, remplie, puis détruite à la sortie du constructeur de VAO. Donc ton VAO utilise un VBO qui n'existe plus (au mieux).
Donc si je comprend bien je devrais faire sa :
Créer un VBO -> glGenBuffers Remplir le VBO -> glBufferData Créer un VAO -> glGenVertexArrays Remplir le VAO avec le VBO -> ???
dragonjoker a écrit:
Conclusion : utilise les extensions de débogage OpenGL, tu devrais te faire insulter par ton driver de carte graphique..
Il ne manque pas un 'pas' ? Et sinon je débog avec wgl?
EDIT: Je viens de modifier le topic, j'ai mit à jours le code car il y avait effectivement un problème au niveau des VBOs qui se détruisaient tous seuls, maintenant j'utilise des pointeurs mais j'ai toujours la même erreur. J'ai essayer avec WGL, mais mon pc ne semble pas être compatible.
Ben là, vu comment ton code est affiché, je n'ai bizarrement pas envie de le lire (c'est pas de ta faute hein, on dit merci à l'éditeur de messages de OCR...)
Si vous ne trouvez plus rien, cherchez autre chose.
L'appel à glEnableVertexAttribArray devrait être dans la fonction VBO::bind() (je l'avais oubliée, cette fonction), car c'est une commande enregistrée dans le VAO
Si vous ne trouvez plus rien, cherchez autre chose.
Ben en fait, c'est tout con, et sans rapport avec tes VBO / VAO.
Ca se passe dans ta fonction GameWindow::update() (appelée à chaque tour de boucle) :
1) clear le FBO 2) swap buffers
Du coup le dessin que tu pouvais avoir fait auparavant est viré par le clear, et tu swappes les buffers.
J'ai ajouté une fonction GameWindow::swap() qui ne fait que le swap buffers (en l'enlevant donc de la fonction update()) et j'ai ton rectangle. J'ai donc aussi modifié MainGameLoop::onFrame(), comme suit :
Ha ok... Et sinon, si j'ai bien pensé swap les buffers sa fait qu'en gros tout les rendus sont calculer dans un framebuffer invisible, et sa le met dans le framebuffer de l'écran ou c'est totalement autre chose?
Ben généralement, on initialise OpenGL en double buffering.
Du coup, les actions de dessin se font sur le back buffer, et le buffer présenté à la fenêtre est le front buffer. La fonction SwapBuffers permet donc d'échanger le buffer de présentation (front) et le buffer de dessin (back). Ca permet notamment d'éviter les problèmes de scintillement dus aux clears puis dessin.
C'est donc la dernière action à effectuer, une fois que toutes les actions de dessin sont terminées (alors que la première action est généralement de clear le buffer)
Si vous ne trouvez plus rien, cherchez autre chose.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.
Si vous ne trouvez plus rien, cherchez autre chose.