Win32 API 日本語リファレンス
ホームGraphics.Direct2D › D2D1_FACTORY_TYPE

D2D1_FACTORY_TYPE

列挙型
基底型i4

メンバー 2

名前10進16進説明
D2D1_FACTORY_TYPE_SINGLE_THREADED00x0ファクトリまたはそれが作成するオブジェクトへのアクセスおよび書き込みに対して、同期は提供されません。ファクトリまたはそれらのオブジェクトが複数のスレッドから呼び出される場合、アクセスのロックはアプリケーション側で行う必要があります。
D2D1_FACTORY_TYPE_MULTI_THREADED10x1Direct2D が、ファクトリおよびそれが作成するオブジェクトへのアクセスと書き込みに対して同期を提供し、複数のスレッドからの安全なアクセスを可能にします。

公式ドキュメント

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

解説(Remarks)

ファクトリを作成するときに、マルチスレッドとシングルスレッドのどちらにするかを指定できます。シングルスレッドのファクトリは、Direct2D 内の他のシングルスレッドインスタンスに対して一切の直列化を行わないため、この仕組みは CPU 上で非常に高いスケーラビリティをもたらします。

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

「CPU 上で」という限定に注意してください。一般に GPU は CPU よりも細粒度の並列性を活用します。たとえば、CPU からのマルチスレッドの呼び出しは、GPU へ送られる際には結局直列化される場合がありますが、多数のピクセルシェーダーおよび頂点シェーダーが並列に動作して描画を実行します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

列挙メンバーの定義。HSP タブは #define global(値は16進)。

typedef enum D2D1_FACTORY_TYPE : int {
    D2D1_FACTORY_TYPE_SINGLE_THREADED = 0,
    D2D1_FACTORY_TYPE_MULTI_THREADED = 1
} D2D1_FACTORY_TYPE;
public enum D2D1_FACTORY_TYPE : int
{
    D2D1_FACTORY_TYPE_SINGLE_THREADED = 0,
    D2D1_FACTORY_TYPE_MULTI_THREADED = 1,
}
Public Enum D2D1_FACTORY_TYPE As Integer
    D2D1_FACTORY_TYPE_SINGLE_THREADED = 0
    D2D1_FACTORY_TYPE_MULTI_THREADED = 1
End Enum
import enum

class D2D1_FACTORY_TYPE(enum.IntEnum):
    D2D1_FACTORY_TYPE_SINGLE_THREADED = 0
    D2D1_FACTORY_TYPE_MULTI_THREADED = 1
// D2D1_FACTORY_TYPE
pub const D2D1_FACTORY_TYPE_SINGLE_THREADED: i32 = 0;
pub const D2D1_FACTORY_TYPE_MULTI_THREADED: i32 = 1;
// D2D1_FACTORY_TYPE
const (
	D2D1_FACTORY_TYPE_SINGLE_THREADED int32 = 0
	D2D1_FACTORY_TYPE_MULTI_THREADED int32 = 1
)
const
  D2D1_FACTORY_TYPE_SINGLE_THREADED = 0;
  D2D1_FACTORY_TYPE_MULTI_THREADED = 1;
// D2D1_FACTORY_TYPE
pub const D2D1_FACTORY_TYPE_SINGLE_THREADED: i32 = 0;
pub const D2D1_FACTORY_TYPE_MULTI_THREADED: i32 = 1;
const
  D2D1_FACTORY_TYPE_SINGLE_THREADED* = 0
  D2D1_FACTORY_TYPE_MULTI_THREADED* = 1
enum D2D1_FACTORY_TYPE : int {
    D2D1_FACTORY_TYPE_SINGLE_THREADED = 0,
    D2D1_FACTORY_TYPE_MULTI_THREADED = 1,
}
#define global D2D1_FACTORY_TYPE_SINGLE_THREADED 0x0
#define global D2D1_FACTORY_TYPE_MULTI_THREADED  0x1