我在其他地方看到了类似的问题,但没有人回答或解决了我的问题。
我在上下文创建之后但在我致电glfwMakeContextCurrent()
我启动后尝试使用glGenBuffers()
,但它不起作用。引发错误。
我的OpenGL版本是3.2,所以根据我的阅读,我可以在我的程序中使用此功能。如果我不能,请让我知道。我将尝试找出一种不同的方法来做到这一点。
我正在使用 Windows 7 和 VS2012 ,似乎所有内容都已正确关联。希望我提供了我需要的所有信息。
#include <stdlib.h>
#include <stdio.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <thread>
int main(){
//Initialize GLFW
if(!glfwInit()){
printf("GLFW was not initialized successfully!\n");
std::this_thread::sleep_for(std::chrono::seconds(5));
exit(EXIT_FAILURE);
}
else{
printf("GLFW was initialized successfully!\n");
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window = glfwCreateWindow(800, 600, "PONG!", nullptr, nullptr); // Windowed
glewExperimental = GL_TRUE;
if(!glewInit()){
printf("GLEW was not initialized successfully!\n");
std::this_thread::sleep_for(std::chrono::seconds(5));
exit(EXIT_FAILURE);
}
else{
printf("GLEW was initialized successfully!\n");
}
glfwMakeContextCurrent(window);
GLuint vertexbuffer;
glGenBuffers(1, &vertexbuffer);
printf("%u\n", vertexbuffer);
fprintf(
stdout,
"INFO: The OpenGL version is: %s\n",
glGetString(GL_VERSION)
);
fprintf(
stdout,
"INFO: The GLEW version is: %s\n",
glewGetString(GLEW_VERSION)
);
while(!glfwWindowShouldClose(window)){
glfwSwapBuffers(window);
glfwPollEvents();
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS){
glfwDestroyWindow(window);
window = glfwCreateWindow(800, 600, "PONG!", nullptr, nullptr);
}
else if (glfwGetKey(window, GLFW_KEY_F) == GLFW_PRESS){
glfwDestroyWindow(window);
window = glfwCreateWindow(800, 600, "PONG!", glfwGetPrimaryMonitor(), nullptr);
}
}
}
答案 0 :(得分:4)
我在上下文创建之后但在我致电
之前正确启动了 GLEWglfwMakeContextCurrent()
Welp,这是你的问题right there:
成功创建不会更改当前的上下文。在使用新创建的上下文之前,您需要使用
glfwMakeContextCurrent
将其设置为当前。
在 glewInit()
之后致电glfwMakeContextCurrent()
。