专用 Surface 数据 (Direct3D 9)
可以使用图面存储任何类型的特定于应用程序的数据。 例如,在游戏中表示地图的图面可能包含有关地形的信息。
一个图面可以有多个专用数据缓冲区。 每个缓冲区由在将数据附加到图面时提供的 GUID 标识。
若要存储专用表面数据,请使用 SetPrivateData,将指针传递到源缓冲区、数据的大小以及数据的应用程序定义的 GUID。 (可选)源数据可以以 COM 对象的形式存在;在本例中,将指针传递到对象的 IUnknown 接口指针,并设置D3DSPD_IUNKNOWNPOINTER标志。
SetPrivateData 为数据分配内部缓冲区并复制它。 然后,可以安全地释放源缓冲区或对象。 调用 FreePrivateData 时,将释放内部缓冲区或接口引用。 释放表面时会自动发生这种情况。
若要检索图面的私有数据,必须分配大小正确的缓冲区,然后调用 GetPrivateData 方法,传递分配给数据的 GUID。 你负责释放用于此缓冲区的任何动态内存。 如果数据是 COM 对象,此方法将检索 IUnknown 指针。
如果不知道要分配的缓冲区有多大,请先在 pSizeOfData 中调用零的 GetPrivateData。 如果方法失败并D3DERR_MOREDATA,它将返回缓冲区的必要字节数。
相关主题