1

好的,我知道网上有数百万个关于 OpenGL 是什么的答案,但我正试图从我的计算机上的文件中弄清楚它是什么。我研究并发现 OpenGL 充当不同计算机显卡的多平台转换器。那么,它是一个dll吗?
我想知道,如果它是一个 dll,那么我不能下载任何版本的 dll(最好是最新的),然后使用它,知道它有什么吗?

编辑:好的,所以如果它是一个 windows dll,并且我制作了一个使用较晚版本的 OpenGL 游戏,如果其他人的较早版本的计算机不支持它怎么办?我是否可以在我的游戏中携带 dll,以便其他 Windows 计算机支持它?或者 dll 是否设置为在特定计算机上严格与显卡通信?

OpenGL 不断更新(不管它是什么)。如果它所做的只是与一堆不同计算机上的显卡进行通信,而这些计算机的显卡自内置以来就永远不会更新,这怎么能做到呢?

4

3 回答 3

4

OpenGL 有两个“部分”——由 Khronos Group 每隔几个月更新一次的规范,以及由您的显卡制造商专门为您的显卡型号编写的驱动程序。

OpenGL 规范基本上详细说明了 OpenGL API 应该如何工作 - 预期的行为应该是什么,什么时候被认为是意外行为,什么时候抛出哪些错误等。该规范让驱动程序编写者确切地知道他们需要做什么,并且让应用程序编写者知道对驱动程序的期望。这就是 OpenGL 真正“是”的东西——将应用程序和驱动程序结合在一起的粘合剂。您可以在此处阅读每个版本的所有规格。

然后是实现 OpenGL API 并被认为符合规范的驱动程序。驱动程序完全符合您的预期 - 将数据复制到显卡内存或从显卡内存中复制数据,将数据写入显卡寄存器,跟踪状态,处理顶点,编译着色器,指示数百个流处理器同时转换顶点和填充像素等。如果没有 OpenGL,每个显卡模型都会有一个单独的、稍快的 API,由于它的结构方式,它只适用于那个显卡。使用 OpenGL,驱动程序都是针对相同的 API 编写的,应用程序的代码将在所有显卡上运行。

OpenGL 规范的合规性不会随着驱动程序更新而改变。大多数驱动程序更新将修复小错误或进行一些内部优化。

我知道有一次 ATI 驱动程序存在一个小错误,您必须调用glEnable(GL_TEXTURE_2D);它才能生成 OpenGL 3 方式 ( glGenerateMipMaps()) 的 mipmap,尽管GL_TEXTURE_2D已弃用glEnable(). 我不确定它现在是否已修复,但它肯定是驱动程序编写者很容易忽略的边缘案例类型。

至于优化,有很多需要优化的地方。也许还有另一种在编译着色器时优化着色器的方法,也许有一种更有效的方法可以在流处理器之间分配工作,我不知道。

于 2012-05-13T08:39:21.630 回答
3

OpenGL是用于图形编程的跨平台API 。就编译代码而言,它将作为特定于操作系统的库提供 - 例如 Windows 中的 DLL (opengl32.dll) 或 Linux 中的 SO。

您可以从OpenGL.org获取 SDK 和二进制可再发行组件

根据您使用的语言,可能有可用的 OpenGL 包装器。这些是专门设计用于您的语言的类或 API 库。例如,有可供 C# / VB.NET 开发人员使用的 .NET OpenGL 包装器。对这个主题进行快速的谷歌搜索应该会给你一些结果。

于 2012-05-12T14:05:06.433 回答
1

OpenGL API 偶尔会发布新版本,但这些更新本质上是向后兼容的。此外,新功能通常作为扩展添加,并且可以检测存在哪些扩展并仅使用本地可用且受支持的扩展......因此您可以构建您的软件以利用可用的新功能,但当他们不在时仍然可以运行。

API 与单个驱动程序无关——驱动程序可以在不更改 API 的情况下更新,因此驱动程序不断更新的事实对于与您的软件的兼容性而言并不重要。因此,您可以选择一个 API 版本进行开发,并且只要您的目标操作系统附带与该 API 兼容的 OpenGL 库版本,您就不必担心驱动程序更新会破坏您的软件的能力与本地可用的库动态链接。

于 2012-05-12T14:52:07.193 回答