ID2D1RenderTarget::PushLayer オーバーロードされたメソッド

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

オーバーロードの一覧

メソッド 説明
PushLayer(D2D1_LAYER_PARAMETERS&,ID2D1Layer*)

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

PushLayer(D2D1_LAYER_PARAMETERS*,ID2D1Layer*)

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

解説

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;
}

要件

ライブラリ

D2d1.lib

DLL

D2d1.dll

参照

ID2D1RenderTarget

ID2D1RenderTarget

レイヤーの概要