【问题标题】:DirectX from C# [closed]来自 C# 的 DirectX [关闭]
【发布时间】:2014-12-20 00:57:18
【问题描述】:

我正在研究在 C# 中使用 DirectX 的各种选项;理想情况下,我想使用 Microsoft 首选的任何技术。

非微软技术:

微软技术:

我想使用的技术背后的理由:

  • 我想要一个代码优先的框架(而不是在 WPF 中编写 XAML)
  • 我想要(理想情况下)一个 Microsoft 支持且未被弃用的框架
  • 我想构建不会过度依赖 3rd 方依赖项的应用程序(即,如果我要使用 WPF 构建应用程序,该框架可能已经作为 .NET 框架的一部分安装在用户计算机上)

问题:

  • Microsoft 首选的编写支持 DirectX 的应用程序的方法是什么(WPF 除外)?
  • 使用已弃用的技术(MDX、XNA)有哪些危险?
  • 可以从 C# 中使用的最流行的非 Microsoft DirectX 技术是什么?

【问题讨论】:

  • 根据 github 的说法,SlimDX 已经好几年没有被触及了。 SharpDX 似乎积极维护。 SharpDX 还有一个 D2D 包装器。
  • @thumbmunkeys,不幸的是,微软的技术都不是 :-(
  • 关于第二个问题,我可以告诉你,XNA 将不再受支持,所以不要使用它。
  • 这很奇怪,有传言说 XNA4.5 即将推出。 msxna.codeplex.com/releases/view/112067
  • 那个 Codeplex 项目是一些人的宠物项目,并不是微软的官方项目。

标签: c# .net wpf xna directx


【解决方案1】:

DirectX 技术是现代 Windows 演示和游戏图形的核心,因此有许多不同的途径。您的问题并没有真正说明您正在构建什么样的应用程序或您要针对什么平台。

Managed DirectX 1.1 在这一点上有一长串问题:它不支持 .NET 4.x,这意味着 VS 2010 或更高版本的 C# 项目默认无法使用它。它使用旧版 D3DX9 和旧版 DirectSetup 部署。它不支持 64 位本机应用程序。它仅支持 Direct3D 9,不支持 Direct3D 10.x 或 11.x。它暴露了一堆遗留的东西,比如 DirectPlay 和 DirectSound。它自 2006 年以来一直没有更新,为它寻找样本是一个挑战。它不支持 Windows 应用商店应用、Windows 手机、Xbox 360 或 Xbox One。

SlimDX 对于拥有现有托管 DirectX 1.1 应用程序并希望迁移到支持更好的东西的人来说是一个不错的选择。它与 x64 本机应用程序和 .NET 4.0 兼容。该项目的进展确实停滞不前,但它是开源的,因此您始终可以自己使用它。

XNA Game Studio 4 支持 .NET 4.0,可以针对 Xbox 360、Windows phone 7、Windows phone 8(在 appcompat 中)和 Windows 32 位应用程序。它不支持 x64 本机应用程序,内容管道仅与 VS 2010 兼容。它使用旧版 D3DX9,因此它依赖于已弃用的 DirectSetup 部署。它公开 Direct3D 9 而不是 Direcxt3D 10.x 或 11.x。它不支持 Windows 应用商店应用程序或 Xbox One。它专门用于编写游戏。

Windows Presentation Foundation 具有 Direct3D9/Direct3D9Ex 互操作性,但不具有 Direct3D 10.x 或 Direct3D 11.x。对于 Win32 桌面应用程序来说,这是一项有用的技术,但不支持 Windows 应用商店应用程序、Windows phone 或 Xbox One。见MSDN。它不是特别适合制作游戏,但许多游戏开发人员已将其用于他们的工具管道。缺乏对 DirectX 10.x/11.x 的支持具有挑战性,但您可以通过 Direct3D9Ex 使其与 DXGI Shared Surfaces 一起使用。

请注意,这里有一个 GitHub 项目 WPF DX11 interop 可以提供帮助。

SharpDX 是现代 DirectX API 的 C# 映射的流行选择。它还支持 Windows 应用商店和 Windows Phone 应用,并且是一个活跃的项目

顺便说一句,如果您只是在寻找从 C# 使用 Direct2D 的直接方法,您可能需要查看Win2D

DirectX and .NET

【讨论】:

  • SharpDX 不再活跃,就我而言(专业引擎之外),将 C# + DirectX 送入坟墓。我最近听到的微软唯一推荐的方法是将 DirectX 包装为一个窗口运行时组件。但是为什么我们没有看到任何重大的努力来做到这一点?也许只是因为 SharpDX 完成了这项工作?还是因为这不是一个现实的解决方案?我不知道。 SharpDX 稳定且非常好用,如果您考虑使用不受支持的库,它绝对是目前从 C# 使用 DX11 的最佳解决方案。
猜你喜欢
  • 2017-06-13
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多