プライベート Surface データ (Direct3D 9)
サーフェスを使用して、任意の種類のアプリケーション固有のデータを格納できます。 たとえば、ゲーム内のマップを表すサーフェスには、地形に関する情報が含まれている場合があります。
1 つのサーフェスに複数のプライベート データ バッファーを含めることができます。 各バッファーは、データをサーフェスにアタッチするときに指定する GUID によって識別されます。
プライベート サーフェス データを格納するには、SetPrivateData を使用して、ソース バッファーへのポインター、データのサイズ、およびデータのアプリケーション定義 GUID を渡します。 必要に応じて、ソース データは COM オブジェクトの形式で存在できます。この場合、オブジェクトの IUnknown インターフェイス ポインターにポインターを渡し、D3DSPD_IUNKNOWNPOINTER フラグを設定します。
SetPrivateData は、データの内部バッファーを割り当ててコピーします。 その後、ソース バッファーまたはオブジェクトを安全に解放できます。 FreePrivateData が呼び出されると、内部バッファーまたはインターフェイス参照が解放されます。 これは、サーフェスが解放されると自動的に発生します。
サーフェスのプライベート データを取得するには、適切なサイズのバッファーを割り当て、GetPrivateData メソッドを呼び出して、データに割り当てられた GUID を渡す必要があります。 このバッファーに使用する動的メモリを解放する必要があります。 データが COM オブジェクトの場合、このメソッドは IUnknown ポインターを取得します。
割り当てるバッファーの大きさがわからない場合は、最初に pSizeOfData で GetPrivateData を 0 で呼び出します。 メソッドが D3DERR_MOREDATA で失敗した場合、バッファーに必要なバイト数が返されます。
関連トピック