OpenGL 网站上的这个 wiki 页面声称不应通过
wglGetProcAddress()
加载 OpenGL 1.1 函数,并且该措辞似乎暗示如果您尝试,某些系统将按设计返回 NULL
:
http://www.opengl.org/wiki/Platform_specifics:_Windows#wglGetProcAddress
(这个想法是只有 1.2+ 的函数才值得通过
wglGetProcAddress()
的方式加载)。
该页面没有告诉我们谁报告了这些对 1.1 函数失败的
wglGetProcAddress()
调用,这是我个人从未见过的。谷歌搜索也几乎没有关于这个问题的信息。
wglGetProcAddress()
实际上会为足够多的用户返回NULL
1.1 功能吗?这样我应该真正关心吗?或者它只是对少数不幸的用户来说失败了,他们的 GPU 驱动程序确实损坏了(在这种情况下我不太关心)。
还有其他人遇到过这个吗?
您应该问自己的问题是这对您是否重要以及您是否应该关心。
手动加载 OpenGL 1.1 函数意味着您必须使用不同的函数名称,否则它们将与
gl/gl.h
中的声明发生冲突。或者,您必须定义 GL_NO_PROTOTYPES
,但在这种情况下,您将也 不具备 OpenGL 1.0 功能。话虽如此,我已经尝试过一次,因为我认为动态加载所有内容将是一个巧妙的想法(当我清醒过来时,我想知道是什么给了我这个想法),而且我可以确认它没有(或者至少,2 年前没有)与 nVidia 驱动程序一起工作。
不过,仔细想想,这是完全合理的,甚至是一件好事,没有意义的东西不起作用。
我在 Wiki 文章的讨论页面上技术性地回答了这个问题,但是:
wglGetProcAddress() 实际上会为足够多的用户返回 NULL 1.1 函数,这样我应该真正关心吗?它将为
all用户返回NULL。我已经在 NVIDIA 和 ATI 平台上尝试过(最新的驱动程序和 DX10 硬件),并且都可以。