Compartir a través de


Función DCompositionCreateDevice (dcomp.h)

Crea un nuevo objeto de dispositivo que se puede usar para crear otros objetos Microsoft DirectComposition.

Sintaxis

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

Parámetros

[in] dxgiDevice

Tipo: IDXGIDevice*

Dispositivo DXGI que se va a usar para crear objetos de superficie DirectComposition.

[in] iid

Tipo: REFIID

Identificador de la interfaz que se va a recuperar.

[out] dcompositionDevice

Tipo: void**

Recibe un puntero de interfaz al objeto de dispositivo recién creado. El puntero es del tipo especificado por el parámetro iid . Este parámetro no debe ser null.

Valor devuelto

Tipo: HRESULT

Si la función se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error de HRESULT. Consulte Códigos de error de DirectComposition para obtener una lista de códigos de error.

Comentarios

Un objeto de dispositivo actúa como fábrica para todos los demás objetos DirectComposition. También controla la composición transaccional a través del método IDCompositionDevice::Commit .

El dispositivo DXGI especificado por dxgiDevice se usa para crear todos los objetos de superficie DirectComposition. En concreto, el método IDCompositionSurface::BeginDraw devuelve un puntero de interfaz a una superficie DXGI que pertenece al dispositivo especificado por el parámetro dxgiDevice .

Al crear el dispositivo DXGI, los desarrolladores deben especificar la marca D3D11_CREATE_DEVICE BGRA_SUPPORT o D3D10_CREATE_DEVICE_BGRA_SUPPORT para la interoperabilidad de Direct2D con los recursos de Microsoft Direct3D.

El parámetro iid debe ser __uuidof(IDCompositionDevice)y el parámetro dcompositionDevice recibe un puntero a una interfaz IDCompositionDevice .

Ejemplos

En el ejemplo siguiente se muestra cómo crear un objeto de dispositivo como parte de la inicialización de objetos 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;
}

Requisitos

   
Cliente mínimo compatible Windows 8 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2012 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado dcomp.h
Library Dcomp.lib
Archivo DLL Dcomp.dll

Vea también

Funciones