OpenGL如何在最低级别工作?

我理解如何编写OpenGL / DirectX程序,我知道它背后的数学和概念性东西,但我很好奇GPU-CPU通信如何在低级别上运行。


假设我有一个用C语言编写的OpenGL程序,它显示一个三角形并将相机旋转45度。当我编译这个程序时,它会变成一系列ioctl调用,然后gpu驱动程序将相应的命令发送到gpu,其中旋转三角形并设置适当颜色的适当像素的所有逻辑都是有线的在?或者程序是否会编译成一个“gpu程序”,它被加载到gpu并计算旋转等?还是完全不同的东西?


编辑:几天后我发现这篇文章系列,基本上回答了这个问题:http: //fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part- 1 /


翻阅古今
浏览 488回答 3
3回答

斯蒂芬大帝

当我编译这个程序时,它会变成一系列ioctl调用,然后gpu驱动程序将相应的命令发送到gpu,其中旋转三角形并设置适当颜色的适当像素的所有逻辑都是有线的在?或者程序是否会编译成一个“gpu程序”,它被加载到gpu并计算旋转等?你离我不远。您的程序调用可安装的客户端驱动程序(它实际上不是驱动程序,它是用户空间共享库)。这将使用ioctl或类似的机制将数据传递给内核驱动程序。对于下一部分,它取决于硬件。较旧的视频卡具有所谓的“固定功能管道”。在视频卡中有专用的存储空间用于矩阵,以及用于纹理查找,混合等的专用硬件。视频驱动程序将为每个单元加载正确的数据和标志,然后设置DMA以传输顶点数据(位置) ,颜色,纹理坐标等)。较新的硬件在视频卡内部具有处理器核心(“着色器”),这与CPU的不同之处在于它们的运行速度要慢得多,但是它们中有许多并行工作。对于这些视频卡,驱动程序准备程序二进制文件以在GPU着色器上运行。

慕森王

您的程序不是针对任何特定GPU编译的; 它只是动态链接到将实现OpenGL的库。实际实现可能涉及向GPU发送OpenGL命令,运行软件回退,编译着色器并将其发送到GPU,甚至使用着色器回退到OpenGL命令。图形界面相当复杂。值得庆幸的是,链接可以将您与大多数驱动程序的复杂性隔离开来,让驱动程序实现者可以自由使用他们认为合适的任何技术。
打开App,查看更多内容
随时随地看视频慕课网APP