2012-12-19 11 views
5

Jestem pewien, że wszystko jest połączone poprawnie. Początkowo używałem glload i glfw z nieoficjalnego GLSDK, ale potem zdecydowałem się zlikwidować glload, co oznaczało, że musiałem użyć glew, aby dostać się do nowoczesnych nagłówków.Naruszenie zasad dostępu. podczas korzystania z GLEW i GLFW

#include <GL/glew.h> 
#include <GL/glfw.h> 

Załączam glew przed glfw zgodnie z instrukcjami.

W czasie wykonywania okno OpenGL otwiera

//(relevant code) 
if(!glewInit()) {return -1; } 
if(!glfwInit()) {return -1; } 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
// also tried glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE); 

if(!glfwOpenWindow(1024, 768, 8, 8, 8, 8, 24, 8, GLFW_WINDOW)){ 
    glfwTerminate(); 
    return -1; 
} 

glfwSetWindowTitle("OpenGL 3.2"); 

//init method 
glGenVertexArrays(1, &vao); //<< Access violation here. 

jakieś pomysły co mój problem jest tutaj?

Na które patrzyłem. "Naruszenie dostępu za pomocą VBO z glew" Ale to nie była pomoc.

Odpowiedz

6

glewInit ma być nazywane po kontekst OpenGL został stworzony i związany z CURREN wątku, czyli po glfwOpenWindow w Twoim przypadku.

+0

Dziękuję, że poruszyłem się tak, jak powiedziałeś. if (! glewInit()) {return -1; } było niepoprawne, muszę sprawdzić wartość, którą zwraca. jak to nie jest bool – Andrew

3

Trochę się spóźniłem, ale pomyślałem, że i tak będę pił.

Jak wspomniano w datenwolf, w odpowiednim kodzie opublikowanym glewInit() powinien zwrócić błąd z powodu jego pozycjonowania.

Inne potencjalne problemy, które możesz napotkać, są opisane na stronie http://www.opengl.org/wiki/OpenGL_Loading_Library w sekcji GLEW.

copy-paste z góry:

GLEW ma problem z kontekstów bazowych. Wywołuje glGetString(GL_EXTENSIONS), co powoduje, że GL_INVALID_ENUM na GL 3.2+ rdzeń kontekstu, jak tylko zostanie wywołana glewInit().

Rozwiązanie dla GLEW (dostępne również pod powyższym łączem) służy włączeniu obsługi "DOŚWIADCZALNEJ". Ex:

glewExperimental = GL_TRUE; 
GLenum err = glewInit(); 
if(err != GLEW_OK) 
{ 
    printf("GlewInit error"); 
    exit(1); 
} 
2

także późno, ale dla każdego, kto nadal poszukuje

glewExperimental = GL_TRUE; 

Przed inicjalizacji kontekst był pozbył się błąd naruszenia zasad dostępu, lecz wykonany zjazd program z błędem GL_INVALID_ENUM. Z GLFW, musiałem dodatkowo zakomentuj podpowiedzi okno:

//glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
//glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
//glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
//glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE); 

Programy następnie rozpoczął kompilacji!

Powiązane problemy