IDCompositionVisual2
COM公式ドキュメント
ビジュアルツリー内の 1 つの DirectComposition ビジュアルを表します。(IDCompositionVisual2)
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
このビジュアルの不透明度モードを設定します。
| mode | DCOMPOSITION_OPACITY_MODE | in | ビジュアルを画面に合成する際に使用する不透明度モード。 |
戻り値
関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、DirectComposition Error Codes を参照してください。
解説(Remarks)
不透明度モードは、エフェクトグループオブジェクトの Opacity プロパティがビジュアルのサブツリーの合成にどのように影響するかを制御します。DirectComposition は 2 つの不透明度モード、Layer と Multiply をサポートします。Layer モードでは、各ビジュアルサブツリーは、そのサブツリー全体を不透明にラスタライズしたビットマップとして論理的に扱われ、そのビットマップに対して不透明度の値が適用されます。この方式では、重なり合う不透明なサーフェスはサブツリーの背景とはブレンドされますが、サーフェス同士ではブレンドされません。これに対して Multiply モードでは、各サーフェスが合成される際に個別に不透明度が適用されるため、サーフェス同士がブレンドされます。Multiply モードは Layer モードより高速であり、ビジュアルツリーの内容が完全に重なり合わない場合は常に Multiply モードが推奨されます。ただし、要素が重なり合う場合、Multiply モードでは望ましくない表示結果になることがあります。
既定では、ビジュアルは親ビジュアルの不透明度モードを継承し、その親ビジュアルもさらにその親ビジュアルの不透明度モードを継承する、という具合になります。あるビジュアルに対してこのメソッドが一度も呼び出されない場合、またはこのメソッドが DCOMPOSITION_OPACITY_MODE_INHERIT を指定して呼び出された場合、そのビジュアルは DCOMPOSITION_OPACITY_MODE_LAYER モードを使用します。どのビジュアルも不透明度モードを設定しない場合、ビジュアルツリー全体の既定値は DCOMPOSITION_OPACITY_MODE_LAYER になります。
opacityMode パラメーターが DCOMPOSITION_OPACITY_MODE_INHERIT 以外の場合、このビジュアルのサーフェスは指定された不透明度モードで合成されます。さらに、この不透明度モードは現在のビジュアルの子ビジュアルに対する新しい既定値になります。つまり、このビジュアルの子ビジュアルの不透明度モードが変更されていない場合、または明示的に DCOMPOSITION_OPACITY_MODE_INHERIT に設定されている場合、子ビジュアルのサーフェスはこのビジュアルの不透明度モードを使用して合成されます。
3D 変換が適用されたサーフェスが、観察者から見て裏面を向いているときに表示されるかどうかを指定します。
| visibility | DCOMPOSITION_BACKFACE_VISIBILITY | in | [in] このビジュアルのサブツリー内のサーフェスを画面に合成する際に使用する裏面の可視性。 |
戻り値
関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、DirectComposition Error Codes を参照してください。
解説(Remarks)
裏面の可視性プロパティは、3D 変換が適用されたサーフェスの描画方法に影響します。
既定では、ビジュアルは親ビジュアルの裏面の可視性プロパティを継承し、その親ビジュアルもさらにその親ビジュアルの裏面の可視性プロパティを継承する、という具合になります。あるビジュアルに対してこのメソッドが一度も呼び出されない場合、またはこのメソッドが DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT を指定して呼び出された場合、そのビジュアルは DCOMPOSITION_BACKFACE_VISIBILITY_VISIBLE モードを使用します。どのビジュアルも裏面の可視性プロパティを設定しない場合、ビジュアルツリー全体の既定値は DCOMPOSITION_BACKFACE_VISIBILITY_VISIBLE になります。
visibility パラメーターが DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT 以外の場合、このビジュアルのサーフェスは指定された可視性モードで合成されます。さらに、この可視性モードは現在のビジュアルの子ビジュアルに対する新しい既定値になります。つまり、このビジュアルの子ビジュアルの可視性モードが変更されていない場合、または明示的に DCOMPOSITION_BACKFACE_VISIBILITY_INHERIT に設定されている場合、子ビジュアルのサーフェスはこのビジュアルの可視性モードを使用して合成されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDCompositionVisual2 "{E8DE1639-4331-4B26-BC5F-6A321D347A85}"
#usecom global IDCompositionVisual2 IID_IDCompositionVisual2 "{}"
#comfunc global IDCompositionVisual2_SetOpacityMode 20 int
#comfunc global IDCompositionVisual2_SetBackFaceVisibility 21 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。