wglGetProcAddress未定义

时间:2015-02-18 18:54:04

标签: c++ opengl visual-studio-2013 glfw glew

我正在关注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 sayswglGetProcAddress包含在opengl32.lib中。我做错了什么?

  

错误1错误C3861:&#39; wglGetProcAddress&#39;:未找到标识符e:\ workspaces \ visual studio \ learningopengl1 \ learningopengl1 \ main.cpp 32 1 LearningOpenGl1

     

2智能感知:标识符&#34; wglGetProcAddress&#34;未定义e:\ Workspaces \ Visual Studio \ LearningOpenGl1 \ LearningOpenGl1 \ main.cpp 34 41 LearningOpenGl1

1 个答案:

答案 0 :(得分:4)

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

您的编译器告诉您它不知道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对平台特定指针查询API的抽象,这将是glfwGetProcAddress(),并且应该已经声明 - 再次不需要弄乱wglGetProcAddress()