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