据我所知,GPU供应商定义了OS开发人员用于与其特定驱动程序通信的标准接口。所以DirectX和OpenGL只是该接口的包装器。当OS开发人员决定创建新版本的Graphic API时,GPU供应商会扩展他们的界面(新的例程更快,而旧的例程留给兼容性问题),操作系统开发人员使用这个新的界面部分。 因此,当说厂商对DirectX的支持优于OpenGL时,它是否仅仅意味着GPU供应商主要考虑微软未来的开发DirectX API结构的计划,并根据他们的需求调整该接口的未来发展?或者在此之前有一些技术原因?
答案 0 :(得分:8)
据我所知,GPU供应商定义了OS开发人员用于与其特定驱动程序通信的标准接口。所以DirectX和OpenGL只是该接口的包装器。
不,不是真的。 DirectX和OpenGL只是定义API的规范。但规范只不过是一份文件,而不是软件。 OpenGL API规范由Khronos控制,DirectX API规范由Microsoft控制。然后,每个操作系统定义一个所谓的ABI(应用程序二进制接口),它指定操作系统支持哪些系统级API(OpenGL和DirectX是系统级API)以及实际实现必须遵守的规则,当在OS上运行时问题
实际的OpenGL或Direct3D实现发生在硬件的驱动程序中(实际上硬件本身也是实现的一部分)。
当OS开发人员决定创建新版本的Graphic API时,GPU厂商会扩展他们的界面
实际上它是相反的:大多数图形API规范都是由图形硬件供应商制定的。毕竟它们靠近橡胶撞到路面的地方。就Khronos而言,GPU制造商是Khronos控制组的一部分。在DirectX的情况下,硬件制造商提交草稿并审查Microsoft提出的更改和建议。但最终每个新的API版本都反映了下一代硬件开发能力的共同点。
因此,当说GPU供应商对DirectX的支持优于OpenGL时,它是否仅仅意味着GPU供应商主要考虑微软未来开发DirectX API结构的计划并调整此接口的未来发展需求?
不,这意味着每个GPU供应商都会实现他自己的OpenGL版本和Direct3D后端,这是所有魔术发生的地方。然而,OpenGL非常重视向后兼容性和易于过渡到更新的功能。 Direct3D开发OTOH可以快速缩短与早期版本的联系。这也意味着完整的兼容性配置文件OpenGL实现是非常复杂的野兽。这也是最近版本的OpenGL核心配置文件(过期)在减少对传统功能的支持方面的工作原因;这种API复杂性的降低对于开发人员来说也是一件非常自由的事情。如果您纯粹为核心配置文件开发,它可以简化很多事情;例如,在编写插件时,您不再需要担心过多的内部状态。
另一个因素是,对于Direct3D,只有一个着色器编译器,它不是驱动程序基础结构/实现本身的一部分,而是在程序构建时运行。但是,OpenGL实现必须实现自己的GLSL着色器编译器,这会使事情复杂化。恕我直言,缺乏统一的AST或即时着色器代码是OpenGL的主要缺点之一。
答案 1 :(得分:4)
图形硬件抽象与OpenGL和Direct3D等图形API之间没有1:1的对应关系。 WDDM是Windows Vista的驱动程序模型,它定义了常见的调度,内存管理等等,以便DirectX和OpenGL应用程序可以互操作,但DirectX,OpenGL或GPU的设计通常与此无关。可以把它想象成内核,没有人专门创建一个CPU来运行它,并且每次新的迭代处理器架构出现时都不需要重新编译内核,这会添加一个新的指令子集。
应用程序开发人员和IHV(GPU供应商,正如您所称)是主要处理GPU架构更改的人。可能看起来操作系统与实际操作系统有更多关系,因为微软(更多)和Apple都维护自己的专有操作系统 - 对DirectX和OpenGL的设计有影响。目前,OpenGL紧跟商用台式机GPU硬件的发展,但情况并非总是如此 - 它包含了自定义SGI工作站时代的包袱,兼容性配置文件中的许多东西在几十年内都不是桌面GPU上的硬件原生。另一方面,DirectX始终始终跟随桌面硬件。过去,如果你想要了解台式机GPU的发展方向,那么D3D就是一个很好的标记。
OpenGL可能比DirectX更复杂,因为直到最近它才放弃任何东西,而DirectX从根本上重新定义了API,并在每次迭代时剥离了传统支持。这两种API近年来已经稳定下来,但D3D仍然保持一定的优势,因为它只需要在单一平台上实现,而微软只编写着色器编译器。如果有的话,D3D中的着色器编译器和最小特征集(无遗留行李)可能是您得到供应商更好地支持它的印象的原因。
随着AMD Mantle的出现,桌面图片可能会再次发生变化(回想3Dfx和Glide的时代)......这肯定表明操作系统开发人员与图形API设计关系不大。除了台式机上的D3D和OpenGL之外,NV和AMD都在PS3,GameCube / Wii / WiiU和PS4上都有专有的API,因此整体情况要比你想象的要广泛得多。