OpenGL如何与GPU通信?

时间:2014-04-21 12:49:40

标签: c opengl operating-system

OpenGL是一个执行图形命令的界面。现在,如果库是多平台的,那么它与GPU的交互是通过进行系统调用从而使其成为多平台还是使用驱动程序来执行其操作?

1 个答案:

答案 0 :(得分:10)

OpenGL通常作为图形驱动程序的一部分实现。每个实现都将使用特定于实现的接口与某些内核空间组件和真实硬件进行通信。

通过查看Linux上基于MESA的开源GL实现,可以更多地了解这些事情。实际上,他们使用Linux内核的DRM(直接渲染管理器)API与HW进行通信。 MESA的当前实现是有组织的,对于每个GPU,有一个drm内核驱动程序和一个用户空间DRI客户端。 Mesa现在使用gallium API作为抽象层来保持GPU特定代码的小巧并使其更具可移植性。 OpenGL API作为“状态跟踪器:”实现,并且独立于GPU驱动程序。(甚至有D3D10/11 state tracker,但它更像是一个测试,后来被删除,因为它变成了没有维护。)

将OpenGL定义为与平台无关的 API 这一事实并不意味着 OpenGL库将完全独立于平台。这与C库API是语言标准的一部分是相同的情况,但实现是非常特定于平台的。