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++ 对象文档的 超链接 。并以此方式 Device1
和 Device2
等
可以看到这里有一个很简单的逻辑,SharpDx
把C++对象的名字分成Namespace
和一个class name
,
例如,您得到的不是 IDXGIDevice
,而是命名空间:DXG
和 class 名称:Device
.
在每个 C++ 对象的文档中,您可以找到 Requirements。
并且详细说明了您可以在哪个操作系统中使用该对象。
数字越大,对象将在更新的操作系统中运行。
例如,IDXGIDevice1
在 Windows 7
下工作,但是 IDXGIDevice3
在 Windows 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.Device1
、SharpDX.Direct3D11.Device1
和 SharpDX.Direct3D11.DeviceContext1
。这些可能 运行 在您遇到的任何机器上。仅当您确实需要该版本中未出现的某些功能时才增加版本号。
一个附加提示:如果您阅读了有关某些 Direct3D 或 Direct2D 功能的线程,但您似乎无法在 SharpDx 中的任何地方找到它,请查看 Direct3D API 以查看第一个包含该功能的版本号功能。然后浏览该版本的 SharpDx API(或更好的头文件),直到您看到一个类似命名的元素。它可能以意想不到的方式包装,但据我所知,即使您很难找到它,它也会全部暴露出来。
每次查看 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++ 对象文档的 超链接 。并以此方式 Device1
和 Device2
等
可以看到这里有一个很简单的逻辑,SharpDx
把C++对象的名字分成Namespace
和一个class name
,
例如,您得到的不是 IDXGIDevice
,而是命名空间:DXG
和 class 名称:Device
.
在每个 C++ 对象的文档中,您可以找到 Requirements。
并且详细说明了您可以在哪个操作系统中使用该对象。
数字越大,对象将在更新的操作系统中运行。
例如,IDXGIDevice1
在 Windows 7
下工作,但是 IDXGIDevice3
在 Windows 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.Device1
、SharpDX.Direct3D11.Device1
和 SharpDX.Direct3D11.DeviceContext1
。这些可能 运行 在您遇到的任何机器上。仅当您确实需要该版本中未出现的某些功能时才增加版本号。
一个附加提示:如果您阅读了有关某些 Direct3D 或 Direct2D 功能的线程,但您似乎无法在 SharpDx 中的任何地方找到它,请查看 Direct3D API 以查看第一个包含该功能的版本号功能。然后浏览该版本的 SharpDx API(或更好的头文件),直到您看到一个类似命名的元素。它可能以意想不到的方式包装,但据我所知,即使您很难找到它,它也会全部暴露出来。