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

时间:2015-06-25 20:56:03

标签: opengl

什么是OpenGL扩展库,Loading Library,绑定库?

为什么需要它们?

你能用简单明了的外行人解释一下吗?

2 个答案:

答案 0 :(得分:1)

对于为特定操作系统定义的每个OpenGL支持,只有一个非常特定的OpenGL子集或版本被定义为严格要求。对于Windows,它是OpenGL-1.1,对于Linux,根据LSB-4,它是OpenGL-1.2(根据LSB-5,它是OpenGL-2.1),对于MacOS-X,每个主要版本通常都会将其推向OpenGL版本,即最先进的OS-X特定版本的开发(解释了OpenGL版本之间的差异及其在OS-X中的支持)。

除了在OS ABI规范中固定的版本之外,程序无需任何操作。这意味着,在Windows上运行的程序可能不会期望看到除OpenGL-1.1之外的任何其他内容。或Linux上的OpenGL-1.2。超出这些版本的任何内容都是纯可选的,必须在运行时检查可用性,并且必须在运行时动态解析所需的所有函数入口点。

OpenGL加载器就是这样做的:它们检查实际支持哪个OpenGL版本配置文件,并将所有实际可用的函数加载到程序员可访问的符号中;当然,如果在初始化之后找不到这些函数,则不得使用这些函数。

答案 1 :(得分:1)

首先要理解的是,OpenGL只是与GPU交互的方法集的规范。然后,如果您使用的是Windows或Linux,您的GPU供应商将提供带有此规范实现的驱动程序。如果您使用的是OSX,则实施程序随操作系统一起提供。

要使用OpenGL,您需要OpenGL context。它本质上是一些内存,可以保存OpenGL内部状态机的当前状态。要创建此类上下文,您应该使用绑定库,例如glfwfreeglut

然后您需要访问OpenGL方法。在Windows上,您拥有opengl32.dll​库,只能访问旧版OpenGL1.1!如果要使用现代OpenGL,则需要获取驱动程序公开的函数的指针。有几个加载库。我认为最常见的是glew

OpenGL允许GPU供应商为规范提供自定义扩展。您可以像检测普通OpenGL函数一样检索这些函数。我再次建议使用glew,这也是一个扩展库

然后你需要一个标题来获得所有这些函数的原型。但是glew实际上也处理了这个问题。

相关问题