Platform SDK: DirectX |
ここでは、C++ でのアプリケーション開発について説明する。
サーフェスと共にあらゆる種類のアプリケーション固有データを格納できる。たとえば、ゲームのマップを示すサーフェスには、地域情報を含む場合がある。
サーフェスでは、1 つ以上のプライベート データ バッファを所有できる。各バッファは、サーフェスにデータをアタッチする際に指定する GUID で識別される。
プライベート サーフェス データを格納するには、IDirectDrawSurface7::SetPrivateData メソッドを使用する。このメソッドは、転送元バッファ、データのサイズ、データ用にアプリケーションで定義した GUID へのポインタを渡す。随意に、転送元データは COM オブジェクトのフォームに存在できる。この場合、オブジェクトの lUnknown インターフェイス ポインタにポインタを渡し、DDSPD_IUNKNOWNPOINTER フラグを設定する。他のフラグ (DDSPD_VOLATILE) は、サーフェスのコンテンツを変更しない限り有効なサーフェスにデータがアタッチされていることを示す (詳細については、「サーフェス固有値」を参照すること)。
SetPrivateData はデータに対して内部バッファを割り当て、データをコピーする。その後で、転送元バッファまたはオブジェクトを安全に解放できる。内部バッファまたはインターフェイス参照は、IDirectDrawSurface7::FreePrivateData の呼び出し時に解放される。サーフェスが解放されると、この処理は自動的に発生する。
サーフェスに対するプライベートデータを取得するには、正確なサイズのバッファを割り当て、SetPrivateData でデータに割り当てられた GUID を渡す IDirectDrawSurface7::GetPrivateData メソッドを呼び出さなくてはならない。このバッファを使用するあらゆる動的メモリの解放については、各自で責任を持つ。データが COM オブジェクトの場合、このメソッドは Iunknown ポインタを取得する。
割り当てるバッファのサイズが分からない場合、最初に *lpcbBufferSize にゼロを入れて GetPrivateData を呼び出す。このメソッドが DDERR_MOREDATA で失敗した場合、*lpcbBufferSize に必要なバイト数を返す。