0

可能的重复:
OpenGL 如何在最低级别工作?

当我们制作一个使用 OpenGL 库的程序时,例如对于 Windows 平台,并且有一个支持 OpenGL 的显卡,会发生以下情况:

  1. 我们使用将图形与 OpenGL(例如 Visual C++)连接起来的编程语言开发了我们的程序。

  2. 为目标平台(例如Windows)编译和链接程序

  3. 当您运行程序时,由于我们有一个支持 OpenGL 的显卡,安装在同一个 Windows 上的驱动程序将负责管理相同的图形。为此,当 CPU 将所需的数据发送到显卡上的芯片(例如 NVIDIA GPU)时,会绘制出结果。

  4. 在这种情况下,我们谈论图形加速和下载到 CPU 即计算帧缓冲区结束我们图形表示的工作。

  5. 在这种环境下,当 GPU 的驱动程序接收到数据时,如何利用 GPU 的能力来加速绘图?翻译接收到的指令和数据 CUDA 语言类型以利用并行能力?或者只是将从 CPU 接收到的数据复制到设备内存的特定区域?这部分不太明白。

  6. 最后,如果我有一个支持 OpenGL 的卡,安装在 Windows 中的驱动程序会检测到问题吗?会出现 CPU 错误,还是您会计算我们的帧缓冲区?

4

2 回答 2

2

你最好去电脑游戏网站工作。他们经常发表有关 3D 图形如何工作以及“人工制品”如何在游戏或驱动程序出现错误时呈现自己的文章。

您还可以阅读有关 Mesa 或 Gallium 等 3D 库架构的文章。

总体驱动程序有一组方法来实现 Direct 3D 或 OpenGL 或其他标准 API 的这个或那个功能。当他们加载时,他们会检查硬件。您可以拥有便宜的视频卡或昂贵的视频卡,最近的一张或 3 年前发布的一张……那是不同的硬件。因此,驱动程序正在尝试将每个 API 功能映射到可以在给定计算机上使用的实现,由 GPU 加速,由 CPU 加速(如 SSE4),甚至是一些更基本的实现。

然后驱动程序尝试估计 GPU 负载。有时功能可以加速,但GPU(尤其是低端的)已经被其他任务超载,那么它可能会尝试在CPU上计算而不是等待GPU时隙。

当您犯错时,总会有几种变体,具体取决于驾驶员的智力和素质。

  • 也许驱动程序会为您修复错误,忽略您的命令并运行自己的一组命令。
  • 也许驱动程序会向您的程序返回一些错误代码
  • 也许驱动程序会按原样执行命令。如果你用红色而不是绿色涂漆 - 这是一个错误,但司机无法知道的那种。在 PC 游戏相关网站上搜索“3d artefacts”。
  • 在最坏的情况下,您的错误会干扰驱动程序中的错误,并且您的计算机会崩溃并重新启动。

当然,所有这些自适应策略都相当复杂和不确定,这会导致 3D 驱动程序被封闭并且其内部的专有技术受到严密保护。

搜索专注于 3D 游戏甚至 3D 建模的网站——他们应该给视频卡打分“哪个更好买”,有时当他们审查新的芯片系列时,他们会撰写关于所有这些技术内部的相当详细的文章。

于 2012-11-19T12:08:54.367 回答
1

问题5.驱动程序所做的一些事情:它将您的GPU程序(顶点,片段等着色器)编译为特定卡的机器指令,将编译后的程序上传到设备内存的适当区域并安排在卡上的许多图形核心上并行执行的程序。它将图形数据(顶点坐标、纹理等)上传到适当类型的图形卡内存,使用来自程序员的各种提示,例如日期是否经常更新、不经常更新或根本不更新。它可以利用图形卡中的特殊单元来向/从主机内存传输数据,例如,一些 nVidia 卡有一个 DMA 单元(一些 Quadro 卡可能有两个或更多),它可以上传例如纹理并行通常的驱动程序操作(其他传输,

于 2012-11-19T13:11:35.080 回答