2012-06-29 13 views
8

Por lo tanto, en mi proyecto estoy usando una clase separada para crear almacenamientos intermedios llamados Buffer.cpp. Aquí es el constructorglGenBuffers() bloqueando con falla de Segmentación. (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); 

    ... 
} 

Y las definiciones de los miembros:

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

El problema es que cuando intento generar un buffer usando, por ejemplo, este comando:

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

la programa se bloquea en glGenBuffers() con estado de terminación "-1073741819". He intentado probar el programa y esto es lo que tengo:

Program received signal SIGSEGV, Segmentation fault. 

Mi tarjeta compatible con OpenGL 1.5 de manera que no es el caso.

También vale la pena tener en cuenta que compilé una biblioteca de glew estática.

EDIT: Finalmente arreglé el problema. El problema era que estaba llamando a glewInit() antes de crear un contexto de representación de OpenGL.

+0

¿Has probado 'glGetError()'? – Florian

+0

¿No está importando gl.h? Solo porque tuve bloqueos extraños antes cuando no importé los encabezados y GCC no gimió –

+0

¿Tiene un contexto actual 'glewInit()' 'd GL en el momento en que llega a esa llamada 'glGenBuffers()'? – genpfault

Respuesta

15

Así que su problema fue que estaba creando contexto OpenGL después de llamar a glewInit() - y por lo tanto glewInit() no tenía manera de configurar correctamente los puntos de entrada GL.

En este caso glewInit() probablemente devolvió el código de error. ¿Estás verificando los códigos de error de las funciones? Debería devolver GLEW_OK.

+4

+1 Sí. Si usa glfw, debe llamar a 'glewInit()' _after_ 'glfwMakeContextCurrent (window)'. –

Cuestiones relacionadas