获得OpenGL API函数

时间:2011-12-06 05:34:31

标签: opengl

我正在查看OpenGL维基页面,我对以下几行感到好奇:

  

由于最终与此讨论无关的原因,您必须这样做   通过特定于平台的API调用手动加载函数。这个样板   使用各种OpenGL加载库完成工作;这些都是这个过程   平滑。强烈建议您使用一个。 - OpenGL Wiki

直观地说,你会认为他们只是提供一个标题供你包括。那么,这有什么历史原因呢?

编辑:
感谢您的回答,我现在看到OpenGL支持其功能的多个实现,因此没有一个DLL / SO每个人都链接到。我还发现这些引用很有帮助:

  • The OpenGL library supports multiple implementations of its functions. From MSDN

  • To accommodate this variety, we specify ideal behavior instead of actual behavior for certain GL operations. From GL Spec

  • When you run your program, opengl32.dll gets loaded and it checks in the Windows registry if there is a true GL driver. If there is, it will load it. For example, ATI's GL driver name starts with atioglxx.dll and NVIDIA's GL driver is nvoglv32.dll. The actual names change from release versions GL FAQ

我还发现英特尔不提供OpenGL的最新实现,所以即使我有i7-2500,我也只有OpenGL 3.0 :(。

3 个答案:

答案 0 :(得分:3)

它与历史无关。就是这样。

OpenGL实现大体上来自某种形式的共享库(DLL / SO)。但是,由于您没有拥有 OpenGL“库”,这很复杂;它是运行代码的任何平台的系统基础结构的一部分。因此,您甚至不知道您可能在其他人的计算机上使用的特定DLL。

因此,为了获取OpenGL函数指针,必须使用现有的基础结构来加载它们。

答案 1 :(得分:2)

主要原因之一是扩展:在每个平台上,OpenGL始终支持特定于平台的扩展。这些不能成为官方标题的一部分,因为它们通常由供应商在规范更新之间添加。此外,这些特定于供应商的扩展可能存在于完全奇怪的DLL / SO中,例如,在驱动程序内部。也无法保证驱动程序DLL在他们的"规范"下导出它们。名称,所以OpenGL很早就依赖特定于平台的东西来加载一个函数指针。这使整个扩展工作变得可行。

在所有平台上,你通常会在不使用扩展(OpenGL 1.4左右)的情况下获得一些OpenGL,但由于扩展方法成功且易于实现,所以现在每个人都使用它(类似于OpenCL!)

答案 2 :(得分:1)

在Mac上,您不需要加载函数指针,只需在OpenGL框架中包含一个标题和链接。