OpenGL是执行图形命令的接口。现在,如果该库是多平台的,它如何与GPU交互?是通过进行系统调用从而使其多平台,还是使用驱动程序执行其操作?
OpenGL是执行图形命令的接口。现在,如果该库是多平台的,它如何与GPU交互?是通过进行系统调用从而使其多平台,还是使用驱动程序执行其操作?
OpenGL通常作为图形驱动程序的一部分实现。每个实现都使用特定于实现的接口与某些内核空间组件和真正的硬件进行通信。
通过查看基于Linux的MESA开源GL实现,我们可以更清楚地了解这些内容是如何完成的。他们实际上使用Linux内核的DRM(直接渲染管理器) API与硬件进行通信。MESA的当前实现方式是为每个GPU提供一个drm内核驱动程序和用户空间DRI客户端。现在,Mesa使用gallium API作为抽象层,使GPU专用代码更小、更具可移植性。OpenGL API在其上面作为“状态跟踪器”实现,并且独立于GPU驱动程序。(甚至有过D3D10/11状态跟踪器,但它更像是一个测试,后来被删除了,因为它无法维护。)
OpenGL被定义为跨平台的API,但这并不意味着OpenGL库完全跨平台。这与C库API是语言标准的一部分的情况相同,但实现非常特定于平台。