Есть ли COM-экспозиция для Direct3D 10? - PullRequest
1 голос
/ 07 мая 2009

Господа и уважаемые дамы.

Я разместил этот вопрос на форуме COM на Code Project и получил сопливый ответ, так что, надеюсь, вы будете более полезны.

Я вижу, что у Microsoft есть библиотека COM для Direct3D 9, представленная с GUID 81BDCBCA-64D4-426d-AE8D-AD0147F4275C.

Microsoft выставила Direct3D 10 на COM и, если да, что такое GUID интерфейса?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 07 мая 2009

Из документации по MSDN похоже, что они перешли от использования объекта IDirect3D9 с такими функциями-членами, как IDirect3D9 :: CreateDevice , к использованию глобальных функций, таких как D3D10CreateDevice . С Direct3D 10 они разделили многие функции IDirect3D9, относящиеся, например, к адаптерам, к графической инфраструктуре DirectX (DXGI) .

Другими словами, Direct3D 10 по-прежнему использует COM, но нет, аналога IDirect3D9 нет. Вещи, для которых вы использовали IDirect3D9, теперь выполняются другими способами.

Редактировать: COM-класс с указанным выше GUID - IDirect3D9. Direct3D 10 не имеет обновленной версии этого (нет IDirect3D10, который делает вещи, которые делает IDirect3D9); вместо этого функции-члены этого класса были разделены на глобальные функции (такие как D3D10CreateDevice ), которые вы вызываете напрямую, а не через объект, и на классы DXGI (такие как IDXGIOutput ) , Вам не нужен объект IDirect3D10, потому что задачи, для которых вы бы его использовали, теперь выполняются по-разному.

Вы должны иметь возможность сопоставлять идентификаторы GUID с именами классов COM, выполнив поиск в заголовочных файлах Direct3D для макроса DEFINE_GUID.

0 голосов
/ 17 июля 2009

В COM информация библиотеки, которую вы запрашиваете, кодируется в библиотеке типов (файл TLB). Direct3D не использовал библиотеку типов или CoCreateInstance ни для одного из своих объектов со времен DirectX 8.0, почти десять лет назад. Direct3D использует COM-интерфейсы для управления временем жизни своих объектов, и это все. Они почти не используют QueryInterface. Большая часть инфраструктуры COM не применяется к интерфейсам, используемым Direct3D и связанными с ними объектами.

Они не используют CoCreateInstance для создания своих объектов, а вместо этого предоставляют единственную фабричную функцию (например, Direct3DCreate9), из которой вы получаете базовый интерфейс, а затем используете методы создателя из этого базового интерфейса, чтобы получить все остальное. В Direct3D 10 они признали, что базовый интерфейс, который перечисляет дисплеи и т. Д., Был стабильным и одинаковым для D3D 8 и D3D 9, поэтому они перенесли его в стабильный базовый интерфейс IDXGIFactory. Один и тот же код DXGI используется для D3D 10, 10.1 и 11.

...