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 上的缩放不会像单个线程实例那样好。 但是,资源可以在多线程实例中共享。

请注意限定符“在 CPU 上”:GPU 通常比 CPU 更利用细粒度并行度。 例如,在发送到 GPU 时,来自 CPU 的多线程调用可能最终仍会被序列化;但是,整个像素组和顶点着色器将并行运行以执行呈现。

示例

以下代码片段声明工厂指针,创建单线程工厂实例,并使用工厂创建呈现器目标。

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、带 SP2 的 Windows Vista 和适用于 Windows Vista 的平台更新 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2008 R2、Windows Server 2008 SP2 和适用于 Windows Server 2008 的平台更新 [桌面应用 |UWP 应用]
标头 d2d1.h

另请参阅

CreateFactory

ID2D1Factory

多线程 Direct2D 应用