【问题标题】:What version of DirectX should I use to make a 2D desktop GUI application?我应该使用什么版本的 DirectX 来制作 2D 桌面 GUI 应用程序?
【发布时间】:2012-04-08 16:50:07
【问题描述】:

我想用 DirectX 制作一个 2D 桌面 GUI 应用程序,但我不知道要使用哪个版本。我最初尝试过 Direct2D,但它从未真正流行起来,因此与 DirectX 的其他部分相比,它没有很多社区支持或文档,所以它不是一个选择。

所以我有三个选择:

  1. DirectX 9.0c
  2. DirectX 10
  3. DirectX 11(不是 11.1,我没有安装 Windows 8)

我的一位知识渊博的朋友强烈建议使用 DirectX 9.0c,说这就是我所需要的,但我对使用已有 8 年历史的平台持谨慎态度。微软几乎是遗留支持的顶峰,但我认为他们必须有一个限制。我不知道 DX10 和 DX11 的区别。

请记住,我是一个新手程序员,所以这主要是一个学习项目。

感谢任何建议!

编辑:对于版本之间在功能或编程范式方面的任何重大差异,我也很感激。

【问题讨论】:

  • 您有什么理由选择 DirectX 而不是常规的 Windows API?

标签: windows user-interface directx desktop-application


【解决方案1】:

我应该使用什么版本的 DirectX 来制作 2D 桌面 GUI 应用程序?

DirectX 9,因为您将获得更多用户。

我的一位知识渊博的朋友强烈推荐 DirectX 9.0c,说这就是我所需要的,但我对使用 8 年前的平台持谨慎态度。

许多 DirectX 7 和 DirectX 5 游戏仍然可以正常运行,更不用说使用 DirectDraw 的游戏了。所以使用 8 年的平台没有问题。使用更新(9 之后)的版本甚至可能对您没有好处,因此盲目追求更高的版本号并不是一个好主意。

根据您的情况,您也可以考虑使用 OpenGL,但只有当您的应用必须是跨平台的时,这种选择才有意义。如果您知道该应用程序仅适用于 Windows,那么选择 DirectX 9 是有意义的。

【讨论】:

    【解决方案2】:

    Microsoft 的主要承诺是对其 Windows 客户。谁仍然使用当时使用的任何 DirectX 版本运行 15 年的游戏。 IDirectDraw 活得很好。显然,作为开发人员,您将从中受益。当然,DX 9 得到了最广泛的硬件支持,因此这是一个绝佳的选择。如果您的游戏在旧硬件上表现不佳,请考虑更高的选择,DX 版本是一个自动选择器。

    【讨论】:

    • 谢谢!顺便说一句,我不是在编写游戏,而是在编写桌面应用程序(相对简单的图形,几乎没有数学)。您知道 DX 版本之间的功能是否存在显着差异吗?编程概念有什么变化?
    • 那是另一个问题。点击“”按钮询问。
    • 它们是有助于回答原始问题的相关问题。我不想为同样的动机创建一个新问题。
    • 这不是 SO 的工作方式,它是一个问答网站。一问一答。这不是一个论坛,您可以继续提出后续问题。考虑使用 social.msdn.microsoft.com 作为论坛网站,以您喜欢的方式工作。
    【解决方案3】:

    你写这篇文章是为了工作还是为了好玩?

    如果是为了工作,那么您必须遵守业务或营销人员定义的最低系统要求。如果您的最低操作系统可以是带平台更新的 Win7 或 Vista SP2,那么 Direct2D 是一个可行的选择。否则,DX9 是你必须走的路。

    如果是为了在您的个人时间获得乐趣,那么就做您认为最有趣的事情:) 如果您只想制作 2D 图形,Direct2D 肯定会更容易使用。我不会太担心“它没有获得普及/社区支持”的角度,特别是因为现在所有主要的桌面应用程序(Firefox、Internet Explorer 甚至下一版本的 Paint.NET)都在使用它。此外,Win8 将使用一大堆有趣的新功能更新 Direct2D(据我了解,此更新也将适用于 Win7)。

    刚开始使用 Direct2D 可能会很笨拙,但这主要是因为所有的 COM 东西。一旦您习惯了它并建立了自己的小型实用程序库,它实际上并不比 GDI+ 复杂。事实上,我已经能够将一堆旧的 GDI+ 代码移植到使用 Direct2D/DirectWrite 并且通常它只是逐行替换,例如SolidBrush -> SolidColorBrush(这是在 Paint.NET 4.0 代码库中,顺便说一句)。

    【讨论】:

    • "建立自己的小工具warchest" 这种情况下使用warchest自带的framework会更合理。
    • 在我的情况下,它与能够创建类似 SolidColorBrush 的东西有关,而无需先创建渲染目标,然后根据需要使用内部位创建“真实”ID2D1SolidColorBrush .这很棒,因为我不必担心在我想使用 D2D 的每个地方重新创建资源和管道。所以实际上我猜你是对的,因为我的“框架”是我自己的用于 D2D、DWrite 等的 .NET 互操作层:)
    • 这是为了好玩。顺便说一句,我已经尝试过 Direct2D ...我在尝试在屏幕上渲染位图时遇到了很多麻烦;您必须弄乱 Windows 图像处理组件,即使那样它也无法理解我试图渲染的位图资源中的数据。在 Direct3D 中,有一个名为 CreateTextureFromResource 的函数。完美运行。当我可以使用更流行和有文档的 Direct3D 时,我认为 Direct2D 不值得麻烦。感谢您的回复!
    • 位图在 WIC+Direct2D 中使用确实不是那么糟糕,但它是那些在你达到“啊哈!”之前非常笨拙的领域之一。时刻,一切都点击了。多年来我一直在使用各种 Windows 图形/UI API,所以我已经习惯了这种东西。我认为最大的障碍是意识到 Direct2D 所谓的“位图”(ID2D1Bitmap)应该真正被认为是“设备位图”——它存在于显卡上,如果你需要操纵像素,那么你必须这样做在 CPU 端首先使用“常规位图”(IWICBitmap)(或各种其他技巧)。
    【解决方案4】:

    我使用 Direct 2D 来渲染函数图,它非常易于使用 - 我会说,就像 GDI+ 一样简单。我猜,DirectX 11 和 DirectX 9 的复杂程度(在 2D 图形方面)非常相似,所以不用担心。

    DirectX 9.0 可以在(比如说)所有现代计算机上运行,​​并且 11 将您限制在 Windows Vista(带有平台包)和 Windows 7 上。不过,考虑到 Windows XP 最终会消失而 DirectX 会发展,所以我'不确定,是否值得将您的时间投入到不再开发的技术上。那么我建议使用 DirectX 11 的 Direct2D。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 2011-08-03
      • 2014-08-20
      相关资源
      最近更新 更多