Private Surface-Daten (Direct3D 9)
Sie können jede Art von anwendungsspezifischen Daten mit einer Oberfläche speichern. Beispielsweise kann eine Oberfläche, die eine Karte in einem Spiel darstellt, Informationen zum Gelände enthalten.
Eine Oberfläche kann über mehrere private Datenpuffer verfügen. Jeder Puffer wird durch eine GUID identifiziert, die Sie beim Anfügen der Daten an die Oberfläche angeben.
Verwenden Sie Zum Speichern privater Oberflächendaten SetPrivateData, indem Sie einen Zeiger auf den Quellpuffer, die Größe der Daten und eine anwendungsdefinierte GUID für die Daten übergeben. Optional können die Quelldaten in Form eines COM-Objekts vorhanden sein. In diesem Fall übergeben Sie einen Zeiger auf den IUnknown-Schnittstellenzeiger des Objekts und legen das D3DSPD_IUNKNOWNPOINTER-Flag fest.
SetPrivateData weist den Daten einen internen Puffer zu und kopiert sie. Anschließend können Sie den Quellpuffer oder das Quellobjekt sicher freigeben. Der interne Puffer- oder Schnittstellenverweis wird freigegeben, wenn FreePrivateData aufgerufen wird. Dies geschieht automatisch, wenn die Oberfläche freigegeben wird.
Um private Daten für eine Oberfläche abzurufen, müssen Sie einen Puffer der richtigen Größe zuordnen und dann die GetPrivateData-Methode aufrufen, indem Sie die GUID übergeben, die den Daten zugewiesen wurde. Sie sind dafür verantwortlich, alle dynamischen Speicher freizugeben, die Sie für diesen Puffer verwenden. Wenn es sich bei den Daten um ein COM-Objekt handelt, ruft diese Methode den IUnknown-Zeiger ab.
Wenn Sie nicht wissen, wie groß ein Puffer zugeordnet werden soll, rufen Sie zuerst GetPrivateData mit null in pSizeOfData auf. Wenn die Methode mit D3DERR_MOREDATA fehlschlägt, gibt sie die erforderliche Anzahl von Bytes für den Puffer zurück.
Zugehörige Themen