【问题标题】:What is OpenGL as a computer file什么是 OpenGL 作为计算机文件
【发布时间】:2012-05-12 13:59:27
【问题描述】:

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

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

OpenGL 不断更新(无论它是什么)。如果它所做的只是与一堆不同计算机上的图形卡进行通信,而这些计算机上的图形卡由于内置而永远不会更新,那么如何做到这一点?

【问题讨论】:

    标签: opengl


    【解决方案1】:

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

    OpenGL 规范基本上详细说明了 OpenGL API 的所有工作方式 - 预期的行为应该是什么,什么时候被认为是意外行为,什么时候抛出哪些错误等等。该规范让驱动程序编写者确切地知道他们需要什么做并让应用程序编写者知道对驱动程序的期望。这就是 OpenGL 真正“是”的东西——将应用程序和驱动程序结合在一起的粘合剂。 You can read all the specifications for each version here.

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

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

    我知道 ATI 驱动程序有一个小错误,您必须调用 glEnable(GL_TEXTURE_2D); 才能以 OpenGL 3 方式 (glGenerateMipMaps()) 生成 mipmap,尽管 GL_TEXTURE_2D 已被弃用为 @ 的可能值987654325@。我不确定它现在是否已修复,但它肯定是驱动程序编写者很容易忽略的边缘情况。

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

    【讨论】:

    • 小心使用“驱动程序”这个词。就操作系统而言,您实际上是在谈论库。司机是完全不同的野兽。
    • OpenGL 的当前版本现在是 4.2。现在,据我所知,您不能指望 2.1 或 3.0 版代码与 4.2 版一起编译,因为 4.2 版有一组完全不同的函数(对吗?)。那么,基本上,这些功能都被添加和更改为比早期版本更有效地运行?
    • @AUTO 您可以期望 2.1 或 3.0 代码与 4.2 版本一起编译,因为该规范从一开始就是为了向前兼容而构建的。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 那么,OpenGL 中不断变化的部分是“驱动程序”部分吗? API部分是不变的?那么,这个“驱动”部分有什么作用呢?
      • OpenGL 没有驱动部分——他说的是你的显卡驱动,OpenGL 库与之对话。所有显卡驱动程序都实现了特定的标准,因此不同的图形 API(例如 DirectX、OpenGL)可以与它们通信,并且操作系统也知道如何与它们通信。
      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 2021-07-30
      • 2011-08-22
      • 2023-03-04
      • 1970-01-01
      • 2012-03-12
      • 1970-01-01
      • 2012-08-24
      相关资源
      最近更新 更多