IDCompositionVirtualSurface
COM公式ドキュメント
ビジュアルツリー内での合成用にビジュアルへ関連付けることができる、疎に割り当てられたビットマップを表します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
この仮想サーフェスオブジェクトの論理サイズを変更します。
| width | DWORD | in | 仮想サーフェスの新しい幅 (ピクセル単位)。最大幅は 16,777,216 ピクセルです。 |
| height | DWORD | in | 仮想サーフェスの新しい高さ (ピクセル単位)。最大高さは 16,777,216 ピクセルです。 |
戻り値
型: HRESULT
関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、DirectComposition Error Codes を参照してください。
解説(Remarks)
仮想サーフェスのサイズを変更すると、その内容は新しいサーフェスの境界まで保持されます。サーフェスを小さくした場合、新しい幅または高さの範囲外となる、以前に割り当て済みのピクセルは破棄されます。
このビットマップに対して IDCompositionSurface::BeginDraw が呼び出され、対応する IDCompositionSurface::EndDraw の呼び出しが行われていない場合、このメソッドは失敗します。
width または height が 16,777,216 ピクセルを超える場合、このメソッドは失敗します。
指定されたトリム矩形の外側にあるピクセルを破棄します。
| rectangles | RECT* | inoptional | 保持する矩形の配列。 |
| count | DWORD | in | rectangles 配列に含まれる矩形の数。 |
戻り値
型: HRESULT
関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。エラーコードの一覧については、DirectComposition Error Codes を参照してください。
解説(Remarks)
仮想サーフェスは、サーフェス内のすべてのピクセルを格納するのに十分な記憶域を持たない場合があります。アプリケーションは、IDCompositionSurface::BeginDraw メソッドを呼び出すことで合成エンジンにサーフェス用のメモリを割り当てるよう指示し、IDCompositionVirtualSurface::Trim メソッドを呼び出すことでサーフェス用のメモリを解放するよう指示します。矩形の配列は、このメソッドから戻った後も割り当てを維持すべき仮想サーフェスの領域を表します。指定された矩形群の外側にあるピクセルはテクスチャリングに使用されなくなり、そのメモリは再利用される可能性があります。
count パラメーターが 0 の場合、ピクセルは一切保持されず、仮想サーフェスに割り当てられたすべてのメモリが再利用される可能性があります。rectangles パラメーターに NULL を指定できるのは、count パラメーターが 0 の場合のみです。
このビットマップに対して IDCompositionSurface::BeginDraw が呼び出され、対応する IDCompositionSurface::EndDraw の呼び出しが行われていない場合、このメソッドは失敗します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDCompositionVirtualSurface "{AE471C51-5F53-4A24-8D3E-D0C39C30B3F0}" #usecom global IDCompositionVirtualSurface IID_IDCompositionVirtualSurface "{}" #comfunc global IDCompositionVirtualSurface_Resize 8 int,int #comfunc global IDCompositionVirtualSurface_Trim 9 var,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IDCompositionVirtualSurface "{AE471C51-5F53-4A24-8D3E-D0C39C30B3F0}" #usecom global IDCompositionVirtualSurface IID_IDCompositionVirtualSurface "{}" #comfunc global IDCompositionVirtualSurface_Resize 8 int,int #comfunc global IDCompositionVirtualSurface_Trim 9 sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。