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 |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈