IDCompositionDevice::CreateVirtualSurface メソッド (dcomp.h)

コンポジション用の 1 つ以上のビジュアルに関連付けることができる、スパースに設定されたサーフェスを作成します。

構文

HRESULT CreateVirtualSurface(
  [in]  UINT                        initialWidth,
  [in]  UINT                        initialHeight,
  [in]  DXGI_FORMAT                 pixelFormat,
  [in]  DXGI_ALPHA_MODE             alphaMode,
  [out] IDCompositionVirtualSurface **virtualSurface
);

パラメーター

[in] initialWidth

型: UINT

サーフェスの幅 (ピクセル単位)。 最大幅は 16,777,216 ピクセルです。

[in] initialHeight

型: UINT

サーフェスの高さ (ピクセル単位)。 最大高さは 16,777,216 ピクセルです。

[in] pixelFormat

種類: DXGI_FORMAT

サーフェスのピクセル形式。

[in] alphaMode

種類: DXGI_ALPHA_MODE

ピクセル形式にアルファ チャネルが含まれている場合のアルファ チャネルの意味。 次のいずれかの値を指定できます。

意味
DXGI_ALPHA_MODE_UNSPECIFIED
アルファ チャネルが指定されていません。 この値は、 DXGI_ALPHA_MODE_IGNOREと同じ効果があります。
DXGI_ALPHA_MODE_PREMULTIPLIED
カラー チャネルには、アルファ チャネルで事前に乗算された値が含まれています。
DXGI_ALPHA_MODE_IGNORE
アルファ チャネルは無視し、ビットマップを不透明にレンダリングする必要があります。

[out] virtualSurface

型: IDCompositionVirtualSurface**

新しく作成されたサーフェス オブジェクト。 このパラメーターを NULL にすることはできません。

戻り値

型: HRESULT

関数が成功した場合は、S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。 エラー コードの一覧については、「 DirectComposition エラー コード 」を参照してください。

注釈

Microsoft DirectComposition スパースサーフェスは、コンポジションのビジュアルに関連付けることができるピクセルの四角形の配列のように動作する論理オブジェクトです。 サーフェスは、ピクセルごとに物理ビデオまたはシステム メモリによってサポートされるとは限りません。 アプリケーションは、論理サーフェスの一部を異なる時間に実現または仮想化できます。

新しく作成されたサーフェス オブジェクトは、初期化されていない状態です。 初期化されていない間、サーフェスはビジュアル ツリーの構成には影響しません。 これは、100% の透明ピクセルで初期化されたサーフェスとまったく同じように動作します。

ピクセル データを使用してサーフェスを初期化するには、 IDCompositionSurface::BeginDraw メソッドを使用します。 このメソッドは、サーフェスのピクセルを提供するだけでなく、それらのピクセルに実際の記憶領域を割り当てます。 メモリ割り当ては、アプリケーションがシステムにメモリの一部を返すまで保持されます。 アプリケーションは、 IDComposition::VirtualSurfaceTrim メソッドを呼び出すことによって、割り当てられたメモリの一部またはすべてを解放できます。

DirectComposition サーフェスでは、次のピクセル形式がサポートされます。

  • DXGI_FORMAT_B8G8R8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT
initialWidth または initialHeight が 16,777,216 ピクセルを超えると、このメソッドは失敗します。

次の例は、仮想サーフェスを作成し、ビジュアルに関連付ける方法を示しています。

HRESULT RenderAVisual(IDCompositionDevice *pDCompDevice, HWND hwndTarget,
                         UINT surfaceWidth, UINT surfaceHeight) 
{
    // Validate the input parameters.
    if (pDCompDevice == nullptr || hwndTarget == NULL)
        return E_INVALIDARG;
    
    HRESULT hr = S_OK;
    IDCompositionTarget *pTargetWindow = nullptr;
    IDCompositionVisual *pVisual = nullptr;
    IDCompositionVirtualSurface *pVirtualSurface = nullptr;
    ID3D10Texture2D *pTex2D = nullptr;
    POINT offset = {0};

    // Create the rendering target. 
    hr = pDCompDevice->CreateTargetForHwnd(hwndTarget, TRUE, &pTargetWindow);

    if (SUCCEEDED(hr))
    {
        // Create a visual.
        hr = pDCompDevice->CreateVisual(&pVisual);
    }

    if (SUCCEEDED(hr))
    {
        // Add the visual to the root of the composition tree.
        hr = pTargetWindow->SetRoot(pVisual);
    }

    if (SUCCEEDED(hr))
    {
        // Create a virtual surface.
        hr = pDCompDevice->CreateVirtualSurface(surfaceWidth, surfaceHeight, 
            DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_ALPHA_MODE_IGNORE, 
            &pVirtualSurface);
    }

    if (SUCCEEDED(hr))
    {
        // Set the virtual surface as the content of the visual.
        hr = pVisual->SetContent(pVirtualSurface);
    }
    
    if (SUCCEEDED(hr))
    {
        // Retrieve and interface pointer for draw on the surface.
        hr = pVirtualSurface->BeginDraw(NULL, __uuidof(ID3D10Texture2D), 
            (void **) &pTex2D, &offset);
    }

    //
    // TODO: Draw on the surface.
    //
    
    if (SUCCEEDED(hr))
    {
        // Complete the updates to the surface.
        hr = pVirtualSurface->EndDraw();
    }

    // Commit the composition for rendering.
    hr = pDCompDevice->Commit();

    // Clean up.
    SafeRelease(&pTargetWindow);
    SafeRelease(&pVisual);
    SafeRelease(&pVirtualSurface);
    SafeRelease(&pTex2D);

    return hr;

}

要件

要件
サポートされている最小のクライアント Windows 8 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー dcomp.h
Library Dcomp.lib
[DLL] Dcomp.dll

こちらもご覧ください

IDCompositionDevice

IDCompositionDevice::CreateSurface