2016-04-23 70 views
-1

我在opengl中創建了一個網格,非常簡單,但當我調用gl :: GenVertexArrays時出現錯誤。以下是代碼。我正在使用glfw3。OpenGL與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(); 

我沒有太多的經驗與OpenGL的,但是我已經使用OpenGL的使用GLFW在同一臺計算機上,並曾與GenVertexArrays合作項目。

編輯:

我的計劃是建立與

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

不要在任何地方向'check_gl_error'發送垃圾郵件,您應該使用glfw提示設置一個調試上下文。您需要設置錯誤回調,錯誤會自動調用錯誤回調。你是否使上下文最新? – doug65536

+0

[這是OpenGL 1.1的核心部分](https://www.opengl.org/registry/specs/ARB/debug_output.txt)。它幾乎可以肯定是可用的,並且讓駕駛員快速準確地驗證事情並發現錯誤是非常有用的。 – doug65536

+0

@ doug65536我確實使上下文與glfwMakeContextCurrent(window);.它就像我程序中的第十行代碼,發生在我上面發佈的代碼之前。 – dan

回答

1

你使用GLEW或glLoadGen什麼?你需要告訴它在之後再次更新它的入口點你使實際上下文成爲當前。

在Windows中,只有古老的OpenGL纔可用,直到您製作出更現代的上下文爲止。只有這樣才能通過GLEW/glLoadGen的代碼查找更高版本的入口點。

換句話說,所有這些OpenGL函數指針突然都可能指向不同的代碼,因爲OpenGL版本發生了變化。這就是wgl的工作原理。