2012-06-29 15 views
8

Tak więc w moim projekcie używam oddzielnej klasy do tworzenia buforów o nazwie Buffer.cpp. Oto konstruktorBłąd glGenBuffers() z błędem segmentacji. (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); 

    ... 
} 

oraz definicje członków:

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

Problemem jest to, że gdy próbuję wygenerować bufor stosując na przykład polecenie:

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

się Program zawiesza się w glGenBuffers() z zakończeniem statusu "-1073741819". Próbowałem debugowania programu i to, co mam:

Program received signal SIGSEGV, Segmentation fault. 

Moja karta obsługuje OpenGL 1.5, tak że nie jest to przypadek.

Warto również zauważyć, że samodzielnie skompilowałem bibliotekę statyczną.

EDYCJA: W końcu rozwiązałem problem. Problem polegał na tym, że wywołałem glewInit() przed utworzeniem kontekstu renderowania OpenGL.

+0

Czy wypróbowałeś 'glGetError()'? – Florian

+0

Nie importujesz gl.h? Tylko dlatego, że miałem dziwne awarie, zanim nie zaimportowałem nagłówków, a GCC nie jęknął. –

+0

Czy masz aktualny kontekst 'glewInit()' 'GL, zanim dojdziesz do tego wywołania 'glGenBuffers()'? – genpfault

Odpowiedz

15

Twój problem polegał na tym, że tworzyłeś kontekst OpenGL po wywołaniu glewInit() - a tym samym glewInit() nie mógł poprawnie ustawić punktów wejścia GL.

W tym przypadku glewInit() prawdopodobnie zwrócił kod błędu. Czy weryfikujesz kody błędów z funkcji? Powinno wrócić GLEW_OK.

+4

+1 Tak. Jeśli używasz glfw, musisz wywołać 'glewInit()' _after_ 'glfwMakeContextCurrent (window)'. –

Powiązane problemy