Can';不要在OpenGL中使用某些函数(glGenBuffers)

Can';不要在OpenGL中使用某些函数(glGenBuffers),opengl,glew,glfw,Opengl,Glew,Glfw,我在其他地方也看到过类似的问题,但没有人回答或解决我的问题 在创建上下文之后,但在调用glfwMakeContextCurrent() 启动后,我尝试使用glGenBuffers(),但不起作用。抛出一个错误 我的OpenGL版本是3.2,所以从我读到的内容来看,我可以在我的程序中使用这个功能。如果我不能,请让我知道其他情况。我将尝试找出一种不同的方法来做到这一点 我使用的是Windows7和VS2012,似乎所有东西都链接正确。希望我提供了我需要的所有信息 #include <stdli

我在其他地方也看到过类似的问题,但没有人回答或解决我的问题

在创建上下文之后,但在调用
glfwMakeContextCurrent()

启动后,我尝试使用
glGenBuffers()
,但不起作用。抛出一个错误

我的OpenGL版本是3.2,所以从我读到的内容来看,我可以在我的程序中使用这个功能。如果我不能,请让我知道其他情况。我将尝试找出一种不同的方法来做到这一点

我使用的是Windows7和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);
    }
}
}
#包括
#包括
#包括
#包括
#包括
int main(){
//初始化GLFW
如果(!glfwInit()){
printf(“GLFW未成功初始化!\n”);
std::this_thread::sleep_for(std::chrono::seconds(5));
退出(退出失败);
}
否则{
printf(“GLFW已成功初始化!\n”);
}
glfwWindowHint(GLFW_上下文_版本_专业,3);
glfwWindowHint(GLFW_上下文_版本_小调,2);
glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件);
GLFWwindow*window=glfwCreateWindow(800600,“PONG!”,nullptr,nullptr);//已加窗
glewExperimental=GL_TRUE;
如果(!glewInit()){
printf(“GLEW未成功初始化!\n”);
std::this_thread::sleep_for(std::chrono::seconds(5));
退出(退出失败);
}
否则{
printf(“GLEW已成功初始化!\n”);
}
glfwMakeContextCurrent(窗口);
GLuint顶点缓冲区;
glGenBuffers(1和vertexbuffer);
printf(“%u\n”,vertexbuffer);
fprintf(
斯特杜特,
“信息:OpenGL版本为:%s\n”,
glGetString(GLU版本)
);
fprintf(
斯特杜特,
“信息:GLEW版本为:%s\n”,
glewGetString(GLEW_版本)
);
而(!glfwWindowShouldClose(窗口)){
glfwSwapBuffers(窗口);
glfwPollEvents();
如果(glfwGetKey(窗口,GLFW_键_退出)==GLFW_按){
GLFW窗口(窗口);
window=glfwCreateWindow(800600,“砰!”,nullptr,nullptr);
}
else if(glfwGetKey(窗口,GLFW_键=GLFW_按){
GLFW窗口(窗口);
window=glfwCreateWindow(800600,“PONG!”,glfwGetPrimaryMonitor(),nullptr);
}
}
}
在创建上下文之后,但在调用
glfwMakeContextCurrent()

嗯,这是你的问题:

成功创建不会更改当前上下文。在使用新创建的上下文之前,需要使用
glfwMakeContextCurrent
将其设置为当前上下文


glfwMakeContextCurrent()

之后调用
glewInit()
“抛出错误”。是否要告诉我们错误消息是什么?访问冲突。就这么说了,这已经很有帮助了。在调试模式下运行,告诉我们当它出现故障时它指向哪一行(如果不是在代码中,那么调用堆栈是什么),然后您的上下文的形状不正确和/或函数的加载不正确。好的,我这样做了。我仍然会犯同样的错误。“我是不是点错了什么东西了?”韦斯利,你说这不能解决你的问题,然后接受了这个回答。那么解决办法是什么呢?你知道,这个网站不仅仅是帮助你自己!它应该是一个知识库。