ID2D1RenderTarget::P ushLayer(constD2D1_LAYER_PARAMETERS&,ID2D1Layer*) メソッド (d2d1.h)

指定したレイヤーをレンダー ターゲットに追加し、 PopLayer が呼び出されるまで後続のすべての描画操作を受け取るようにします。

構文

void PushLayer(
  [ref] const D2D1_LAYER_PARAMETERS & layerParameters,
  [in]  ID2D1Layer                    *layer
);

パラメーター

[ref] layerParameters

型: const D2D1_LAYER_PARAMETERS

レイヤーのコンテンツ境界、ジオメトリック マスク、不透明度、不透明度マスク、アンチエイリアシング オプション。

[in] layer

種類: ID2D1Layer*

後続の描画操作を受け取るレイヤー。

メモWindows 8以降、このパラメーターは省略可能です。 レイヤーが指定されていない場合、Direct2D はレイヤー リソースを自動的に管理します。
 

戻り値

なし

解説

PushLayer メソッドを使用すると、呼び出し元はレイヤーへのレンダリングのリダイレクトを開始できます。 すべてのレンダリング操作はレイヤーで有効です。 レイヤーの位置は、レンダー ターゲットに設定されたワールド変換の影響を受けます。

PushLayer には、一致する PopLayer 呼び出しが必要です。 PushLayer 呼び出しよりも多くの PopLayer 呼び出しがある場合、レンダー ターゲットはエラー状態になります。 すべての未処理のレイヤーがポップされる前に Flush が呼び出された場合、レンダー ターゲットはエラー状態になり、エラーが返されます。 エラーの状態は、 EndDraw の呼び出しによってクリアできます。

特定の ID2D1Layer リソースは、一度にのみアクティブにすることができます。 つまり、 PushLayer メソッドを呼び出して、同じレイヤー リソースを持つ別の PushLayer メソッドをすぐに実行することはできません。 代わりに、異なるレイヤー リソースで 2 番目の PushLayer メソッドを呼び出す必要があります。

失敗した場合、このメソッドはエラー コードを返しません。 描画操作 (PushLayer など) が失敗したかどうかを判断するには、ID2D1RenderTarget::EndDraw メソッドまたは ID2D1RenderTarget::Flush メソッドによって返される結果をチェックします。

次の例では、レイヤーを使用してビットマップをジオメトリック マスクにクリップします。 完全な例については、「 方法: ジオメトリック マスクにクリップする」を参照してください。

HRESULT DemoApp::RenderWithLayer(ID2D1RenderTarget *pRT)
{
    HRESULT hr = S_OK;

    // Create a layer.
    ID2D1Layer *pLayer = NULL;
    hr = pRT->CreateLayer(NULL, &pLayer);

    if (SUCCEEDED(hr))
    {
        pRT->SetTransform(D2D1::Matrix3x2F::Translation(350, 50));

        // Push the layer with the geometric mask.
        pRT->PushLayer(
            D2D1::LayerParameters(D2D1::InfiniteRect(), m_pPathGeometry),
            pLayer
            );
            
  
        pRT->DrawBitmap(m_pOrigBitmap, D2D1::RectF(0, 0, 200, 133));
        pRT->FillRectangle(D2D1::RectF(0.f, 0.f, 25.f, 25.f), m_pSolidColorBrush);  
        pRT->FillRectangle(D2D1::RectF(25.f, 25.f, 50.f, 50.f), m_pSolidColorBrush);
        pRT->FillRectangle(D2D1::RectF(50.f, 50.f, 75.f, 75.f), m_pSolidColorBrush); 
        pRT->FillRectangle(D2D1::RectF(75.f, 75.f, 100.f, 100.f), m_pSolidColorBrush);    
        pRT->FillRectangle(D2D1::RectF(100.f, 100.f, 125.f, 125.f), m_pSolidColorBrush); 
        pRT->FillRectangle(D2D1::RectF(125.f, 125.f, 150.f, 150.f), m_pSolidColorBrush);    
        

        pRT->PopLayer();
    }

    SafeRelease(&pLayer);

    return hr;
}

要件

要件
サポートされている最小のクライアント Windows 7、Windows Vista SP2 および Windows Vista 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 R2、Windows Server 2008 SP2 および Windows Server 2008 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー d2d1.h
Library D2d1.lib
[DLL] D2d1.dll

こちらもご覧ください

ID2D1RenderTarget

レイヤーの概要

PopLayer