Surface de la composition
Notes
pour les applications sur Windows 10, nous vous recommandons d’utiliser des api Windows. UI. Composition au lieu de DirectComposition. Pour plus d’informations, consultez moderniser votre application de bureau à l’aide de la 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 la surface logique que l’application veut 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 pixels de 40 par 100 peut atteindre (0, 0, 40100). En outre, la région pouvant être mise à jour est appliquée par un rectangle de protection. Étant donné qu’il ne peut y avoir qu’un seul rectangle de protection à 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 n’est pas appelé et validé.
Interruption des mises à jour d’une surface logique
Une application qui doit mettre à jour des surfaces différentes 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 est dans un état SuspendDraw , mais ces mises à jour ne s’affichent pas à l’écran tant que EndDraw n’est pas appelé.
Reprise des mises à jour sur une surface logique
Une application peut reprendre une mise à jour d’une surface qui est dans un état SuspendDraw en appelant ResumeDraw. Cette méthode peut être appelée uniquement sur une surface suspendue.
Fin des mises à jour d’une surface logique
L’appel de EndDraw et de Commit est le seul moyen d’afficher 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 la validation 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. Une fois que vous avez appelé EndDraw, le contenu mis à jour est présenté à l’écran et ignoré afin que la mémoire pour 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 qu’une application doit suivre si elle a créé une arborescence d’éléments visuels composée de deux éléments visuels, puis si nécessaire pour mettre à jour des régions spécifiques des deux surfaces logiques associées aux visuels :
- Créez un appareil DirectComposition.
- Créez l’arborescence d’éléments visuels composée d’un nœud racine et de visuels 1 et 2.
- Créez des surfaces logiques 1 et 2.
- Appelez SetContent pour associer une surface logique aux éléments visuels 1 et 2.
- Appelez BeginDraw sur un sous-rectangle de la surface logique 1.
- Mettez à jour la surface au décalage retourné par DirectComposition.
- Étapes facultatives :
- Appelez SuspendDraw sur la surface logique 1.
- Appelez BeginDraw sur le sous-rectangle de la surface logique 2.
- Mettez à jour la surface au décalage retourné par DirectComposition.
- Appelez EndDraw sur la surface logique 2.
- Appelez ResumeDraw sur la surface logique 1.
- Mettez à jour la surface au décalage retourné par DirectComposition.
- Appelez EndDraw sur la surface logique 1.
- Appel de 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. La surface peut être associée à un ou plusieurs visuels.
Lorsqu’une surface virtuelle est initialisée, elle n’est pas sauvegardée par des allocations réelles. En d’autres termes, il ne contient aucun bit. DirectComposition alloue des vignettes (autrement dit, des objets de surface de composition) après que l’application a démarré la mise à jour de l’aire. L’application met à jour la surface virtuelle en appelant BeginDraw et en spécifiant la zone d’intérêt en ce qui concerne les coordonnées de la surface virtuelle. Ensuite, DirectComposition alloue les vignettes nécessaires pour contenir la mise à jour et retourne la surface et le décalage de la composition à mettre à jour.
Comme avec les surfaces logiques, vous pouvez appeler BeginDraw, SuspendDraw, ResumeDraw et EndDraw sur une surface virtuelle. En outre, DirectComposition expose les méthodes que vous pouvez utiliser pour redimensionner et supprimer une surface virtuelle existante.
Redimensionnement d’une surface virtuelle
La méthode Resize modifie les limites de la surface virtuelle, ce qui signifie que toutes les nouvelles mises à jour ou allocations doivent se situer dans les limites définies par la nouvelle taille. Une application utilise redimensionnement 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 le redimensionnement 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 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 mettre à jour la région rouge sans redimensionner à nouveau la surface virtuelle.

L’opération de redimensionnement prend effet immédiatement. DirectComposition n’attend pas que l’application appelle la validation 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 lors du premier redimensionnement. Le deuxième redimensionnement n’a aucun effet bien qu’il ait été appelé avant la validation. 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. Elle ne redimensionne pas les limites de la surface virtuelle, mais elle indique à DirectComposition les surfaces logiques qui doivent être allouées.
Dans l’illustration suivante, le carré vert est la fenêtre d’affichage de l’application. L’application est initialement rendue aux six premières mosaïques (bleues) de la surface virtuelle (gris clair) qui se trouvent dans la fenêtre d’affichage. Comme la page qui est représentée par la surface virtuelle fait défiler, 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 correspond à l’emplacement du contenu et que le reste n’est pas nécessaire pour le moment. DirectComposition peut ensuite choisir de recycler les surfaces logiques qui représentaient à l’origine les six premières vignettes (gris foncé).
