【发布时间】:2014-06-05 12:59:33
【问题描述】:
OpenGL 是一个执行图形命令的接口。现在,如果库是多平台的,它是如何与 GPU 交互的,它是通过进行系统调用从而使其成为多平台还是使用驱动程序来执行其操作?
【问题讨论】:
标签: c opengl operating-system
OpenGL 是一个执行图形命令的接口。现在,如果库是多平台的,它是如何与 GPU 交互的,它是通过进行系统调用从而使其成为多平台还是使用驱动程序来执行其操作?
【问题讨论】:
标签: c opengl operating-system
OpenGL 通常作为图形驱动程序的一部分来实现。每个实现都将使用特定于实现的接口与一些内核空间组件和真正的硬件通信。
通过查看 Linux 上基于 MESA 的开源 GL 实现,可以进一步了解这些事情是如何完成的。他们实际上使用 Linux 内核的DRM(直接渲染管理器)API 与硬件对话。 MESA 当前的实现是这样组织的,每个 GPU 都有一个 drm 内核驱动程序和一个用户空间 DRI 客户端。 Mesa 现在使用gallium API 作为抽象层,以保持 GPU 特定的代码小并使其更便携。 OpenGL API 在此之上实现为“状态跟踪器:”,并且独立于 GPU 驱动程序。(甚至有一个 D3D10/11 state tracker,但它更像是一个测试,后来因为它变得无人维护而被删除。 )
OpenGL 被定义为独立于平台的API 并不意味着OpenGL 库 将完全独立于平台。这与 C 库 API 是语言标准的一部分的情况相同,但实现是非常特定于平台的。
【讨论】: