2012-12-19 5 views
5

bin ich sicher, dass alles korrekt verknüpft ist. Ich benutzte zunächst Glload und Glfw von der Inoffiziellen GLSDK, aber dann entschied ich mich, Glload zu entfernen, was bedeutete, dass ich glew verwenden musste, um an die modernen Header zu kommen.Zugriffsverletzung. bei der Verwendung von GLEW und GLFW

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

Ich habe glew vor glfw gemäß den Anweisungen enthalten.

Während der Laufzeit das OpenGL-Fenster öffnet

//(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. 

Irgendwelche Ideen, was mein Problem hier ist?

Ich habe angeschaut. "Zugriffsverletzung mit VBO mit glew" Aber es war keine Hilfe.

Antwort

6

glewInit ist nach ein OpenGL-Kontext zu dem Curran Thread erstellt und gebunden genannt werden, das heißt nach glfwOpenWindow in Ihrem Fall ist.

+0

Danke, dass ich bewegt habe, wie du gesagt hast. if (! glewInit()) {return -1; } war falsch, ich muss den Wert überprüfen, den es zurückgibt. wie es kein Bool ist – Andrew

3

Ein bisschen spät, aber ich dachte, ich würde sowieso rein.

Wie von datenwolf erwähnt, sollte in Ihrem entsprechenden Code die glewInit() einen Fehler wegen seiner Positionierung zurückgeben.

Das andere mögliche Problem, auf das Sie stoßen könnten, ist unter http://www.opengl.org/wiki/OpenGL_Loading_Library unter GLEW beschrieben.

copy-paste von oben:

GLEW hat ein Problem mit Kern Kontexten. Es ruft glGetString(GL_EXTENSIONS), , die GL_INVALID_ENUM auf GL 3.2 + Kern Kontext verursacht, sobald glewInit() aufgerufen wird.

Lösung für GLEW (auch von oben genannten Link zur Verfügung gestellt) ist 'EXPERIMENTAL' Unterstützung zu ermöglichen. Ex:

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

auch spät, aber für alle noch auf der Suche

glewExperimental = GL_TRUE; 

Vor dem Kontext der Initialisierung wurde die Beseitigung der Zugriffsverletzung Fehlermeldung anzeigt, sondern machte das Programmende mit einem GL_INVALID_ENUM Fehler. Mit GLFW musste ich zusätzlich die Fensterhinweise auskommentieren:

//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); 

Die Programme haben dann angefangen zu kompilieren!

Verwandte Themen