Erreur de segmentation avec glBufferData ()

Je n’arrive pas à comprendre pourquoi ce code est défectueux:

AxesMarker::AxesMarker(float size) : size_(size), vbo_vertices_(0), vbo_elements_(0) { Vertex vertices[6] = { Vertex(Color4f::RED, Vector3f::ZERO, Vector3f::ZERO), Vertex(Color4f::RED, Vector3f::ZERO, Vector3f(size_, 0.0f, 0.0f)), Vertex(Color4f::BLUE, Vector3f::ZERO, Vector3f::ZERO), Vertex(Color4f::BLUE, Vector3f::ZERO, Vector3f(0.0f, size_, 0.0f)), Vertex(Color4f::GREEN, Vector3f::ZERO, Vector3f::ZERO), Vertex(Color4f::GREEN, Vector3f::ZERO, Vector3f(0.0f, size_, 0.0f)) }; GLuint elements[6] = { 0, 1, 2, 3, 4, 5 }; fprintf(stderr, "sizeof(vertices): %d, sizeof(Vertex): %d", (int) sizeof(vertices), (int) sizeof(Vertex)); /* create buffers */ glGenBuffers(1, &vbo_vertices_); glGenBuffers(1, &vbo_elements_); /* bind buffers */ glBindBuffer(GL_ARRAY_BUFFER, vbo_vertices_); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo_elements_); /* buffer data */ glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), elements, GL_STATIC_DRAW); /* unbind buffers */ glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } 

Comstack sans avertissements, mais semble être défaillant lors du premier appel à glBufferData (). Je peux poster plus de code si nécessaire, je ne connais pas assez GL pour savoir ce qui pourrait être pertinent. Merci!


  GLfloat vertices[60] = { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }; 

donne la même erreur de segmentation.

Votre classe Vertex est-elle un ancien type de données? At-il des fonctions virtuelles qui pourraient signifier qu’il a également une table virtuelle? Pouvez-vous essayer de réécrire ce code en utilisant un tableau de simples flotteurs (juste pour tester vos appels à glBufferData qui fonctionnent). D’après ce que je peux dire, il semblerait que vous utilisiez correctement glBufferData, mais là encore, j’aurais peut-être oublié quelque chose.

EDIT: Etes-vous absolument assuré que votre contexte OpenGL est complètement initialisé avant d’appeler ce code. Est-ce un object global, parce que son constructeur pourrait être appelé avant son principal?