Directx SharpDX编号的课程,我在哪里可以找到他们各自的文档/职责?
每次我看SharpDX代码并试图遵循DirectX文档时,我都会感到很困难。是否有一个地方,每个编号的类映射到什么以及它们存在的原因都清楚地列出了 我说的是:Directx SharpDX编号的课程,我在哪里可以找到他们各自的文档/职责?,directx,sharpdx,Directx,Sharpdx,每次我看SharpDX代码并试图遵循DirectX文档时,我都会感到很困难。是否有一个地方,每个编号的类映射到什么以及它们存在的原因都清楚地列出了 我说的是: DXGI.Device DXGI.Device1 DXGI.Device2 DXGI.Device3 DXGI.Device4 SharpDX.Direct3D11.Device
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
每次我从代码开始,我发现它似乎是被黑魔法选中的,我不知道从那里去哪里,例如,我正在使用这个(从我找到的代码),我不知道为什么它是device3,factory 3和swapchain1,我们在上面查询接口swapchain2:
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>();
}
使用(DXGI.Device3 dxgiDevice3=this.device.QueryInterface())
使用(DXGI.Factory3 dxgiFactory3=dxgideviece3.Adapter.GetParent())
{
DXGI.SwapChain1 SwapChain1=新的DXGI.SwapChain1(dxgiFactory3,this.device,参考swapChainDescription);
this.swapChain=swapChain1.QueryInterface();
}
如果完全解释的范围太大,这里的任何链接都不能让我开始计算C++对象映射到哪个编号对象,为什么最受欢迎。 在这种情况下,我只对DX>=11感兴趣,并且我正在UWP项目中使用SharpDX。
您可以找到所有SharpDX对象,特别是您可以找到的DXGI
,在那里您可以看到映射到IDXGIDevice
的设备。
注意,代码<代码> IDXGIDENUST/<代码>是<强>超链接引用C++对象的文档。通过这种方式,Device1
和Device2
等
这里可以看到一个非常简单的逻辑,<代码> SharpDx < /C> >将C++对象的名称划分为<代码>命名空间< /> >和<代码>类名< /C>
例如,您得到的不是
IDXGIDevice
,而是命名空间:DXG
和类名:Device
<>在每个C++对象的文档中都可以找到。
并且详细说明了可以在哪个操作系统中使用该对象。
由于数字较高,对象将在较新的操作系统中工作。
例如,IDXGIDevice1
在Windows7
下工作,而IDXGIDevice3
在Windows8.1
或更高版本下工作。SharpDx是DirectX的一个非常薄的包装,DirectX中的几乎所有内容都在SharpDx中表示为一种传递,带有一些命名和调用约定,以适应.net世界
关于SharpDx的真实文档基本上是不存在的,所以您必须像其他人一样去做。如果您从SharpDx中的某些内容开始,请直接查看SharpDx API列表和头文件,以了解所表达的底层DirectX函数。获得DirectX函数的名称后,可以阅读MSDN文档以了解该函数的工作原理。如果您从DirectX中的某些内容开始,请先查看MSDN以了解其工作原理和命名方式,然后转到SharpDx API和头文件以了解该函数在SharpDx中是如何包装(命名和公开)的
对于您提出的特定问题,SharpDx设备编号标识正在包装的Direct3D版本
Direct3D 11.1设备
==>ID3D11Device1
=>SharpDX.Direct3D11.Device1
Direct3D 11.2设备
==>ID3D11Device2
=>SharpDX.Direct3D11.Device2
Direct3D 11.3设备
==>ID3D11Device3
=>SharpDX.Direct3D11.Device3
等等
当然,每个版本都有一个稍微不同的(“改进的”)界面。较低的版本号几乎可以在任何地方使用,而较高的版本号包括可能需要视频卡和/或操作系统提供特定功能的附加功能。您可以在找到的部分中了解每个版本的API
例如,添加到ID3D11Device5接口的新方法的描述(即自ID3D11Device4以来的新增内容)如下所示。在这种情况下,Device5添加了创建围栏对象和打开共享围栏句柄的功能
当示例代码使用特定的设备号时,通常是因为该代码需要一些以前版本的Direct3D中没有的功能。通常,您希望尽可能使用编号最低的设备(和工厂等),因为这将允许您的代码在最广泛的机器和视频卡上运行
如果您发现示例代码创建了SharpDX.Direct3D11.Device1
,但除了SharpDX.Direct3D11.Device
中的方法外,似乎没有使用任何其他方法,那么可能有两个原因之一。首先,作者可能知道后面的示例将需要Direct3D 11.1之前不存在的方法或字段。其次,作者可能知道,能够运行该示例的每个视频卡和操作系统都能够运行Direct3D 11.1
对于刚起步的人,我建议你坚持使用Direct3D(和Direct2D)11.1版,因此DXGI.Device1
,SharpDX.Direct3D11.Device1
和SharpDX.Direct3D11.DeviceContext1
。这些可能会在您遇到的任何机器上运行。仅当您确实需要某些在该版本中未出现的功能时,才增加版本号
还有一个提示:如果您阅读了有关Direct3D或Direct2D功能的线程,但在SharpDx中似乎找不到它,请查看Direct3D API以查看哪个版本号首先包含该功能。然后检查该版本的SharpDXAPI(或者更好的是头文件),直到您看到一个类似命名的元素。它可能会以一种意想不到的方式包装,但很快它就全部暴露出来了,即使你很难找到它。我想这会让它更像一个DirectX