什么是OpenGL扩展库、加载库和绑定库?

6
什么是OpenGL扩展库,加载库,绑定库?
它们为什么需要?
您能用简单易懂的术语解释一下吗?
2个回答

7
首先需要了解的是,OpenGL只是一组与GPU交互的方法规范。如果你使用的是Windows或Linux系统,GPU供应商将提供一个带有该规范实现的驱动程序。如果你使用的是OSX系统,则该实现已经包含在操作系统中。
要使用OpenGL,你需要一个OpenGL上下文。它本质上是一些内存,将保存OpenGL内部状态机的当前状态。要创建这样的上下文,你应该使用像glfwfreeglut这样的绑定库
然后你需要访问OpenGL方法。在Windows上,你可以使用opengl32.dll​库仅访问遗留的OpenGL1.1!如果你想使用现代OpenGL,你需要获取由驱动程序公开的函数指针。有几个加载库可用于此。我认为最常见的是glew
OpenGL允许GPU供应商提供自定义扩展规范。您可以像检索普通OpenGL函数一样检索这些函数。再次强烈建议使用glew,它也是一个扩展库。
然后,您需要一个头文件来拥有所有这些函数的原型。但实际上glew也处理了这个问题。

2
针对每个操作系统所定义的OpenGL支持,只有一个非常特定的子集或版本被定义为严格要求。对于Windows,它是OpenGL-1.1,对于Linux根据LSB-4规范,它是OpenGL-1.2(根据LSB-5规范,它是OpenGL-2.1),对于MacOS-X,每个主要版本通常会将其推进到OpenGL版本,即当特定版本的OS-X开发开始时,该版本是最先进的(这解释了OpenGL版本发布和其在OS-X中支持之间的滞后)。
除了已固定在操作系统ABI规范中的版本外,程序不需要提供其他任何内容。这意味着,在Windows上运行的程序可能不希望看到除OpenGL-1.1之外的任何内容得到支持。或者在Linux上是OpenGL-1.2。超出这些版本的任何内容都是纯粹可选的,并且必须在运行时检查其可用性,并动态解析所有所需的函数入口点。
OpenGL加载器正是这样做的:它们检查实际支持的OpenGL版本配置文件,并将所有实际可用的函数加载到程序员可访问的符号中;当然,如果在初始化后发现不支持这些函数,则不能使用这些函数。

1
除了在操作系统ABI规范中固定的版本外,程序无需提供任何其他内容。这是什么意思? - user366312
1
@BROY:这意味着例如在Windows-NT4.0时期,微软决定“OpenGL-1.1是程序可以预期存在和工作的内容。但只有OpenGL-1.1”。在Windows中超出OpenGL-1.1的任何内容都无法被程序员提前知道。代码必须以一种方式编写,即检查实际可用的其他内容,然后尝试仅在那时使用它。 - datenwolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接