Partager via


Surface de composition

Note

Pour les applications sur Windows 10, nous vous recommandons d’utiliser les API Windows.UI.Composition au lieu de DirectComposition. Pour plus d’informations, consultez Moderniser votre application de bureau à l’aide dude couche visuelle.

Cette rubrique décrit les types de surfaces pris en charge par Microsoft DirectComposition.

Surface logique DirectComposition

DirectComposition expose l’objet IDCompositionSurface pour représenter une surface de composition logique. DirectComposition expose les API que vous pouvez utiliser pour créer, mettre à jour et supprimer ces surfaces logiques. Chaque surface peut être associée à un ou plusieurs visuels. Une application est responsable de la gestion de la durée de vie des surfaces logiques.

Mise à jour d’une surface logique

Une application peut mettre à jour une surface logique en appelant BeginDraw et en spécifiant la taille et le décalage du rectangle sur l’aire logique que l’application souhaite mettre à jour. DirectComposition alloue un rectangle de la taille spécifiée, puis retourne la surface et le décalage correspondant que l’application doit dessiner ou mettre à jour. Les limites du rectangle de mise à jour sont liées par la taille de la surface. Par exemple, le rectangle de mise à jour d’une surface de 40 à 100 pixels peut atteindre (0,0,40,100). En outre, la région pouvant être mise à jour est appliquée par un rectangle de garde. Étant donné qu’il ne peut y avoir qu’un seul rectangle de garde à la fois, une seule surface logique peut être mise à jour à la fois. BeginDraw retourne un code d’erreur si EndDraw ou SuspendDraw n’a pas été appelé après un appel précédent à BeginDraw. Une application peut ajouter un appel validé à BeginDraw à un lot, mais elle ne prend pas effet tant que EndDraw est appelée et validée.

Suspension des mises à jour vers une surface logique

Une application qui doit mettre à jour différentes surfaces peut appeler SuspendDraw sur la mise à jour actuelle, puis appeler BeginDraw pour commencer une nouvelle mise à jour. Microsoft DirectComposition autorise plusieurs mises à jour, mais une seule peut être active à la fois. Cela signifie que vous devez appeler SuspendDraw ou EndDraw sur une surface avant d’appeler BeginDraw sur la suivante. Contrairement à EndDraw, un lot validé peut contenir une surface qui se trouve dans un état SuspendDraw, mais ces mises à jour ne seront pas affichées à l’écran tant que endDraw n’est pas appelée.

Reprise des mises à jour dans une surface logique

Une application peut reprendre une mise à jour vers une surface qui se trouve dans un état SuspendDraw en appelant ResumeDraw. Cette méthode peut être appelée uniquement sur une surface suspendue.

Fin des mises à jour vers une surface logique

L’appel EndDraw et Commit est la seule façon de voir les modifications de mise à jour bitmap à l’écran. Chaque appel à EndDraw doit avoir un appel correspondant à BeginDraw pour supprimer le rectangle de garde. La surface logique conserve toutes les mises à jour jusqu’à ce que Commit soit appelée. Vous pouvez également appeler EndDraw sur une surface qui se trouve dans l’état SuspendDraw, car EndDraw est une reprise/fin implicite. Après avoir appelé EndDraw, le contenu mis à jour est présenté à l’écran et ignoré afin que la mémoire de la mise à jour puisse être réutilisée pour une mise à jour ultérieure.

Exemple d’utilisation d’une surface logique

L’exemple suivant décrit les étapes à suivre pour une application s’il a créé une arborescence visuelle composée de deux visuels, puis nécessaire pour mettre à jour des régions spécifiques des deux surfaces logiques associées aux visuels :

  1. Créez un appareil DirectComposition.
  2. Créez l’arborescence visuelle composée d’un nœud racine et de visuels 1 et 2.
  3. Créez des surfaces logiques 1 et 2.
  4. Appelez SetContent pour associer une surface logique aux visuels 1 et 2.
  5. Appelez BeginDraw sur un sous-rectangle de surface logique 1.
  6. Mettez à jour la surface à l’offset retourné par DirectComposition.
  7. Étapes facultatives :
    1. Appelez SuspendDraw sur la surface logique 1.
    2. Appelez BeginDraw sur la sous-rect de la surface logique 2.
    3. Mettez à jour la surface à l’offset retourné par DirectComposition.
    4. Appelez EndDraw sur la surface logique 2.
    5. Appelez ResumeDraw sur la surface logique 1.
  8. Mettez à jour la surface à l’offset retourné par DirectComposition.
  9. Appelez EndDraw sur la surface logique 1.
  10. Appelez validation.

Surface virtuelle DirectComposition

DirectComposition expose l’interface IDCompositionVirtualSurface pour représenter une surface virtuelle, qui est une collection de surfaces logiques (vignettes) organisées dans une grille fixe avec des vignettes d’une taille fixe. L’application spécifie la taille de la texture virtuelle au moment de la création. La taille établit les limites de la surface virtuelle. L’aire peut être associée à un ou plusieurs visuels.

Lorsqu’une surface virtuelle est initialisée, elle n’est pas soutenue par des allocations réelles. En d’autres termes, il ne contient pas de bits. DirectComposition alloue des vignettes (autrement dit, des objets de surface de composition) une fois que l’application a commencé à mettre à jour la surface. L’application met à jour la surface virtuelle en appelant BeginDraw et en spécifiant la région d’intérêt par rapport aux coordonnées de la surface virtuelle. Ensuite, DirectComposition alloue les vignettes nécessaires pour contenir la mise à jour, puis retourne l’aire de composition et le décalage à mettre à jour.

Comme avec les surfaces logiques, vous pouvez appeler BeginDraw, SuspendDraw, ResumeDraw et EndDraw sur une surface virtuelle. En outre, DirectComposition expose des méthodes que vous pouvez utiliser pour redimensionner et découper une surface virtuelle existante.

Redimensionnement d’une surface virtuelle

La méthode Resize modifie les limites de la surface virtuelle, ce qui signifie que les nouvelles mises à jour ou allocations doivent tomber dans les limites définies par la nouvelle taille. Une application utilise redimensionner pour indiquer à DirectComposition qu’une région particulière de la surface virtuelle n’est plus nécessaire et peut être récupérée. Si Redimensionner réduit la surface virtuelle, l’application ne peut plus mettre à jour les régions en dehors des nouvelles limites.

L’illustration suivante montre une surface virtuelle de 3 par 3 redimensionnée à 2 par 2. La région rouge représente les vignettes qui sont ignorées dans le cadre de l’opération de redimensionnement et la mémoire est récupérée par DirectComposition. Après le redimensionnement, l’application ne peut pas effectuer de mises à jour vers la région rouge sans redimensionner à nouveau la surface virtuelle.

redimensionnement d’une surface virtuelle

L’opération de redimensionnement prend effet immédiatement. DirectComposition n’attend pas que l’application appelle Commit pour effectuer les mises à jour de redimensionnement. Par exemple, supposons qu’une application effectue la séquence d’appels suivante.

pVirtualSurface->Resize(0, 0);
pVirtualSurface->Resize(INT_MAX, INT_MAX);
pDevice->Commit();

Dans cet exemple, l’application perd tout le contenu du premier redimensionnement. Le deuxième redimensionnement n’a aucun effet, même s’il a été appelé avant Commit. Dans ce cas, rien ne s’affiche à l’écran.

Découpage d’une surface virtuelle

La méthode Trim identifie la région de la surface virtuelle dont l’application a besoin. Il ne redimensionne pas les limites de la surface virtuelle, mais indique à DirectComposition quelles surfaces logiques doivent actuellement être allouées.

Dans l’illustration suivante, le carré vert est la fenêtre d’affichage de l’application. L’application s’affiche initialement sur les six premières vignettes (bleu) de la surface virtuelle (gris clair) qui se trouvent dans la fenêtre d’affichage. Comme la page représentée par les défilements de la surface virtuelle, l’application doit afficher les six dernières vignettes. L’application appelle Trim pour indiquer que la région définie par les six dernières vignettes est l’emplacement où se trouve le contenu et que le reste n’est pas nécessaire pour le moment. DirectComposition peut ensuite choisir de recycler les surfaces logiques qui ont initialement représenté les six premières vignettes (gris foncé).

découper une surface virtuelle

concepts DirectComposition