Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Directx SharpDX编号的课程,我在哪里可以找到他们各自的文档/职责?_Directx_Sharpdx - Fatal编程技术网

Directx SharpDX编号的课程,我在哪里可以找到他们各自的文档/职责?

Directx SharpDX编号的课程,我在哪里可以找到他们各自的文档/职责?,directx,sharpdx,Directx,Sharpdx,每次我看SharpDX代码并试图遵循DirectX文档时,我都会感到很困难。是否有一个地方,每个编号的类映射到什么以及它们存在的原因都清楚地列出了 我说的是: DXGI.Device DXGI.Device1 DXGI.Device2 DXGI.Device3 DXGI.Device4 SharpDX.Direct3D11.Device

每次我看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
每次我从代码开始,我发现它似乎是被黑魔法选中的,我不知道从那里去哪里,例如,我正在使用这个(从我找到的代码),我不知道为什么它是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