我理解"加载"通过具有特殊函数的opengl函数,根据opengl函数的名称定位指向函数的指针。我以前从未见过类似这样的东西,我想知道它是如何工作的。功能实际位于何处?它们是如何检索的?为什么这样做?
答案 0 :(得分:3)
功能实际位于何处?
这取决于实现。我打赌它们存储在函数名称的哈希表中以实现指针。它们仍然在共享库中,但通常没有暴露它们的符号。
他们是如何取回的?
glXGetProcAddress或wglGetProcAddress,具体取决于平台。大多数创建OpenGL窗口的库(GLFW,SDL)都有自己的跨平台功能,使用上述功能。
为什么这样做?
我可以想到几个原因:实现可以在不破坏ABI兼容性的情况下更改可用的扩展,以及您可以访问的功能可能取决于您请求的上下文的类型或版本(例如,对于Mesa,发布OpenGL 3.1)扩展只能在3.1+上下文中使用,而不能在更低的范围内使用。