Platform SDK: DirectX |
ここでは、C++ でのアプリケーション開発について説明する。
いくつかの DirectDraw メソッドはサーフェスの参照カウントを変更するが、サーフェスに関連付けられた他のオブジェクトに影響を与えるメソッドもある。ここでは前者を「サーフェスのみ変更」、後者を「クロスオブジェクト変更」と言う。
その他、フリッピング チェーンなどの複合サーフェスでも、サーフェスのみ変更が適用される。複合サーフェスはサーフェスの集合であるが、大部分の場合 DirectDraw では単一のオブジェクトとして扱われるので、参照カウントの扱いには注意を要する。すなわち、IDirectDrawSurface7::GetAttachedSurface および IDirectDrawSurface7::AddAttachedSurface メソッドはサーフェスの参照カウントをインクリメントし、IDirectDrawSurface7::DeleteAttachedSurface メソッドはデクリメントする。これらのメソッドによって、現在のサーフェスにアタッチされているサーフェスの参照カウントが変更されることはない。詳細については、これらのメソッドのリファレンスと、「複合サーフェスの参照カウント」を参照すること。
IDirectDrawSurface7::SetClipper や IDirectDrawSurface7::SetPalette メソッドは、アタッチされているオブジェクトの参照カウントをインクリメントする。オブジェクトがアタッチされると、サーフェスがそれらのオブジェクトを管理するが、サーフェスが解放されると、アタッチされたオブジェクトも自動的に解放される (このため、アプリケーションによっては、これらの呼び出しが成功してからオブジェクトを解放する。これは確実で有効な方法である)。
クリッパーやパレットがサーフェスにアタッチされると、IDirectDrawSurface7::GetClipper や IDirectDrawSurface7::GetPalette メソッドを呼び出して、それらを再度取得することができる。これらのメソッドはインターフェイス ポインタのコピーを返すので、取得されたオブジェクトの参照カウントが暗にインクリメントされる。インターフェイスの処理が完了したら、忘れずにそのインターフェイスを解放しなければならない。オブジェクトがアタッチされたサーフェスが、そのオブジェクトに対する参照を保持している限り、インターフェイスの示すオブジェクトが解放されない。