由于 Microsoft 通常对 Direct3D 有一点偏见,在 Direct3D 中使用 VBO 的场景会比在 OpenGL 中使用 VBO 的相同场景更快,还是一样,因为这取决于显卡驱动程序? 谢谢
最佳答案
在性能方面,假设 GPU 驱动程序不错,总体上没有区别。
有些操作在 OpenGL 中比在 DirectX9 中更快,尽管 DX10 弥补了这一点。
但在使用外部硬件时,一个好的经验法则是决定性能的不是您使用的 API。
编写网络代码时,瓶颈是网络适配器,无论您的套接字代码是用 .NET 编写的、用 C 编写的普通 Berkeley 套接字,还是可能使用某些 Python 库,都没有关系。
编写代码使用 GPU 时,GPU 是限制因素。 DirectX 和 OpenGL 之间的最大区别在于,一个可能需要比另一个多调用一两次函数才能完成某些任务——而这样的性能成本几乎不存在。在这两种情况下,GPU 上发生的情况都是相同的,因为这取决于您的 GPU 驱动程序,并且因为 OpenGL 和 DirectX 都试图尽可能高效。
尽管有充分的理由更喜欢这两个 API。
DirectX 有更好的工具支持。微软在这方面做得非常好。使用 PIX 等工具可以更轻松地调试和优化 DirectX 代码。并且微软还提供了帮助程序库 D3DX,它提供了很多常用功能的高效实现。
OpenGL 的优势在于它不依赖于特定的操作系统。 DirectX9 仅适用于 Windows。 DX10 及更高版本仅适用于 Vista 及更高版本。
OpenGL 可在任何已编写 OpenGL 驱动程序的操作系统上运行。
在 Windows 上,情况有时会有点尴尬。 Windows 本身只带有 OpenGL 的古老实现。 (我相信带有 v1.1 的 XP,以及带有 1.5 的 Vista/7)。
因此,Windows 上的 OpenGL 应用依赖于 GPU 供应商为其驱动程序提供更新的实现。 ATI 和 NVidia 确实提供了非常好的实现,所以这不是什么大问题。英特尔的 OpenGL 驱动程序在质量和支持的功能方面普遍落后。
关于c++ - Direct3D 是否应该用于 Windows 中的 OpenGL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3146438/