2012-06-29 3 views
8

Quindi, nel mio progetto sto usando una classe separata per creare buffer chiamati Buffer.cpp. Ecco il costruttoreglGenBuffers() in arresto anomalo con errore di segmentazione. (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); 

    ... 
} 

E le definizioni dei membri:

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

Il problema è che quando provo a generare un buffer usando per esempio il comando:

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

la il programma si blocca su glGenBuffers() con stato di terminazione "-1073741819". Ho provato a test del programma e questo è quello che ho ottenuto:

Program received signal SIGSEGV, Segmentation fault. 

La mia scheda supporta OpenGL 1.5 in modo che non è il caso.

Vale anche la pena di notare che ho compilato una libreria di Glew statica me stesso.

MODIFICA: Ho finalmente risolto il problema. Il problema era che stavo chiamando glewInit() prima di creare un contesto di rendering OpenGL.

+0

Hai provato 'glGetError()'? – Florian

+0

Non stai importando gl.h? Solo perché ho avuto strani incidenti prima di dove non importavo le intestazioni e GCC non si lamentava –

+0

Hai un contesto corrente, 'glewInit()' 'd GL quando arrivi a quella chiamata 'glGenBuffers()'? – genpfault

risposta

15

Quindi il problema era che si stava creando il contesto OpenGL dopo aver chiamato glewInit() - e quindi glewInit() non aveva modo di impostare correttamente i punti di accesso GL.

In questo caso glewInit() probabilmente ha restituito il codice di errore. Stai verificando i codici di errore dalle funzioni? Dovrebbe restituire GLEW_OK.

+4

+1 Sì. Se si usa glfw, è necessario chiamare 'glewInit()' _after_ 'glfwMakeContextCurrent (window)'. –