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()
.
我正在学习 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()
.