glGenBuffers() Absturz mit "Segmentation fault". (C++/GLFW/GLEW)
So, in meinem Projekt verwende ich eine separate Klasse zu erstellen Buffern Buffer.cpp. Hier ist der Konstruktor
#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 zu generieren, einen Puffer mit zum Beispiel mit diesem Befehl:
Buffer vBuffer(GL_ARRAY_BUFFER, vertexPositions, sizeof(vertexPositions), GL_STATIC_DRAW);
das Programm stürzt bei glGenBuffers() mit termination-status "-1073741819". Ich habe versucht, Debuggen Sie das Programm, 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 lohnt sich auch zu beachten, dass ich erstellte eine statische glew-Bibliothek selbst.
EDIT: ich endlich das problem behoben. Das problem war, dass ich den Aufruf glewInit() vor dem erstellen eines OpenGL-rendering-Kontext.
- Haben Sie versucht, die
glGetError()
? - Sind Sie nicht importieren gl.h ? Nur da hatte ich seltsame Abstürze vor, wo ich nicht importieren-Header und GCC nicht meckern
- Haben Sie eine aktuelle,
glewInit()
'd GL Kontext der Zeit lernen Sie, dassglGenBuffers()
nennen? - Yep, habe ich bereits genannt glewInit(), glfwInit() und glfwOpenWindow() vor dem Aufruf von glGenBuffers().
- Sind Sie aufgerufen, glewInit() nach glfwOpenWindow()? Hat Ihre Grafikkarte unterstützt OpenGL 1.5?
- Oh, danke, das war das problem. Ich rief glewInit() vor glfwOpenWindow().
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also Ihr problem war, dass Sie das erstellen von OpenGL-Kontext, nach der Sie genannt glewInit() - und damit glewInit() hatte keine Möglichkeit dar, um GL-Eintrag Punkte richtig.
In diesem Fall glewInit() wohl die return-Fehler-code. Sind Sie der überprüfung Fehler-codes von Funktionen? Sollte es wieder GLEW_OK.
glewInit()
nachdemglfwMakeContextCurrent(window)
.