2009-05-07 1 views
1

Джентльмены и уважаемые дамы.Есть ли воздействие COM для Direct3D 10

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

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

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

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

ответ

4

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

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

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

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

+0

Чувак, это фантастика. Извините, я понимаю, что мой вопрос не был на 100% в правильном направлении. Но теперь, когда я вижу GUID в файлах заголовков, я точно понимаю, что вы имеете в виду. Выстрел за помощью! – 2009-05-07 11:26:58

+0

Я рад, что смог мне помочь :-) –

0

В 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.

Смежные вопросы