Método IDCompositionDevice::CreateVirtualSurface (dcomp.h)
Crea una superficie rellenada dispersamente que se puede asociar a uno o varios objetos visuales para la composición.
Sintaxis
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
Ancho de la superficie, en píxeles. El ancho máximo es de 16 777 216 píxeles.
[in] initialHeight
Tipo: UINT
Alto de la superficie, en píxeles. El alto máximo es de 16 777 216 píxeles.
[in] pixelFormat
Tipo: DXGI_FORMAT
Formato de píxel de la superficie.
[in] alphaMode
Tipo: DXGI_ALPHA_MODE
Significado del canal alfa, si el formato de píxel contiene un canal alfa. Puede ser uno de los siguientes valores:
[out] virtualSurface
Tipo: IDCompositionVirtualSurface**
Objeto de superficie recién creado. Este parámetro no debe ser null.
Valor devuelto
Tipo: HRESULT
Si la función se ejecuta 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
Una superficie dispersa de Microsoft DirectComposition es un objeto lógico que se comporta como una matriz rectangular de píxeles que se puede asociar a un objeto visual para la composición. La superficie no está necesariamente respaldada por ningún vídeo físico o memoria del sistema para cada uno de sus píxeles. La aplicación puede realizar o virtualizar partes de la superficie lógica en momentos diferentes.
Un objeto de superficie recién creado está en un estado no inicializado. Aunque no se inicializa, la superficie no tiene ningún efecto en la composición del árbol visual. Se comporta exactamente como una superficie que se inicializa con píxeles transparentes del 100 %.
Para inicializar la superficie con datos de píxeles, use el método IDCompositionSurface::BeginDraw . Este método no solo proporciona píxeles para la superficie, sino que también asigna espacio de almacenamiento real para esos píxeles. La asignación de memoria persiste hasta que la aplicación devuelve parte de la memoria al sistema. La aplicación puede liberar parte o toda la memoria asignada llamando al método IDComposition::VirtualSurfaceTrim .
Las superficies directComposition admiten los siguientes formatos de píxel:
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R16G16B16A16_FLOAT
Ejemplos
En el ejemplo siguiente se muestra cómo crear una superficie virtual y asociarla a un objeto 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 | Value |
---|---|
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 |