我正在编写一个x86操作系统,一个问题突然出现在我脑海中: 如果我想在我的操作系统中创建一个简单的opengl游戏,我能否在不重新发明opengl的情况下做到这一点? 所以我要问的是,opengl包含在例如nvideo驱动程序,还是位于gpu固件中? 如果它在gpu中,我可以简单地端口/创建一个opengl包装器吗?
有人可以详细说明这个吗?
由于
答案 0 :(得分:2)
GPU硬件执行特定代码。其中一些代码是可编程的,这意味着您可以编写在GPU卡内运行的特殊代码。
传递此特殊代码(OpenGL用语中的着色器)及其处理的数据的指令是图形API(OpenGL,DirectX)。还有更多关于GPU的说明,它们也由API处理。
此API存在于显卡驱动程序中。
首先,应用程序要求操作系统提供API命令的函数指针。从驱动程序中检索这些指针。然后应用程序使用这些指针与GPU通信(通过驱动程序)。
两个细节:MAC中不需要重新指针,它们提供任何C ++指令。在Windows中也是如此,但仅适用于OpenGL 1.1
Windows和Mac的驱动程序是专有软件。
在Linux nVidia中,AMD和英特尔提供他们的驱动程序(但主要是作为封闭源)。同样在Linux中,有开源驱动程序,一些开发人员自己编写。
最后,有一个由Mesa完成的OpenGL API的软件补充。 Mesa也是为Linux编写开源驱动程序的人之一。
答案 1 :(得分:1)
OpenGL是GPU驱动程序的API。以nVidia为例,他们发布了支持操作系统的闭源驱动程序。还有一些开源驱动程序(nouveou项目)试图对nVidia显卡进行逆向工程并为它们实现开源驱动程序。其他供应商在某种程度上也是如此。
因此,考虑到您的方案,您应该在操作系统中使用广泛支持的操作系统实现ABI兼容层,以便您可以运行闭源驱动程序,或将开源社区驱动程序移植到您的操作系统。