Método IDCompositionDevice::CreateVirtualSurface (dcomp.h)
Cria uma superfície pouco populada que pode ser associada a um ou mais visuais para composição.
Sintaxe
HRESULT CreateVirtualSurface(
[in] UINT initialWidth,
[in] UINT initialHeight,
[in] DXGI_FORMAT pixelFormat,
[in] DXGI_ALPHA_MODE alphaMode,
[out] IDCompositionVirtualSurface **virtualSurface
);
Parâmetros
[in] initialWidth
Tipo: UINT
A largura da superfície, em pixels. A largura máxima é de 16.777.216 pixels.
[in] initialHeight
Tipo: UINT
A altura da superfície, em pixels. A altura máxima é de 16.777.216 pixels.
[in] pixelFormat
Tipo: DXGI_FORMAT
O formato de pixel da superfície.
[in] alphaMode
Tipo: DXGI_ALPHA_MODE
O significado do canal alfa, se o formato de pixel contiver um canal alfa. Pode ser um dos seguintes valores:
[out] virtualSurface
Tipo: IDCompositionVirtualSurface**
O objeto surface recém-criado. Esse parâmetro não deve ser NULL.
Retornar valor
Tipo: HRESULT
Se a função for bem-sucedida, ela retornará S_OK. Caso contrário, ele retornará um código de erro HRESULT. Consulte Códigos de Erro do DirectComposition para obter uma lista de códigos de erro.
Comentários
Uma superfície esparsa do Microsoft DirectComposition é um objeto lógico que se comporta como uma matriz retangular de pixels que pode ser associada a um visual para composição. A superfície não é necessariamente apoiada por qualquer vídeo físico ou memória do sistema para cada um de seus pixels. O aplicativo pode perceber ou virtualizar partes da superfície lógica em momentos diferentes.
Um objeto surface recém-criado está em um estado não inicializado. Embora não seja inicializada, a superfície não tem efeito na composição da árvore visual. Ele se comporta exatamente como uma superfície inicializada com pixels 100% transparentes.
Para inicializar a superfície com dados de pixel, use o método IDCompositionSurface::BeginDraw . Esse método não só fornece pixels para a superfície, mas também aloca espaço de armazenamento real para esses pixels. A alocação de memória persiste até que o aplicativo retorne parte da memória para o sistema. O aplicativo pode liberar parte ou toda a memória alocada chamando o método IDComposition::VirtualSurfaceTrim .
As superfícies DirectComposition dão suporte aos seguintes formatos de pixel:
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R16G16B16A16_FLOAT
Exemplos
O exemplo a seguir mostra como criar uma superfície virtual e associá-la a um visual.
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;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2012 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | dcomp.h |
Biblioteca | Dcomp.lib |
DLL | Dcomp.dll |