Prywatne dane powierzchni (Direct3D 9)
Dane specyficzne dla aplikacji można przechowywać na powierzchni. Na przykład powierzchnia reprezentująca mapę w grze może zawierać informacje o terenie.
Powierzchnia może mieć więcej niż jeden prywatny bufor danych. Każdy bufor jest identyfikowany przez identyfikator GUID, który należy podać podczas dołączania danych do powierzchni.
Aby przechowywać dane prywatnych powierzchni, użyj polecenia SetPrivateData, przekazując wskaźnik do buforu źródłowego, rozmiaru danych i identyfikatora GUID zdefiniowanego przez aplikację dla danych. Opcjonalnie dane źródłowe mogą istnieć w postaci obiektu COM; w tym przypadku wskaźnik jest przekazywany do wskaźnika interfejsu obiektu IUnknown i ustawiasz flagę D3DSPD_IUNKNOWNPOINTER.
SetPrivateData przydziela wewnętrzny bufor dla danych i kopiuje je. Następnie można bezpiecznie zwolnić bufor źródłowy lub obiekt. Odwołanie do wewnętrznego buforu lub interfejsu jest zwalniane po wywołaniu klasy FreePrivateData. Dzieje się tak automatycznie, gdy powierzchnia zostanie zwolniona.
Aby pobrać dane prywatne dla powierzchni, należy przydzielić bufor prawidłowego rozmiaru, a następnie wywołać metodę GetPrivateData, przekazując identyfikator GUID przypisany do danych. Użytkownik jest odpowiedzialny za zwolnienie dowolnej pamięci dynamicznej używanej dla tego buforu. Jeśli dane są obiektem COM, ta metoda pobiera wskaźnik IUnknown.
Jeśli nie wiesz, jak duży bufor ma być przydzielany, najpierw wywołaj metodę GetPrivateData z zerową wartością w pliku pSizeOfData. Jeśli metoda zakończy się niepowodzeniem z D3DERR_MOREDATA, zwraca wymaganą liczbę bajtów dla buforu.
Tematy pokrewne
-
powierzchni Direct3D