DCompositionCreateDevice2 函数 (dcomp.h)
创建可用于创建其他 Microsoft DirectComposition 对象的新设备对象。
语法
HRESULT DCompositionCreateDevice2(
[in, optional] IUnknown *renderingDevice,
[in] REFIID iid,
[out] void **dcompositionDevice
);
参数
[in, optional] renderingDevice
指向 DirectX 设备的可选指针,用于创建 DirectComposition 图面对象。 必须是指向实现 IDXGIDevice 或 ID2D1Device 接口的 对象的指针。
[in] iid
要检索的接口的标识符。 这必须是__UUIDOF (IDCompositionDevice) 或__uuidof (IDCompositionDesktopDevice) 之一。
[out] dcompositionDevice
接收指向新创建的设备对象的接口指针。 指针的类型由 iid 参数指定。 此参数不能为 NULL。
返回值
如果函数成功,则返回S_OK。 否则,将返回 HRESULT 错误代码。 有关错误代码列表,请参阅 DirectComposition 错误代码。
注解
设备对象充当所有其他 DirectComposition 对象的工厂。 它还通过 IDCompositionDevice2::Commit 方法控制事务组合。
renderingDevice 参数可能指向 DXGI、Direct3D、Direct2D 设备对象,也可以指向 NULL。 此参数影响 IDCompositionDevice2::CreateSurface、IDCompositionDevice2::CreateVirtualSurface 和 IDCompositionSurface::BeginDraw 方法的行为。
如果 renderingDevice 参数为 NULL,则返回的 DirectComposition 设备无法直接创建 DirectComposition 图面对象。 特别是,无论提供的参数如何,IDCompositionDevice2::CreateSurface 和 IDCompositionDevice2::CreateVirtualSurface 方法都会返回E_INVALIDARG。 但是,如果应用程序通过 IDCompositionDevice2::CreateSurfaceFactory 方法创建 Surface 工厂对象,则此类 DirectComposition 设备对象仍可用于间接创建表面。
如果 renderingDevice 参数指向 DXGI 设备,则该设备用于分配 IDCompositionDevice2::CreateSurface 和 IDCompositionDevice2::CreateVirtualSurface 方法所需的所有视频内存。 此外,IDCompositionSurface::BeginDraw 方法返回指向属于同一 DXGI 设备的 DXGI 图面的接口指针。
如果 renderingDevice 参数指向 Direct2D 设备对象,则 DirectComposition 会从中提取基础 DXGI 设备对象并使用它,就像该 DXGI 设备对象已作为 renderingDevice 参数传入一样。 但是,传入 Direct2D 对象会进一步导致 IDCompositionSurface::BeginDraw 接受__uuidof (ID2D1DeviceContext) 其 iid 参数,用于使用 IDCompositionDevice2::CreateSurface 或 IDCompositionDevice2::CreateVirtualSurface 方法创建的任何对象。 在这种情况下,IDCompositionSurface::BeginDraw 返回的 Direct2D 设备上下文对象将属于作为 renderingDevice 参数传递的同一 Direct2D 设备。
如果 iid 参数__uuidof (IDCompositionDevice) ,则 dcompositionDevice 参数接收指向版本 1 IDCompositionDevice 接口的指针,但基础对象是版本 2 桌面设备对象。 应用程序稍后可以通过在该设备上调用 QueryInterface 方法来获取指向 IDCompositionDevice2 或 IDCompositionDesktopDevice 接口的指针。 同样,从此类设备创建的所有 DirectComposition 对象都是版本 2 对象。 例如,IDCompositionDevice::CreateVisual 方法将向创建的视觉对象返回 IDCompositionVisual 接口,但应用程序可以通过 QueryInterface 方法获取指向 IDCompositionVisual2 接口的指针。 此行为允许写入 DirectComposition V1 API 的应用程序通过将设备创建方法从 DCompositionCreateDevice 更改为 DCompositionCreateDevice2,以增量方式采用 DirectComposition V2 功能,同时仍请求 IDCompositionDevice2 接口。 这允许代码的其余部分保持不变,同时允许应用程序仅在需要新功能的位置使用 QueryInterface。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8.1 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2012 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | dcomp.h |
Library | Dcomp.lib |
DLL | Dcomp.dll |
另请参阅
IDCompositionDesktopDevice
IDCompositionDevice2
IDCompositionDevice2::CreateSurface
IDCompositionDevice2::CreateSurfaceFactory
IDCompositionDevice2::CreateVirtualSurface
IDCompositionSurface::BeginDraw