D2D1_FACTORY_TYPE列挙 (d2d1.h)

複数のスレッドから安全にアクセスできるように、 Direct2D が ID2D1Factory と作成するリソースの同期を提供するかどうかを指定します。

構文

typedef enum D2D1_FACTORY_TYPE {
  D2D1_FACTORY_TYPE_SINGLE_THREADED = 0,
  D2D1_FACTORY_TYPE_MULTI_THREADED = 1,
  D2D1_FACTORY_TYPE_FORCE_DWORD = 0xffffffff
} ;

定数

 
D2D1_FACTORY_TYPE_SINGLE_THREADED
値: 0
ファクトリまたは作成するオブジェクトにアクセスしたり、ファクトリに書き込んだりするための同期は提供されません。 ファクトリまたはオブジェクトが複数のスレッドから呼び出される場合、アクセス ロックを提供するのはアプリケーション次第です。
D2D1_FACTORY_TYPE_MULTI_THREADED
値: 1
Direct2D では、ファクトリと作成するオブジェクトにアクセスして書き込むための同期が提供され、複数のスレッドからの安全なアクセスが可能になります。
D2D1_FACTORY_TYPE_FORCE_DWORD
値: 0xffffffff

注釈

ファクトリを作成するときに、マルチスレッドかシングルスレッドかを指定できます。 シングルスレッド ファクトリでは、Direct2D 内の他のシングル スレッド インスタンスに対するシリアル化は提供されないため、このメカニズムでは CPU のスケーリングが非常に大きくなります。

マルチスレッド ファクトリ インスタンスを作成することもできます。 この場合、ファクトリとすべての派生オブジェクトは任意のスレッドから使用でき、各レンダー ターゲットは個別に にレンダリングできます。 Direct2D は、これらのオブジェクトへの呼び出しをシリアル化するため、単一のマルチスレッド Direct2D インスタンスは、単一スレッドインスタンスの数ほど CPU 上でスケーリングされません。 ただし、リソースはマルチスレッド インスタンス内で共有できます。

修飾子 "ON the CPU" に注意してください。GPU は通常、CPU よりもきめ細かい並列処理を利用します。 たとえば、CPU からのマルチスレッド呼び出しは、GPU に送信されるときにシリアル化される可能性があります。ただし、ピクセル シェーダーと頂点シェーダーのバンク全体が並列で実行され、レンダリングが実行されます。

次のコード フラグメントは、ファクトリ ポインターを宣言し、シングルスレッド ファクトリ インスタンスを作成し、ファクトリを使用してレンダー ターゲットを作成します。

ID2D1Factory* m_pDirect2dFactory;

    // Create a Direct2D factory.
    hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &m_pDirect2dFactory);

        // Create a Direct2D render target.
        hr = m_pDirect2dFactory->CreateHwndRenderTarget(
            D2D1::RenderTargetProperties(),
            D2D1::HwndRenderTargetProperties(m_hwnd, size),
            &m_pRenderTarget
            );

要件

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

こちらもご覧ください

CreateFactory

ID2D1Factory

マルチスレッド Direct2D アプリ