Dati di Surface privati (Direct3D 9)

È possibile archiviare qualsiasi tipo di dati specifici dell'applicazione con una superficie. Ad esempio, una superficie che rappresenta una mappa in un gioco può contenere informazioni sul terreno.

Una superficie può avere più di un buffer di dati privato. Ogni buffer viene identificato da un GUID fornito durante il collegamento dei dati alla superficie.

Per archiviare i dati della superficie privata, usare SetPrivateData, passare un puntatore al buffer di origine, le dimensioni dei dati e un GUID definito dall'applicazione per i dati. Facoltativamente, i dati di origine possono esistere sotto forma di oggetto COM; in questo caso, si passa un puntatore al puntatore dell'interfaccia IUnknown dell'oggetto e si imposta il flag D3DSPD_IUNKNOWNPOINTER.

SetPrivateData alloca un buffer interno per i dati e li copia. È quindi possibile liberare in modo sicuro il buffer o l'oggetto di origine. Il riferimento interno al buffer o all'interfaccia viene rilasciato quando viene chiamato FreePrivateData. Ciò avviene automaticamente quando la superficie viene liberata.

Per recuperare i dati privati per una superficie, è necessario allocare un buffer delle dimensioni corrette e quindi chiamare il metodo GetPrivateData, passando il GUID assegnato ai dati. L'utente è responsabile della liberazione di qualsiasi memoria dinamica usata per questo buffer. Se i dati sono un oggetto COM, questo metodo recupera il puntatore IUnknown .

Se non si conosce la dimensione di un buffer da allocare, chiamare prima GetPrivateData con zero in pSizeOfData. Se il metodo ha esito negativo con D3DERR_MOREDATA, restituisce il numero di byte necessario per il buffer.

Superfici Direct3D