D2D1_FACTORY_TYPE 列挙型

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

構文

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

定数

  • D2D1_FACTORY_TYPE_SINGLE_THREADED
    ファクトリまたはファクトリによって作成されるオブジェクトへのアクセスまたは書き込みを実行する際に同期が提供されることはありません。ファクトリまたはオブジェクトが複数のスレッドから呼び出されると、アクセスをロックするかどうかはアプリケーションによって決まります。

  • D2D1_FACTORY_TYPE_MULTI_THREADED
    Direct2D では、ファクトリおよびファクトリによって作成されるオブジェクトへのアクセスと書き込みを実行する際に同期が提供されるため、複数のスレッドからの安全なアクセスが可能になります。

解説

ファクトリを作成する際に、マルチスレッドにするかシングルスレッドにするかを指定できます。シングルスレッド ファクトリでは、Direct2D 内の他のシングルスレッド インスタンスに対してシリアル化が行われないため、このメカニズムでは、CPU に対して大規模なスケーリングが行われます。

マルチスレッド ファクトリ インスタンスを作成することもできます。この場合、ファクトリおよびすべての派生オブジェクトはどのスレッドからも使用でき、各レンダー ターゲットを独自にレンダリングできます。Direct2D では、このようなオブジェクトの呼び出しがシリアル化されるため、1 つのマルチスレッド Direct2D インスタンスでは、複数のシングルスレッド インスタンスのように CPU に対してスケーリングが行われません。ただし、リソースはマルチスレッド インスタンス内で共有できます。

"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 用のプラットフォーム更新プログラム

サーバーの最小要件

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

ヘッダー

D2d1.h

参照

ID2D1Factory

CreateFactory