gpt4 book ai didi

directx - SharpDX 编号的类(class),我在哪里可以找到他们各自的文档/职责?

转载 作者:行者123 更新时间:2023-12-01 03:09:55 27 4
gpt4 key购买 nike

每次查看 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与我们查询接口(interface) swapchain2 的 swapchain1 一起使用:
        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>();
}

如果完整的解释太大,这里的答案范围太大,任何链接都可以让我开始弄清楚 C++ DX 映射到哪个编号对象以及为什么是最受欢迎的。

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

最佳答案

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.Device1Direct3D 11.2 device ==> ID3D11Device2 ==> SharpDX.Direct3D11.Device2Direct3D 11.3 device ==> ID3D11Device3 ==> SharpDX.Direct3D11.Device3
等等。

自然,每个版本都有一个稍微不同(“改进”)的界面。较低的版本号几乎可以在任何地方使用,而较高的版本号包括可能需要您的视频卡和/或操作系统的特定功能的附加功能。您可以在 here 的部分中了解每个版本的 API。 .

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

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

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

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

另一个提示:如果您阅读了有关某些 Direct3D 或 Direct2D 功能的主题,并且您似乎无法在 SharpDx 的任何地方找到它,请查看 Direct3D API 以查看哪个版本号首先包含该功能。然后浏览该版本的 SharpDx API(或更好的头文件),直到您看到一个类似命名的元素。它可能以一种意想不到的方式包装,但 AFAIK 它全部暴露在外,即使你很难找到它。

关于directx - SharpDX 编号的类(class),我在哪里可以找到他们各自的文档/职责?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52999484/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com