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