PFND3DDDI_COMPOSERECTS fonction de rappel (d3dumddi.h)

La fonction ComposeRects compose des zones bidimensionnelles d’une surface source à une surface de destination.

Syntaxe

PFND3DDDI_COMPOSERECTS Pfnd3dddiComposerects;

HRESULT Pfnd3dddiComposerects(
  HANDLE hDevice,
  const D3DDDIARG_COMPOSERECTS *unnamedParam2
)
{...}

Paramètres

hDevice

Handle de l’appareil d’affichage (contexte graphique).

unnamedParam2

pData [in]

Pointeur vers une structure de D3DDDIARG_COMPOSERECTS qui spécifie les paramètres utilisés pour composer des zones rectangulaires.

Valeur retournée

ComposeRects retourne l’une des valeurs suivantes :

Code de retour Description
S_OK Les zones rectangulaires ont été composées avec succès.
E_OUTOFMEMORY ComposeRects n’a pas pu allouer la mémoire nécessaire pour qu’il se termine.

Remarques

Les contraintes et validations suivantes s’appliquent à la fonction ComposeRects :

  • Le pilote doit ignorer les zones rectangulaires sources qui ne sont pas complètement à l’intérieur de la surface source.
  • Les zones rectangulaires de destination,après l’application de décalages, peuvent se trouver partiellement ou complètement en dehors de la surface de destination. Les zones rectangulaires de destination sont clippées si partiellement à l’extérieur et rejetées ou totalement clippées si complètement à l’extérieur.
  • La même surface ne peut pas être spécifiée pour la source et la destination.
  • Les surfaces et les tampons de vertex utilisés avec ComposeRects ne doivent pas être verrouillés.
  • Les surfaces source et de destination sont mises en forme en tant que bit par pixel (D3DDDIFMT_A1) lors de leur création.
  • Dans la build de débogage, le runtime Microsoft Direct3D valide qu’une description de zone rectangulaire source existe pour chaque index dans la description de la zone rectangulaire de destination. Dans la build de vente au détail, ComposeRects retourne une erreur si un index non valide existe.
  • Le nombre de zones rectangulaires doit être inférieur à 0xFFFF pour éviter le dépassement de capacité interne pendant les opérations mathématiques.
  • Les mémoires tampons surface et vertex doivent être créées à l’aide du même périphérique d’affichage (contexte graphique).
  • La mémoire d’affichage locale doit être spécifiée pour la surface de destination.
L’exemple de code suivant montre une opération effectuée par ComposeRects :
for (UINT i=0; i < COMPOSERECTS.NumDstRects; i++) {
   if (i >= Size(VertexBuffer(hDstRectDescsVB)) / sizeof(D3DCOMPOSERECTDSTDESC))
      Ignore the rectangle;
   if (VertexBuffer(hDstRectDescsVB)[i].RectDescIndex >= Size(VertexBuffer(hSrcRectDescsVB)) / sizeof(D3DCOMPOSERECTSRCDESC))
      Ignore the rectangle;
   SourceRectangle = VertexBuffer(hSrcResource)[VertexBuffer(hDstRectDescsVB)[i].RectDescIndex];
   DestinationRectangle.X = {VertexBuffer(hDstRectDescsVB)[i].X + COMPOSERECTS.Xoffset;
   DestinationRectangle.Y = {VertexBuffer(hDstRectDescsVB)[i].Y + COMPOSERECTS.Yoffset;
   DestinationRectangle.Width = SourceRectangle.Width;
   DestinationRectangle.Height = SourceRectangle.Height;
   Perform COMPOSERECTS.Operation for each pixel;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et les versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Desktop (Expérience utilisateur)
En-tête d3dumddi.h (inclure D3dumddi.h)

Voir aussi

D3DDDIARG_COMPOSERECTS

D3DDDI_DEVICEFUNCS