SharpDX 编号 类,我在哪里可以找到它们各自的 documentation/responsibilities?

SharpDX numbered classes, where do i find their respective documentation/responsibilities?

每次查看 SharpDX 代码并尝试遵循 DirectX 文档时,我都很难过。有没有一个地方清楚地列出了每个编号 类 映射到的内容以及它们存在的原因?

我说的是:

            DXGI.Device
            DXGI.Device1
            DXGI.Device2
            DXGI.Device3
            DXGI.Device4

            SharpDX.Direct3D11.Device
            SharpDX.Direct3D11.Device1
            SharpDX.Direct3D11.Device11On12
            SharpDX.Direct3D11.Device2
            SharpDX.Direct3D11.Device3
            SharpDX.Direct3D11.Device4
            SharpDX.Direct3D11.Device5

            SharpDX.Direct3D11.DeviceContext
            SharpDX.Direct3D11.DeviceContext1
            SharpDX.Direct3D11.DeviceContext2
            SharpDX.Direct3D11.DeviceContext3
            SharpDX.Direct3D11.DeviceContext4

每次我从代码开始,我发现它似乎被黑魔法选中,我不知道从那里去哪里,例如我正在使用这个(从我找到的代码)我不知道为什么它是设备 3,工厂 3 与我们在其上查询接口交换链 2 的交换链 1 一起使用:

        using (DXGI.Device3 dxgiDevice3 = this.device.QueryInterface<DXGI.Device3>())
        using (DXGI.Factory3 dxgiFactory3 = dxgiDevice3.Adapter.GetParent<DXGI.Factory3>())
        {

            DXGI.SwapChain1 swapChain1 = new DXGI.SwapChain1(dxgiFactory3, this.device, ref swapChainDescription);
            this.swapChain = swapChain1.QueryInterface<DXGI.SwapChain2>();
        }

如果完整的解释超出了这里任何答案的范围 link 让我开始弄清楚什么 C++ DX 映射到哪个编号对象以及为什么最受欢迎。

如果这很重要,我只对 DX >= 11 感兴趣,并且我在 UWP 项目中使用 SharpDX。

Here you can find about all SharpDx objects, specifically for DXGI you can found here,在那里你可以看到 Device 映射到 IDXGIDevice。 请注意 IDXGIDevice 是引用 C++ 对象文档的 超链接 。并以此方式 Device1Device2

可以看到这里有一个很简单的逻辑,SharpDx把C++对象的名字分成Namespace和一个class name, 例如,您得到的不是 IDXGIDevice,而是命名空间:DXG 和 class 名称:Device.

在每个 C++ 对象的文档中,您可以找到 Requirements。 并且详细说明了您可以在哪个操作系统中使用该对象。 数字越大,对象将在更新的操作系统中运行。 例如,IDXGIDevice1Windows 7 下工作,但是 IDXGIDevice3Windows 8.1 或更高下工作。

SharpDx 是 DirectX 的一个非常薄的包装器,DirectX 中的几乎所有内容都在 SharpDx 中表示为传递,具有一些命名和调用约定以适应 .net 世界。

关于 SharpDx 的真实文档基本上是不存在的,因此您将不得不做其他人所做的事情。如果您从 SharpDx 中的某些东西开始,那么直接查看 SharpDx API 列表和头文件以了解正在表达的底层 DirectX 函数。知道 DirectX 函数的名称后,您可以阅读 MSDN 文档以了解该函数的工作原理。如果您从 DirectX 中的某些东西开始,那么首先查看 MSDN 以了解它是如何工作的以及它是如何命名的,然后转到 SharpDx API 和头文件以找出该函数是如何包装的(命名和公开) 在 SharpDx.

对于您提出的具体问题,SharpDx 设备编号标识了被包装的 Direct3D 版本

Direct3D 11.1 device ==> ID3D11Device1 ==> SharpDX.Direct3D11.Device1

Direct3D 11.2 device ==> ID3D11Device2 ==> SharpDX.Direct3D11.Device2

Direct3D 11.3 device ==> ID3D11Device3 ==> SharpDX.Direct3D11.Device3

等等。

当然,每个版本都有略微不同的 ("improved") 界面。较低的版本号几乎可以在任何地方使用,而较高的版本号包括额外的功能,可能需要您的显卡 and/or 您的操作系统提供特定的功能。您可以在找到的部分 here.

中阅读每个版本的 API

例如,添加到 ID3D11Device5 接口的新方法(即自 ID3D11Device4 以来的新方法)的描述是 here。在这种情况下,Device5 添加了创建栅栏对象和打开共享栅栏句柄的功能。

当示例代码使用特定的设备编号时,通常是因为该代码需要一些在以前版本的 Direct3D 中不存在的功能。一般来说,您希望尽可能使用编号最小的设备(和出厂设备等),因为这将允许您的代码在最广泛的机器和视频卡上运行 运行。

如果您发现示例代码创建了 SharpDX.Direct3D11.Device1,但似乎没有使用 SharpDX.Direct3D11.Device 中的方法以外的任何方法,这可能是出于以下两个原因之一。首先,作者可能知道后面的示例将需要 Direct3D 11.1 之前不存在的方法或字段。其次,作者可能知道能够 运行ning 示例的每个视频卡和操作系统都能够 运行ning Direct3D 11.1。

对于刚起步的人,我建议您坚持使用 Direct3D(和 Direct2D)版本 11.1,因此 DXGI.Device1SharpDX.Direct3D11.Device1SharpDX.Direct3D11.DeviceContext1。这些可能 运行 在您遇到的任何机器上。仅当您确实需要该版本中未出现的某些功能时才增加版本号。

一个附加提示:如果您阅读了有关某些 Direct3D 或 Direct2D 功能的线程,但您似乎无法在 SharpDx 中的任何地方找到它,请查看 Direct3D API 以查看第一个包含该功能的版本号功能。然后浏览该版本的 SharpDx API(或更好的头文件),直到您看到一个类似命名的元素。它可能以意想不到的方式包装,但据我所知,即使您很难找到它,它也会全部暴露出来。