程序员有没有办法将数据直接写入视频内存?我知道操作系统对此非常严格,但后来某些类型的应用程序(如视频播放器或电脑游戏)可以将数据直接写入视频内存。
我知道有很多着名的库(例如OpenGL);但它们毕竟只是普通的图书馆,它们和我和你写的节目之间没有根本的区别。
答案 0 :(得分:1)
我知道有很多着名的库(例如OpenGL);但它们毕竟只是普通的图书馆,它们和我和你写的节目之间没有根本的区别。
哦,他们完全与“普通图书馆”不同。
以OpenGL为例。部分原因是您加载的DLL或SO。但其中一部分是“驱动程序”或“图形驱动程序”。那根本不是一个“正常的图书馆”;它基本上是操作系统的一部分。它基本上是操作系统的一部分,而不是OS制造商写的。
系统定义驱动程序的接口,硬件制造商提供适合该接口的驱动程序库。但这不是普通用户能够提供的,也不是通过安装自己的图形驱动程序来运行大多数游戏。
驱动程序的目的是为OS和OS的客户端提供图形硬件的统一接口。不同的硬件是不同的,但是OS的每个驱动程序都会导出相同的接口(或多或少),这使得客户端代码不必知道硬件的细节。
此还会阻止客户端代码破坏系统。如果你崩溃GPU(因为它是处理器,你现在可以做的事情),有人必须处理它。操作系统处理CPU故障,现在图形驱动程序/操作系统也处理 GPU 故障。但为了做到这一点,它必须站在你和硬件之间。
在大多数操作系统上,不允许直接和任意访问视频内存。不适用于任何本身不是图形驱动程序的程序。许多低级API(如OpenGL)允许您映射某些内存分配,以便您可以访问它们。但这与给某人一个GPU内存指针非常不同;毕竟,不能保证映射指针实际指向GPU内存。
哦,他们不会让你映射纹理或帧缓冲区,因为他们想要保持实现定义的硬件纹理格式的细节。