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
ピクセル形式にアルファ チャネルが含まれている場合のアルファ チャネルの意味。 次のいずれかの値を指定できます。
[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
例
次の例は、仮想サーフェスを作成し、ビジュアルに関連付ける方法を示しています。
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 |