2012-06-29 5 views
8

Also verwende ich in meinem Projekt eine separate Klasse, um Puffer namens Buffer.cpp zu erstellen. Hier ist der KonstruktorglGenBuffers() stürzt mit Segmentierungsfehler ab. (C++/GLFW/GLEW)

#define GLEW_STATIC 
#define GLEW_NO_GLU 
#define GLFW_NO_GLU 

#include "GL/glew.h" 
#include "GL/glfw.h" 

Buffer::Buffer(GLenum _type, const void *data, GLsizei _size, GLenum usage) : type(_type), size(_size) 
{ 
    ... 

    //Generate Buffer 
    glGenBuffers(1, &buffer); 

    ... 
} 

und die Definitionen der Mitglieder:

GLuint buffer; 
const GLsizei size; 
const GLenum type; 
Buffer(GLenum, const void*, GLsizei, GLenum); 

Das Problem ist, dass wenn ich versuche, diesen Befehl unter Verwendung eines Puffers zum Beispiel zu generieren:

Buffer vBuffer(GL_ARRAY_BUFFER, vertexPositions, sizeof(vertexPositions), GL_STATIC_DRAW); 

die Programm stürzt bei glGenBuffers() mit Beendigungsstatus "-1073741819" ab. Ich habe versucht das Debuggen des Programms und das ist, was ich habe:

Program received signal SIGSEGV, Segmentation fault. 

Meine Karte unterstützt OpenGL 1.5, so dass das nicht der Fall.

Es ist auch erwähnenswert, dass ich selbst eine statische Bibliothek erstellt habe.

EDIT: Ich endlich das Problem behoben. Das Problem war, dass ich glewInit() aufruft, bevor ich einen OpenGL-Rendering-Kontext erstelle.

+0

Haben Sie 'glGetError()' versucht? – Florian

+0

Importieren Sie gl.h nicht? Nur weil ich vorher seltsame Abstürze hatte, bei denen ich keine Header importierte und GCC nicht stöhnte –

+0

Haben Sie einen aktuellen 'glewInit()' 'd GL Kontext, wenn Sie zu diesem 'glGenBuffers()' Aufruf kommen? – genpfault

Antwort

15

Ihr Problem war also, dass Sie OpenGL-Kontext erstellt haben, nachdem Sie glewInit() aufgerufen haben - und somit glewInit() keine Möglichkeit hatte, GL-Einstiegspunkte richtig einzurichten.

In diesem Fall gab glewInit() wahrscheinlich Fehlercode zurück. Verifizieren Sie Fehlercodes von Funktionen? Es sollte GLEW_OK zurückgeben.

+4

+1 Ja. Wenn Sie glfw verwenden, müssen Sie 'glewInit()' _after_ 'glfwMakeContextCurrent (window)' aufrufen. –