0

似乎glGetProgramInfoLog(以及匹配的函数指针类型PFNGLGETPROGRAMINFOLOGARBPROC)在 Windows 的 OpenGL 标头中未定义,并且该函数似乎也从 DLL 中丢失——我在 opengl32.dll 中找不到字符串“wglGetProgram”。

是否有另一种方法可以在 Windows 上获得相同的功能?

glGetInfoLogARB似乎是另一种选择,但在移动平台上总是返回空字符串,所以我想这有区别glGetProgramInfoLog吗?!

4

3 回答 3

2

我会仔细检查图形驱动程序是否是最新的。然后检查您的 GL 标头是否有任何问题,并仔细检查编译器的包含路径。

我认为 GLEW 带有一个工具,可以列出您当前 GL 版本的所有内容。

有一个名为“depends”的程序会告诉您可执行文件正在加载哪些 DLL。这对于仔细检查是否没有找到并使用另一个 DLL 可能很有用。

于 2013-08-22T13:56:32.827 回答
1

Windows 附带的 OpenGL DLL 仅实现 OpenGL 1.1。在 Windows 上无需驱动程序干预即可调用的唯一函数来自 OpenGL 1.1。

为了调用任何更新的东西,您需要使用wglGetProcAddress (...)将与 ICD(可安装客户端驱动程序)通信以获取 OpenGL 扩展功能的入口点。

如果您使用 GLEW 之类的东西,这一切都可以为您处理。请注意,这些符号都没有在链接时完全解析。当您使用 GLEW 时,您实际上有一堆 NULL 指针,当您初始化库时,这些指针被替换为每个函数的入口点地址。因此,仅仅因为编译器/链接器在使用 GLEW 时没有抱怨某个函数不存在,并不意味着您实际上能够在运行时使用该函数。

于 2013-08-22T19:35:08.923 回答
0

我正在使用的标头版本(“Microsoft SDKs\Windows\v7.0A\Include\gl\GL.h”)不包含该函数,因为只定义了 GL_VERSION_1_1 宏。我决定不搞乱标题,而只使用该函数glGetInfoLogARB,它在桌面平台上的行为方式相同,并且具有完全兼容的签名。在 ES 2.0 平台上,我glGetProgramInfoLog直接使用,因为glGetInfoLogARB在着色器链接器错误的情况下只给我一个空字符串。

于 2013-08-22T15:09:01.227 回答