Partager via


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 D3DDDIARG_COMPOSERECTS qui spécifie les paramètres utilisés pour composer des zones rectangulaires.

Valeur de retour

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 requise pour qu’elle soit terminée.

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 être partiellement ou complètement en dehors de la surface de destination. Les zones rectangulaires de destination sont clippées en partie à l’extérieur et rejetées ou complètement 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 mémoires tampons de vertex utilisées avec ComposeRects ne doivent pas être verrouillées.
  • Les surfaces source et de destination sont mises en forme comme un 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 de la description de la zone rectangulaire de destination. Dans la build commerciale, ComposeRects retourne une erreur si un index non valide existe.
  • Le nombre de zones rectangulaires doit être inférieur à 0xFFFF pour empêcher le dépassement interne pendant les opérations mathématiques.
  • Les surfaces et les mémoires tampons de 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 l’aire de destination.
L’exemple de code suivant montre une opération qui ComposeRects effectue :
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;
}

Exigences

Exigence Valeur
client minimum pris en charge Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows.
plateforme cible Bureau
d’en-tête d3dumddi.h (include D3dumddi.h)

Voir aussi

D3DDDIARG_COMPOSERECTS

D3DDDI_DEVICEFUNCS