2016-10-22 6 views
-1

Ich lese gerade die OpenGL Super Bible 7. Ausgabe. Auf dieser Grundlage habe ich einige einfache Code wie folgt:Segfault on glNamedBufferStorage

void startup() { 
    static const float data[] = { 
     0.25f, -0.25f, 0.5f, 1.0f, 
     -0.25f, -0.25f, 0.5f, 1.0f, 
     0.25f, 0.25f, 0.5f, 1.0f, 
    }; 


    glGenVertexArrays(1, &m_VAO); 
    glBindVertexArray(m_VAO); 

    glGenBuffers(1, &m_VBO); 
    glBindBuffer(GL_ARRAY_BUFFER, m_VBO); 
    printf("Size of data[]: %lu bytes\n", sizeof(data)); 
    glNamedBufferStorage(m_VBO, sizeof(data), data, GL_DYNAMIC_STORAGE_BIT); 
    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), NULL); 
    glEnableVertexAttribArray(0); 

} 

Dies ist eine Methode einer Klasse, die vor dem Haupt Rendering-Schleife ausgeführt wird.

Das Problem ist, dass dieser Code einen segfault bei glNamedBufferStorage generiert.

Ich habe versucht, es mit gdb zu debuggen - und lernte nur, wo der segfault auftritt, nicht warum. Ich habe versucht zu verstehen, ob es ein Problem mit der Größe data (daher die printf sizeof) gibt. Aber es scheint in Ordnung zu sein. Ich habe auch versucht, verschiedene Flaggen zu benutzen - auch ohne Erfolg.

Ich habe auch eine grep -R über den zugehörigen Quellcode, aber keine Anwendungsbeispiele gefunden.

System: Ubuntu, Klirren ++

+0

Was [OpenGL Laden Bibliothek] (https: //www.opengl .org/wiki/OpenGL_Loading_Library) benutzen Sie? Unterstützt Ihre Implementierung OpenGL 4.5? –

+0

@NicolBolas Ich benutze das Beispielframework aus dem Buch, das wiederum gl3w + glfw verwendet - und es scheint zu funktionieren - die Beispiele kompilieren und laufen korrekt und einige meiner früheren Beispiele (ohne zu versuchen, eine VBO zu erstellen) auch hat gut funktioniert. – poetryofruins

Antwort

1

Prüfen Sie die OpenGL-Version mit

printf("OpenGL version %s\n", glGetString(GL_VERSION));

glNamedBufferStorage unterstützt nur auf OpenGL 4.5

+1

Sie haben Recht! Ich habe den Treiber aktualisiert, als ich diese Frage gestellt habe. Scheint so, als ob mein älterer Treiber nur bis zu 4.4 unterstützt (ich war sicher, dass es auch 4.5 unterstützt!) Und der neue hat 4.5. Jetzt funktioniert glNamedBufferStorage korrekt. – poetryofruins