wglGetProcAddress 未定义

wglGetProcAddress is undefined

我正在学习 this OpenGL 教程,但我坚持链接库。

#define GLEW_STATIC

#include <glew.h>
#include <glfw3.h>
#include <thread>


typedef void (*GENBUFFERS) (GLsizei, GLuint*);

int main()
{
    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", nullptr, nullptr);

    glfwMakeContextCurrent(window);

    while (glfwWindowShouldClose(window))
    {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    GENBUFFERS glGenBuffers = (GENBUFFERS) wglGetProcAddress("glGenBuffers");
    GLuint buffer;
    glGenBuffers(1, &buffer);


    glfwTerminate();
}

由于某种原因,函数 wglGetProcAddress 未定义。这些是我链接的库:glew32.lib、glew32s.lib、glfw3.lib、opengl32.lib.

MSDN says wglGetProcAddress 包含在 opengl32.lib 中。我做错了什么?

Error 1 error C3861: 'wglGetProcAddress': identifier not found e:\workspaces\visual studio\learningopengl1\learningopengl1\main.cpp 32 1 LearningOpenGl1

2 IntelliSense: identifier "wglGetProcAddress" is undefined e:\Workspaces\Visual Studio\LearningOpenGl1\LearningOpenGl1\main.cpp 34 41 LearningOpenGl1

这不是一个 linker 错误,这是一个编译器错误 - 所以你 link 的库在这个阶段根本不重要。

您的编译器告诉您它不知道 wglGetProcAddress,因为它从未见过此声明。你的编译器也不应该知道 GENBUFFERS,因为这种类型也没有在任何地方定义。在 official glext.h file 中,您要查找的类型称为 PFNGLGENBUFFERS

如果您真的想手动使用 wgl API,您可能应该包括 GL/gl.h 以及最新的 glext.h 并使用正确的类型名称。

对我来说最大的问题是:你到底想做什么?您包括 glew.h,这是一个库,其唯一目的是为您执行 GL 函数指针查询。您需要做的就是调用 glewInit() 就大功告成了(好吧,不要忘记在核心配置文件中设置 glewExperimental=GL_TRUE 之前,因为 GLEW 已损坏并且没有核心配置文件将无法工作配置文件)。根本不需要手动弄乱 wglGetProcAddress()

另外,你也在使用GLFW。所以如果你想手动查询函数指针,你最好使用 GLFW 对平台特定指针查询的抽象 APIs,这将是 glfwGetProcAddress(),并且应该已经声明 - 再次没有需要搞乱 wglGetProcAddress().