据我所知,GPU供应商定义了标准接口,用于操作系统开发人员与其特定驱动程序的通信。所以DirectX和OpenGL只是那个接口的包装器。当OS开发人员决定创建新版本的图形API时,GPU供应商扩展了他们的接口(新例程更快,旧例程留给兼容性问题),操作系统开发人员使用这个新的接口部分。
因此,当人们说GPU供应商对DirectX的支持比对OpenGL的支持要好的时候,这是否仅仅意味着GPU供应商主要考虑到微软未来开发DirectX API结构的计划,并根据他们的需要调整这个接口的未来开发?或者在这之前有一些技术原因?
发布于 2013-10-27 22:15:53
据我所知,GPU供应商定义了标准接口,用于操作系统开发人员与其特定驱动程序的通信。所以DirectX和OpenGL只是那个接口的包装器。
不,不是真的。DirectX和OpenGL只是定义API的规范。但是,规范只不过是一个文档,而不是软件。OpenGL API规范由Khronos控制,DirectX API规范由微软控制。然后,每个OS定义一个所谓的ABI (应用程序二进制接口),它指定操作系统支持哪个系统级别的ABI (OpenGL和DirectX是系统级ABI),以及在所讨论的操作系统上运行时实际实现必须遵循的规则。
实际的OpenGL或Direct3D实现发生在硬件的驱动程序中(实际上硬件本身也是实现的一部分)。
当OS开发人员决定创建新版本的图形API时,GPU供应商会扩展他们的界面。
事实上,情况正好相反:大多数图形API规范都是由图形硬件供应商制定的。毕竟,他们离橡胶撞上马路的地方很近。就Khronos而言,GPU制造商是Khronos控制集团的一部分。在DirectX的情况下,硬件制造商向微软提交草稿,并对其所做的修改和建议进行审查。但是最后,每个新的API版本都反映了正在开发的下一代硬件的共同特性。
因此,当人们说GPU供应商对DirectX的支持比对OpenGL的支持要好的时候,这是否仅仅意味着GPU供应商主要考虑到微软未来开发DirectX API结构的计划,并根据他们的需要调整这个接口的未来开发?
不,这意味着每个GPU供应商都实现了自己版本的OpenGL和Direct3D后端,这就是所有魔术发生的地方。然而,OpenGL非常强调向后兼容性和向新功能的转换。Direct3D开发OTOH与早期版本的关系很快。这也意味着全面发展的兼容性配置文件OpenGL实现是相当复杂的猛兽。这也是为什么最近版本的OpenGL核心概要文件在减少对遗留特性的支持方面做了(逾期)的工作;这种降低API复杂性的方法对于开发人员来说也是一件很解放的事情。如果您纯粹为核心配置文件开发,它简化了许多事情;例如,在编写插件时,您不再需要担心过多的内部状态。
另一个因素是,对于Direct3D,只有一个着色器编译器,它不是驱动程序基础结构/实现本身的一部分,而是在程序构建时运行的。然而,OpenGL实现必须实现自己的GLSL着色器编译器,这会使事情复杂化。IMHO缺乏统一的AST或即时着色代码是OpenGL的主要缺点之一。
发布于 2013-10-27 21:31:30
图形硬件抽象和图形API (如OpenGL和Direct3D )之间没有1:1的对应关系。WDDM是Windows的驱动程序模型,它定义了诸如公共调度、内存管理等功能,以便DirectX和OpenGL应用程序可以互操作工作,但DirectX、OpenGL或GPU的总体设计很少与此相关。把它想象成内核,没有人专门创建一个CPU来运行它,而且每次出现一个新的处理器架构迭代,添加一个新的指令子集时,您都不必重新编译内核。
应用程序开发人员和IHV(您称之为GPU供应商)主要负责处理GPU体系结构的更改。看来,操作系统与方程式的关系要比实际情况更密切,因为微软(更多地)和苹果--它们都维护着自己的专有操作系统--在DirectX和OpenGL的设计中都有影响力。如今,OpenGL密切关注普通桌面GPU硬件的开发,但情况并不总是如此--它包含了自定义SGI工作站时代的包袱,而兼容性配置文件中的许多东西几十年来都不是桌面GPU上的原生硬件。另一方面,DirectX一直遵循桌面硬件。过去,如果你想知道桌面GPU的发展方向,D3D是一个很好的标志。
OpenGL可以说比DirectX更复杂,因为直到最近,它从未放弃任何东西,而DirectX则从根本上重新定义了API,并在每次迭代中取消了遗留支持。这两种API在最近几年都已经稳定下来,但是D3D仍然保持了一些优势,因为它只需要在一个平台上实现,而且微软编写了唯一的着色器编译器。如果说有什么不同的话,那就是D3D中的着色器编译器和最小特性集(没有遗留问题)可能会给您留下供应商更好地支持它的印象。
随着AMD Mantle的出现,桌面图片可能会再次改变(回想一下3 3Dfx和Glide的时代)。当然,这表明OS开发人员与图形API设计没有多大关系。NV和AMD在PS3、GameCube/Wii/WiiU和PS4上都有专有的API,除了桌面上的D3D和OpenGL之外,它们还必须实现这些API,所以总体情况比你想象的要广泛得多。
https://stackoverflow.com/questions/19623239
复制相似问题