IDCompositionDevice ::CreateVirtualSurface, méthode (dcomp.h)
Crée une surface partiellement remplie qui peut être associée à un ou plusieurs visuels pour la composition.
Syntaxe
HRESULT CreateVirtualSurface(
[in] UINT initialWidth,
[in] UINT initialHeight,
[in] DXGI_FORMAT pixelFormat,
[in] DXGI_ALPHA_MODE alphaMode,
[out] IDCompositionVirtualSurface **virtualSurface
);
Paramètres
[in] initialWidth
Type : UINT
Largeur de la surface, en pixels. La largeur maximale est de 16 777 216 pixels.
[in] initialHeight
Type : UINT
Hauteur de la surface, en pixels. La hauteur maximale est de 16 777 216 pixels.
[in] pixelFormat
Type : DXGI_FORMAT
Format de pixels de la surface.
[in] alphaMode
Type : DXGI_ALPHA_MODE
Signification du canal alpha, si le format de pixels contient un canal alpha. Ce peut être l’une des valeurs suivantes :
[out] virtualSurface
Type : IDCompositionVirtualSurface**
Objet surface nouvellement créé. Ce paramètre ne doit pas avoir la valeur NULL.
Valeur retournée
Type : HRESULT
Si la fonction réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT. Pour obtenir la liste des codes d’erreur, consultez Codes d’erreur DirectComposition .
Remarques
Une surface éparse Microsoft DirectComposition est un objet logique qui se comporte comme un tableau rectangulaire de pixels qui peut être associé à un visuel pour la composition. La surface n’est pas nécessairement soutenue par une vidéo physique ou une mémoire système pour chacun de ses pixels. L’application peut réaliser ou virtualiser des parties de la surface logique à différents moments.
Un objet surface nouvellement créé est dans un état non initialisé. Bien qu’elle soit non initialisée, la surface n’a aucun effet sur la composition de l’arborescence visuelle. Il se comporte exactement comme une surface initialisée avec des pixels 100 % transparents.
Pour initialiser la surface avec des données de pixels, utilisez la méthode IDCompositionSurface ::BeginDraw . Cette méthode fournit non seulement des pixels pour la surface, mais elle alloue également de l’espace de stockage réel pour ces pixels. L’allocation de mémoire persiste jusqu’à ce que l’application retourne une partie de la mémoire au système. L’application peut libérer une partie ou la totalité de la mémoire allouée en appelant la méthode IDComposition ::VirtualSurfaceTrim .
Les surfaces DirectComposition prennent en charge les formats de pixels suivants :
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R16G16B16A16_FLOAT
Exemples
L’exemple suivant montre comment créer une surface virtuelle et l’associer à un visuel.
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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 8 [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows Server 2012 [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | dcomp.h |
Bibliothèque | Dcomp.lib |
DLL | Dcomp.dll |