Всегда ли CreateDXGIFactory создает новейшую версию поддержки системы IDXGIFactory? - PullRequest
0 голосов
/ 08 ноября 2018

Я использую CreateDXGIFactory для создания IDXGIFactory (самая старая версия), а затем использую этот IDXGIFactory для запроса IDXGIFactory6, это успешно. (Моя системная версия Win10 1803).

1.Так, эта функция CreateDXGIFactory всегда создает новейшую версию IDXGIFactory, которую поддерживает система?

Похожая вещь, D3D11CreateDevice создает базовую версию ID3D11Device, и я могу успешно запросить ID3D11Device3?

2.Второй вопрос: fuction D3D11CreateDevice создает новейшую версию ID3D11Device, которую поддерживает система?

1 Ответ

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

D3D11CreateDevice проще, потому что это одна точка входа. Документация не оперирует терминами «старая версия» и «более новая версия». Вместо этого предполагается, что API создает объект с запрошенным интерфейсом, который соответствует системе, в которой вы находитесь, и запрашиваемым аргументам создания (уровню возможностей и т. Д.). После этого вы можете получить доступ к новым функциям, если они доступны, путем запроса новых интерфейсов, что также предлагается в документации:

Чтобы создать устройство Direct3D 11.1 (ID3D11Device1), которое доступно в Windows 8, Windows Server 2012, Windows 7 и Windows Server 2008 R2 с установленным обновлением платформы для Windows 7, вы сначала создаете ID3D11Device с этой функцией, а затем вызовите метод QueryInterface для объекта ID3D11Device, чтобы получить интерфейс ID3D11Device1.

Чтобы создать устройство Direct3D 11.2 (ID3D11Device2), которое доступно в Windows 8.1 и Windows Server 2012 R2, сначала создайте ID3D11Device с этой функцией, а затем вызовите метод QueryInterface для объекта ID3D11Device, чтобы получить интерфейс ID3D11Device2.

То есть вы начинаете создавать устройство таким же образом, а затем запрашиваете новые интерфейсы. Реализация может или не может ответить, переходя к «более новой реализации» в зависимости от того, запрашивали ли вы когда-нибудь эти новые интерфейсы. В любом случае это зависит от реализации, включая то, что такое поведение может быть технически изменено, если оно прозрачно для приложений, использующих API этим документированным способом.

В DXGI есть две точки входа API CreateDXGIFactory и CreateDXGIFactory1. Документация предполагает, что вы не смешиваете потребление API через интерфейсы 1.0 и 1.1.

Не смешивайте использование DXGI 1.0 (IDXGIFactory) и DXGI 1.1 (IDXGIFactory1) в приложении. Используйте IDXGIFactory или IDXGIFactory1, но не оба в приложении.

Это не обязательно означает, что две функции создают разные фабрики. Microsoft оставляет за собой право корректировать поведение, если вы соблюдаете документированные рекомендации.

Если вы не собираетесь делать ничего, что выходит за рамки DGXI 1.0, вы можете использовать CreateDXGIFactory на старых и новых системах. Если вам нужны функции версии 1.1 и выше, вы должны начать с CreateDXGIFactory1. Также обратите внимание, что эти две функции имеют различную доступность в разных средах, и это одна из причин того, что они существуют в первую очередь.

...