2016-04-23 9 views
-1

Ich erstelle ein Raster in opengl, sehr einfach, aber bekomme einen Fehler, wenn ich gl :: GenVertexArrays aufrufen. Unten ist der Code. Ich benutze glfw3.OpenGL Ungültige Operation mit GenVertexArrays

GLuint vao = 0; 
check_gl_error(); 
gl::GenVertexArrays(1, &vao); 
check_gl_error(); //the error is caught here and its a INVALID_OPERATION 
gl::BindVertexArray(vao); 
check_gl_error(); 

Ich habe nicht viel Erfahrung mit OpenGL, aber ich opengl auf demselben Computer verwendet haben, mit GLFW und haben Projekte mit GenVertexArrays arbeiten hatte.

EDIT:

Mein Programm ist Setup mit

if (!glfwInit()) { 
    std::cout << "Init GLFW failed" << std::endl; 
    exit(EXIT_FAILURE); 
} 

GLFWwindow* window = glfwCreateWindow(800, 800, "My Title", NULL, NULL); //glfwGetPrimaryMonitor() full screen 
if (!window) { 
    std::cout << "Init window failed" << std::endl; 
    glfwTerminate(); 
    exit(EXIT_FAILURE); 
} 
gl::sys::LoadFunctions(); 

//check_gl_error(); 

glfwMakeContextCurrent(window); 
check_gl_error(); 

glfwSwapInterval(1); 
check_gl_error(); 

GLuint programID = gl::CreateProgram(); 
+0

Spamme 'check_gl_error' nicht überall, du solltest einen Debugkontext mit glfw-Hints einrichten. Sie müssen die Fehlerrückrufe einrichten, die Fehler rufen automatisch den Fehlerrückruf auf. Hast du den Kontext aktuell gemacht? – doug65536

+0

[Es wurde Teil von Kern in OpenGL 1.1] (https://www.opengl.org/registry/specs/ARB/debug_output.txt) gemacht. Es wird mit ziemlicher Sicherheit verfügbar sein, und es ist unglaublich hilfreich, wenn der Fahrer Dinge überprüft und Fehler schnell und genau findet. – doug65536

+0

@ doug65536 Ich habe den Kontext mit glfwMakeContextCurrent (window) ;. Es ist wie die zehnte Codezeile in meinem Programm und tritt vor dem oben angegebenen Code auf. – dan

Antwort

1

Verwenden Sie GLEW oder glLoadGen oder so etwas? Sie müssen es sagen, um seine Eintrittspunkte wieder zu aktualisieren nach Sie machen den aktuellen Kontext aktuell.

In Windows ist nur alte OpenGL verfügbar, bis Sie einen moderneren Kontext aktuell machen. Nur dann werden die Einstiegspunkte der höheren Version für die Suche mit dem Code von GLEW/glLoadGen verfügbar.

Mit anderen Worten, alle diese OpenGL Funktionszeiger können plötzlich auf anderen Code zeigen, weil die OpenGL-Version geändert hat. So funktioniert wgl.

Verwandte Themen