Нумерованные классы SharpDX, где я могу найти соответствующую документацию / обязанности? - PullRequest
0 голосов
/ 26 октября 2018

Мне тяжело каждый раз, когда я смотрю на код 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 работает с 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>();
        }

Если полное объяснение слишком велико для объема ответа, здесь приведена любая ссылка, чтобы я мог начать с выяснения того, что C ++ DX сопоставляет с каким пронумерованным объектом и почему это приветствуется.

В случае, если это имеет значение, меня интересует только DX> = 11, и я использую SharpDX в проекте UWP.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

SharpDx - довольно тонкая оболочка для DirectX, и почти все в DirectX выражается в SharpDx как сквозной с некоторыми соглашениями об именах и вызовах для соответствия миру .net.

Реальной документации по SharpDx по существу не существует, поэтому вам придется делать то, что делают все остальные.Если вы начинаете с чего-то в SharpDx, то посмотрите непосредственно на списки API SharpDx и файлы заголовков, чтобы понять, какие основные функции DirectX выражаются.Получив название функции DirectX, вы можете прочитать документацию MSDN, чтобы понять, как работает эта функция.Если вы начинаете с чего-то в DirectX, то сначала посмотрите на MSDN, чтобы понять, как оно работает и как оно названо, а затем перейдите к API-интерфейсу SharpDx и заголовочным файлам, чтобы узнать, как эта функция упакована (названа и представлена) в 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

и т. Д.

Естественно, каждая версия имеет немного другой («улучшенный») интерфейс.Меньшие номера версий будут работать практически везде, а более высокие номера версий включают дополнительные функции, которые могут потребовать чего-то определенного от вашей видеокарты и / или вашей операционной системы.Вы можете прочитать об 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, посмотрите на API Direct3D, чтобы увидеть, какой номер версии впервые содержит эту функцию.Затем проходите через SharpDx API (или, что еще лучше, файлы заголовков) для этой версии, пока не увидите элемент с аналогичным именем.Он может быть обернут неожиданным образом, но AFAIK - все это открыто, даже когда вам трудно его найти.

0 голосов
/ 30 октября 2018

Здесь вы можете найти обо всех объектах SharpDx, специально для DXGI вы можете найти здесь , Там вы можете увидеть Device, сопоставленный с IDXGIDevice.Обратите внимание, что слова IDXGIDevice - это гиперссылка , которая ссылается на документацию по объекту C ++.И таким образом Device1, Device2 и т. Д.

Здесь вы можете видеть очень простую логику: SharpDx делит имя объекта C ++ на Namespace и class nameНапример, вместо IDXGIDevice вы получаете Пространство имен: DXG и Имя класса: Device.

В документации по каждому объекту C ++ вы можете найти Требования .И там подробно описано, в какой операционной системе вы можете использовать объект.Чем больше число, тем объект будет работать в более новой операционной системе.Например, IDXGIDevice1 работает под Windows 7, однако IDXGIDevice3 работает под Windows 8.1 или выше.

...