【问题标题】:Where is opengl located(gpu software or os)? [duplicate]opengl 在哪里(gpu 软件或操作系统)? [复制]
【发布时间】:2018-06-24 09:17:00
【问题描述】:

我正在编写一个 x86 操作系统,一个问题突然出现在我的脑海中: 如果我想在我的操作系统中创建一个简单的 opengl 游戏,我是否能够在不重新发明 opengl 的情况下做到这一点? 所以我要问的是,opengl 是否包含在例如nvideo驱动程序,还是位于gpu固件中? 如果它在 gpu 中,我可以简单地移植/创建一个 opengl 包装器,对吗?

有人可以详细说明一下吗?

谢谢

【问题讨论】:

  • GPU、软件还是操作系统?全部同意。硬件加速 OpenGL 操作,可以通过硬件或软件来执行。 OS负责管理屏幕与OpenGL的关系(上下文);加载和管理 OpenGL 驱动程序。建议您阅读一些图形编程和开发的历史。
  • OpenGL 是类似于 C++ 的标准。它指定必须存在哪些功能以及它们如何工作才能被称为 OpenGL 兼容。如果您想实现 OpenGL,您需要查看标准并执行此操作。理想情况下,您可以通过告诉显卡来移植执行大多数实现的现有驱动程序。
  • 那么,我在哪里可以找到 nvidea 或 amd 驱动程序?他们不是封闭源代码吗?因此,opengl 只是让 gpu 绘制 3d 世界的一种方式(就像 directx 一样),还是 opengl 是加载到 gpu 然后加载 3d 世界的程序?
  • 经过大量努力,您也许能够移植其中一个开源驱动程序(例如 Nouveau)。通过更多的努力,您可能也可以获得一个闭源驱动程序。

标签: c++ opengl x86 operating-system wrapper


【解决方案1】:

GPU 硬件执行特定代码。其中一些代码是可编程的,这意味着您编写在 GPU 卡内运行的特殊代码。

传递此特殊代码的指令(OpenGL 术语中的着色器)和它们处理的数据是图形 API(OpenGL、DirectX)。 GPU 的指令也更多,它们也由 API 处理。

此 API 存在于显卡驱动程序中。

首先,应用要求操作系统提供指向 API 命令的函数指针。这些指针是从驱动程序中检索的。然后应用程序使用这些指针与 GPU 通信(通过驱动程序)。
两个细节:在 MAC 中不需要检索指针,它们将它们作为任何 C++ 指令提供。在 Windows 中也是如此,但仅适用于 OpenGL 1.1

Windows 和 Mac 的驱动程序是专有软件。
在 Linux nVidia 中,AMD 和 Intel 提供了他们的驱动程序(但大多是封闭源代码)。同样在 Linux 中,有一些开发人员自己编写的开源驱动程序。

最后,Mesa 完成了 OpenGL API 的软件实现。 Mesa 也是为 Linux 编写开源驱动程序的公司之一。

【讨论】:

    【解决方案2】:

    OpenGL 是 GPU 驱动程序的 API。以 nVidia 为例,他们为支持的操作系统发布了闭源驱动程序。还有一些开源驱动程序(nouveou 项目)试图对 nVidia 显卡进行逆向工程并为它们实现开源驱动程序。在某种程度上,其他供应商也是如此。

    因此,考虑到您的情况,您应该在具有广泛支持的操作系统的操作系统中实现 ABI 兼容层,以便您可以运行闭源驱动程序,或者将开源社区驱动程序移植到您的操作系统。

    【讨论】:

      猜你喜欢
      • 2020-03-30
      • 2022-06-30
      • 2015-06-17
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2015-04-18
      • 2019-09-27
      相关资源
      最近更新 更多