DCompositionCreateDevice 函数 (dcomp.h)

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

语法

HRESULT DCompositionCreateDevice(
  [in]  IDXGIDevice *dxgiDevice,
  [in]  REFIID      iid,
  [out] void        **dcompositionDevice
);

参数

[in] dxgiDevice

类型: IDXGIDevice*

用于创建 DirectComposition 表面对象的 DXGI 设备。

[in] iid

类型: REFIID

要检索的接口的标识符。

[out] dcompositionDevice

类型: void**

接收指向新创建的设备对象的接口指针。 指针的类型由 iid 参数指定。 此参数不能为 NULL。

返回值

类型: HRESULT

如果函数成功,则返回S_OK。 否则,将返回 HRESULT 错误代码。 有关错误代码列表,请参阅 DirectComposition 错误代码。

备注

设备对象充当所有其他 DirectComposition 对象的工厂。 它还通过 IDCompositionDevice::Commit 方法控制事务组合。

dxgiDevice 指定的 DXGI 设备用于创建所有 DirectComposition 图面对象。 具体而言, IDCompositionSurface::BeginDraw 方法返回指向 DXGI 图面的接口指针,该图面属于 dxgiDevice 参数指定的设备。

创建 DXGI 设备时,开发人员必须为 Direct2D 与 Microsoft Direct3D 资源的互操作性指定 D3D11_CREATE_DEVICE BGRA_SUPPORTD3D10_CREATE_DEVICE_BGRA_SUPPORT 标志。

iid 参数必须为 __uuidof(IDCompositionDevice),并且 dcompositionDevice 参数接收指向 IDCompositionDevice 接口的指针。

示例

以下示例演示如何在初始化 DirectComposition 对象时创建设备对象。

#include <dcomp.h>
#include <d3d11.h>

HRESULT InitializeDirectCompositionDevice(HWND hwndTarget, 
        ID3D11Device **ppD3D11Device, IDCompositionDevice **ppDevice,
        IDCompositionTarget **ppCompTarget)
{
    HRESULT hr = S_OK;
    D3D_FEATURE_LEVEL featureLevelSupported;
    IDXGIDevice *pDXGIDevice = nullptr;

    // Verify that the arguments are valid.
    if (hwndTarget == NULL || ppD3D11Device == nullptr || ppDevice == nullptr || 
                            ppCompTarget == nullptr)
    {
        return E_INVALIDARG;
    }

    // Create the D3D device object. Note that the 
    // D3D11_CREATE_DEVICE_BGRA_SUPPORT flag is needed for rendering 
    // on surfaces using Direct2D. 
    hr = D3D11CreateDevice(
        nullptr,
        D3D_DRIVER_TYPE_HARDWARE,
        NULL,
        D3D11_CREATE_DEVICE_BGRA_SUPPORT, // needed for rendering on surfaces using Direct2D
        NULL,
        0,
        D3D11_SDK_VERSION,
        ppD3D11Device,
        &featureLevelSupported,
        NULL);

    if (SUCCEEDED(hr))
    {
        // Create the DXGI device used to create bitmap surfaces.
        hr = (*ppD3D11Device)->QueryInterface(&pDXGIDevice);
    }

    if (SUCCEEDED(hr))
    {
        // Create the DirectComposition device object.
        hr = DCompositionCreateDevice(pDXGIDevice, __uuidof(IDCompositionDevice), 
                reinterpret_cast<void **>(ppDevice));
    }

    if (SUCCEEDED(hr))
    {
        // Bind the DirectComposition device to the target window.
        hr = (*ppDevice)->CreateTargetForHwnd(hwndTarget, TRUE, ppCompTarget);   
    }

    return hr;
}

要求

   
最低受支持的客户端 Windows 8 [仅限桌面应用]
最低受支持的服务器 Windows Server 2012 [仅限桌面应用]
目标平台 Windows
标头 dcomp.h
Library Dcomp.lib
DLL Dcomp.dll

请参阅

函数