Partager via


Données Surface privées (Direct3D 9)

Vous pouvez stocker n’importe quel type de données spécifiques à l’application avec une surface. Par exemple, une surface représentant une carte dans un jeu peut contenir des informations sur le terrain.

Une surface peut avoir plusieurs mémoires tampons de données privées. Chaque mémoire tampon est identifiée par un GUID que vous fournissez lors de l’attachement des données à la surface.

Pour stocker des données de surface privées, utilisez SetPrivateData, en passant un pointeur vers la mémoire tampon source, la taille des données et un GUID défini par l’application pour les données. Si vous le souhaitez, les données sources peuvent exister sous la forme d’un objet COM ; dans ce cas, vous passez un pointeur vers le pointeur d’interface IUnknown de l’objet et vous définissez l’indicateur D3DSPD_IUNKNOWNPOINTER.

SetPrivateData alloue une mémoire tampon interne pour les données et les copie. Vous pouvez ensuite libérer en toute sécurité la mémoire tampon ou l’objet source. La mémoire tampon interne ou la référence d’interface est publiée lorsque FreePrivateData est appelé. Cela se produit automatiquement lorsque la surface est libérée.

Pour récupérer des données privées pour une surface, vous devez allouer une mémoire tampon de la taille appropriée, puis appeler la méthode GetPrivateData, en transmettant le GUID qui a été affecté aux données. Vous êtes responsable de libérer toute mémoire dynamique que vous utilisez pour cette mémoire tampon. Si les données sont un objet COM, cette méthode récupère le pointeur IUnknown .

Si vous ne savez pas la taille d’une mémoire tampon à allouer, appelez d’abord GetPrivateData avec zéro dans pSizeOfData. Si la méthode échoue avec D3DERR_MOREDATA, elle retourne le nombre d’octets nécessaire pour la mémoire tampon.

Direct3D Surfaces