一篇文章总结了使用 OpenGL 进行 3D 渲染所涉及的步骤:
- 您的程序启动,使用“OpenGL”进行绘图。
- 库“Mesa”实现了 OpenGL API。它使用特定于卡的驱动程序将 API 转换为特定于硬件的形式。如果驱动程序在内部使用 Gallium,则有一个共享组件可以将 OpenGL API 转换为通用中间表示形式 TGSI。 API 通过 Gallium 传递,所有特定于设备的驱动程序所做的都是从 TGSI 转换为硬件命令,
- libdrm 使用特殊的秘密卡特定 ioctl 与 Linux 内核对话
- Linux 内核具有特殊权限,可以在卡上分配内存并为卡分配内存。
- 回到 Mesa 级别,Mesa 使用 DRI2 与 Xorg 通信,以确保缓冲区翻转和窗口位置等同步。
我不明白步骤3。在步骤2中,内核空间中的GPU设备驱动程序生成“硬件命令”。然后这些硬件命令被交给用户空间中的libdrm?!我认为设备驱动程序直接与 GPU 本身交互。 libdrm在这里的作用是什么?