DCompositionCreateDevice2 函数 (dcomp.h)

创建可用于创建其他 Microsoft DirectComposition 对象的新设备对象。

语法

HRESULT DCompositionCreateDevice2(
  [in, optional] IUnknown *renderingDevice,
  [in]           REFIID   iid,
  [out]          void     **dcompositionDevice
);

参数

[in, optional] renderingDevice

指向 DirectX 设备的可选指针,用于创建 DirectComposition 图面对象。 必须是指向实现 IDXGIDeviceID2D1Device 接口的 对象的指针。

[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