先生们和尊敬的女士们。
我在Code Project的COM论坛上发布了这个问题并得到了一个小小的回复,希望你会更有帮助。
我看到微软有一个用于GUID 81BDCBCA-64D4-426d-AE8D-AD0147F4275C暴露的Direct3D 9的COM库。
Microsoft是否在COM上公开了Direct3D 10,如果是,那么接口GUID是什么?
提前致谢。
答案 0 :(得分:4)
从MSDN上的文档中,看起来他们已经从拥有IDirect3D9::CreateDevice等成员函数的IDirect3D9对象转变为使用D3D10CreateDevice等全局函数。使用Direct3D 10,他们将IDirect3D9中与(例如)适配器相关的许多功能分成DirectX Graphics Infrastructure (DXGI)。
换句话说,Direct3D 10仍然使用COM,但不,没有IDirect3D9的对应物。你使用IDirect3D9的东西现在可以通过其他方式完成。
编辑:上面带有GUID的COM类是IDirect3D9。 Direct3D 10没有更新版本(没有IDirect3D10可以完成IDirect3D9所做的事情);相反,该类的成员函数被分成直接调用而不是通过对象调用的全局函数(例如D3D10CreateDevice),并分成DXGI类(例如IDXGIOutput)。您不需要IDirect3D10对象,因为您将使用它的任务现在以不同的方式完成。
您应该能够通过搜索DEFINE_GUID宏的Direct3D头文件将GUID映射到COM类名。
答案 1 :(得分:0)
在COM中,您要求的库信息在类型库(TLB文件)中进行编码。直到十年前的DirectX 8.0,Direct3D还没有为其任何对象使用类型库或CoCreateInstance。 Direct3D使用COM接口来管理对象的生命周期,这就是它。它们根本不使用QueryInterface。大多数COM基础结构不适用于Direct3D及其关联对象使用的接口。
他们不使用CoCreateInstance创建对象,而是提供单个工厂函数(如Direct3DCreate9),从中获取基本接口,然后使用该基本接口中的creator方法获取其他所有内容。在Direct3D 10中,他们认识到枚举显示和等等的基本接口是稳定的,对于D3D 8和D3D 9是相同的,因此他们将其移动到稳定的基本接口IDXGIFactory中。 D3D 10,10.1和11使用相同的DXGI代码。