Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GPU DirectX与OpenGL支持_Opengl_Directx_Gpu - Fatal编程技术网

GPU DirectX与OpenGL支持

GPU DirectX与OpenGL支持,opengl,directx,gpu,Opengl,Directx,Gpu,据我所知,GPU供应商定义了标准接口,供操作系统开发人员用于与其特定驱动程序通信。所以DirectX和OpenGL只是该接口的包装。当操作系统开发人员决定创建新版本的图形API时,GPU供应商会扩展其接口(新的例程速度更快,而旧的例程会因兼容性问题而保留),操作系统开发人员会使用此接口的新部分。 那么,当有人说GPU供应商对DirectX的支持优于OpenGL时,这是否仅仅意味着GPU供应商主要考虑了微软未来开发DirectX API结构的计划,并根据自己的需要调整该接口的未来开发?或者在此之前

据我所知,GPU供应商定义了标准接口,供操作系统开发人员用于与其特定驱动程序通信。所以DirectX和OpenGL只是该接口的包装。当操作系统开发人员决定创建新版本的图形API时,GPU供应商会扩展其接口(新的例程速度更快,而旧的例程会因兼容性问题而保留),操作系统开发人员会使用此接口的新部分。

那么,当有人说GPU供应商对DirectX的支持优于OpenGL时,这是否仅仅意味着GPU供应商主要考虑了微软未来开发DirectX API结构的计划,并根据自己的需要调整该接口的未来开发?或者在此之前有一些技术原因?

图形硬件抽象和图形API(如OpenGL和Direct3D)之间没有1:1的对应关系。WDDM是Windows Vista的驱动程序模型,它定义了常见的调度、内存管理等内容,因此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仍然保持了一定的优势。如果说有什么不同的话,那么D3D中的着色器编译器和最小功能集(没有遗留的包袱)可能就是让您觉得供应商更好地支持它的原因

随着AMD Mantle的出现,桌面画面可能会再次发生变化(回想3Dfx和Glide的时代)。。。这当然表明,操作系统开发人员与图形API设计几乎没有关系。NV和AMD在PS3、GameCube/Wii/WiiU和PS4上都有专有的API,除了桌面上的D3D和OpenGL之外,它们还必须实现这些API,因此总体情况比您想象的要广泛得多

据我所知,GPU供应商定义了标准接口,供操作系统开发人员用于与其特定驱动程序通信。所以DirectX和OpenGL只是该接口的包装

不,不是真的。DirectX和OpenGL只是定义API的规范。但规范只不过是一个文档,而不是软件。OpenGL API规范由控制,DirectX API规范由Microsoft控制。然后,每个操作系统定义一个所谓的ABI(应用程序二进制接口),该接口指定操作系统支持哪些系统级API(OpenGL和DirectX是系统级API)以及在相关操作系统上运行时实际实现必须遵守的规则

实际的OpenGL或Direct3D实现发生在硬件的驱动程序中(实际上硬件本身也是实现的一部分)

当操作系统开发人员决定创建新版本的图形API时,GPU供应商会扩展他们的接口

事实上,情况正好相反:大多数图形API规范都是由图形硬件供应商制定的。毕竟,它们离橡胶撞击路面的地方很近。就Khronos而言,GPU制造商是Khronos控制集团的一部分。就DirectX而言,硬件制造商向微软提交草稿,并审查微软提出的变更和建议。但最终,每个新的API版本都反映了开发中的下一代硬件功能的共同点

那么,当有人说GPU供应商对DirectX的支持优于OpenGL时,这是否仅仅意味着GPU供应商主要考虑了微软未来开发DirectX API结构的计划,并根据自己的需要调整该接口的未来开发

不,这意味着每个GPU供应商都实现了自己版本的OpenGL和Direct3D后端,这就是所有神奇之处。然而,OpenGL非常强调向后兼容性和向新功能过渡的容易性。Direct3D开发OTOH能够快速切断与早期版本的联系。这也意味着完整的兼容性配置文件OpenGL实现相当复杂。这也是为什么OpenGL核心配置文件的最新版本(过期)在减少对遗留功能的支持方面起作用的原因;这种API复杂性的降低对开发人员来说也是一件非常解放的事情。如果你纯粹为了一个核心概要文件而开发,它会简化很多事情;例如,在编写插件时,您不再需要担心过多的内部状态

另一个因素是,对于Direct3D,只有一个着色器编译器,它不是驱动程序基础结构/实现本身的一部分,而是在程序构建时运行