c++ - Direct3D 是否应该用于 Windows 中的 OpenGL?

标签 c++ c opengl directx

由于 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/

相关文章:

c++ - OpenGL glfwGetVideoMode 导致段错误

php - 如何利用php的漏洞?

c++ - 控制台应用程序控制台窗口 - Visual C++

c++ - 为什么下面的程序没有选择与第一个模板参数相同类型的参数?

c - 未知类型名称 ‘sockaddr’

c++ - OpenGL 命令 - 顺序或并行

c++ - 传递参数(将 std::string 转换为 LPWSTR 的概率)

c++ - 按时间管理许可证

c - 为什么 fork() 在 setsid() 之前

c++ - OpenGL:如何检查用户 GFX 卡是否可以使用我的着色器进行渲染?