Share via


D2D1_FACTORY_TYPE-Enumeration (d2d1.h)

Gibt an, ob Direct2D eine Synchronisierung für eine ID2D1Factory und die von ihr erstellten Ressourcen bereitstellt, damit von mehreren Threads sicher darauf zugegriffen werden kann.

Syntax

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

Konstanten

 
D2D1_FACTORY_TYPE_SINGLE_THREADED
Wert: 0
Es wird keine Synchronisierung für den Zugriff auf oder das Schreiben in die Factory oder die von ihr erstellten Objekte bereitgestellt. Wenn die Factory oder die Objekte aus mehreren Threads aufgerufen werden, ist es an der Anwendung, Zugriffssperren bereitzustellen.
D2D1_FACTORY_TYPE_MULTI_THREADED
Wert: 1
Direct2D bietet eine Synchronisierung für den Zugriff auf und das Schreiben in die Factory und die objekte, die erstellt werden, und ermöglicht so den sicheren Zugriff über mehrere Threads.
D2D1_FACTORY_TYPE_FORCE_DWORD
Wert: 0xffffffff

Hinweise

Wenn Sie eine Factory erstellen, können Sie angeben, ob es sich um Multithread- oder Singlethreading handelt. Eine Singlethread-Factory bietet keine Serialisierung für andere singlethreaded instance innerhalb von Direct2D, sodass dieser Mechanismus einen sehr großen Grad an Skalierung für die CPU bereitstellt.

Sie können auch eine Multithread-Factory instance erstellen. In diesem Fall können die Factory und alle abgeleiteten Objekte von jedem Thread verwendet werden, und jedes Renderziel kann unabhängig in gerendert werden. Direct2D serialisiert Aufrufe dieser Objekte, sodass ein einzelner Multithread-Direct2D-instance nicht so gut auf der CPU skaliert wird wie viele Einzelthreadinstanzen. Die Ressourcen können jedoch innerhalb des Multithread-instance freigegeben werden.

Beachten Sie den Qualifizierer "On the CPU": GPUs nutzen in der Regel eine differenzierte Parallelität mehr als CPUs. Beispielsweise können Multithreadaufrufe von der CPU immer noch serialisiert werden, wenn sie an die GPU gesendet werden. Eine ganze Bank von Pixel- und Vertex-Shadern wird jedoch parallel ausgeführt, um das Rendering auszuführen.

Beispiele

Die folgenden Codefragmente deklarieren einen Factoryzeiger, erstellen eine Singlethreaded Factory instance und verwenden die Factory, um ein Renderziel zu erstellen.

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
            );

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 7, Windows Vista mit SP2 und Plattformupdate für Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 R2, Windows Server 2008 mit SP2 und Plattformupdate für Windows Server 2008 [Desktop-Apps | UWP-Apps]
Kopfzeile d2d1.h

Weitere Informationen

CreateFactory

ID2D1Factory

Direct2D-Multithread-Apps