Share via


ID2D1Factory::CreateDxgiSurfaceRenderTarget メソッド

DirectX Graphics Infrastructure (DXGI) サーフェイスに描画するレンダー ターゲットを作成します。

構文

virtual HRESULT CreateDxgiSurfaceRenderTarget(
  [in]   IDXGISurface *dxgiSurface,
  [in]   const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties,
  [out]  ID2D1RenderTarget **renderTarget
) = 0;

パラメーター

  • dxgiSurface [in]
    IDXGISurface レンダー ターゲットの描画先となる IDXGISurface。
  • renderTargetProperties [in]
    D2D1_RENDER_TARGET_PROPERTIES レンダリング モード、ピクセル形式、リモート処理オプション、DPI 情報、およびハードウェア レンダリングに必要な最小限の DirectX サポート。サポートされているピクセル形式については、「サポートされているピクセル形式とアルファ モード」を参照してください。
  • renderTarget [out]
    ID2D1RenderTarget このメソッドが返されるときに、このメソッドによって作成された ID2D1RenderTarget オブジェクトへのポインターのアドレスが格納されます。

戻り値

HRESULT

メソッドが成功した場合は、S_OK が返されます。 それ以外の場合は、エラー コードが返されます。HRESULT.

解説

Direct3D サーフェイスに書き込むには、IDXGISurface を取得して CreateDxgiSurfaceRenderTarget メソッドに渡し、DXGI サーフェイス レンダー ターゲットを作成します。その後、DXGI サーフェイス レンダー ターゲットを使用して DXGI サーフェイスに 2-D コンテンツを描画できます。

DXGI サーフェイス レンダー ターゲットは ID2D1RenderTarget の 1 つです。他の Direct2D レンダー ターゲットと同様に、DXGI サーフェイス レンダー ターゲットはリソースの作成および描画コマンドの発行に使用できます。

DXGI サーフェイス レンダー ターゲットと DXGI サーフェイスは、同じ DXGI 形式を使用する必要があります。レンダー ターゲットの作成時に DXGI_FORMAT_UNKOWN 形式を指定した場合、サーフェイスの形式が自動的に使用されます。

DXGI サーフェイス レンダー ターゲットでは DXGI サーフェイス同期は実行されません。

Direct2D で機能させるには、D3D10_CREATE_DEVICE_BGRA_SUPPORT フラグを使用して、IDXGISurface を提供する Direct3D デバイスを作成する必要があります。

DXGI サーフェイス レンダー ターゲットの作成と使用の詳細については、「Direct2D と Direct3D の相互運用性の概要」を参照してください。

レンダー ターゲットを作成し、ハードウェア アクセラレータが使用できる場合は、コンピューターの GPU にリソースを割り当てます。レンダー ターゲットを一度作成し、できるだけ長く保持することにより、パフォーマンスを向上することができます。アプリケーションでは、一度レンダー ターゲットを作成したら、アプリケーションが有効な間またはレンダー ターゲットの EndDraw メソッドから D2DERR_RECREATE_TARGET エラーが返されるまでは、そのターゲットを保持する必要があります。このエラーが発生すると、レンダー ターゲット (およびレンダー ターゲットによって作成されたすべてのリソース) を作成し直す必要があります。

次の例では、IDXGISwapChain から DXGI サーフェイス (pBackBuffer) を取得し、それを使用して DXGI サーフェイス レンダー ターゲットを作成します。

  // Get a surface in the swap chain
hr = m_pSwapChain->GetBuffer(
    0,
    IID_PPV_ARGS(&pBackBuffer)
    );
    if (SUCCEEDED(hr))
    {
        // Create the DXGI Surface Render Target.
        FLOAT dpiX;
        FLOAT dpiY;
        m_pD2DFactory->GetDesktopDpi(&dpiX, &dpiY);

        D2D1_RENDER_TARGET_PROPERTIES props =
            D2D1::RenderTargetProperties(
                D2D1_RENDER_TARGET_TYPE_DEFAULT,
                D2D1::PixelFormat(DXGI_FORMAT_UNKNOWN, D2D1_ALPHA_MODE_PREMULTIPLIED),
                dpiX,
                dpiY
                );

        // Create a Direct2D render target which can draw into the surface in the swap chain
        hr = m_pD2DFactory->CreateDxgiSurfaceRenderTarget(
            pBackBuffer,
            &props,
            &m_pBackBufferRT
            );

    }

完全なコードについては、「Direct3D 相互運用機能のサンプル」を参照してください。

要件

クライアントの最小要件

Windows 7, Windows Vista SP2 および Windows Vista 用のプラットフォーム更新プログラム

サーバーの最小要件

Windows Server 2008 R2, Windows Server 2008 SP2 および Windows Server 2008 用のプラットフォーム更新プログラム

ヘッダー

D2d1.h

ライブラリ

D2d1.lib

DLL

D2d1.dll

参照

ID2D1Factory

ID2D1Factory

Direct2D と Direct3D の相互運用性の概要

Direct3D 相互運用機能のサンプル