enumerazione D2D1_FACTORY_TYPE (d2d1.h)

Specifica se Direct2D fornisce la sincronizzazione per un ID2D1Factory e le risorse create, in modo che possano essere accessibili in modo sicuro da più thread.

Sintassi

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

Costanti

 
D2D1_FACTORY_TYPE_SINGLE_THREADED
Valore: 0
Non viene fornita alcuna sincronizzazione per l'accesso o la scrittura nella factory o per gli oggetti creati. Se la factory o gli oggetti vengono chiamati da più thread, spetta all'applicazione fornire il blocco di accesso.
D2D1_FACTORY_TYPE_MULTI_THREADED
Valore: 1
Direct2D fornisce la sincronizzazione per l'accesso e la scrittura nella factory e gli oggetti creati, consentendo l'accesso sicuro da più thread.
D2D1_FACTORY_TYPE_FORCE_DWORD
Valore: 0xffffffff

Commenti

Quando si crea una factory, è possibile specificare se è multithreading o singlethreading. Una factory a thread singolo non fornisce alcuna serializzazione su qualsiasi altra istanza a thread singolo all'interno di Direct2D, quindi questo meccanismo offre un livello molto elevato di scalabilità sulla CPU.

È anche possibile creare un'istanza di factory multithreading. In questo caso, la factory e tutti gli oggetti derivati possono essere usati da qualsiasi thread e ogni destinazione di rendering può essere sottoposta a rendering in modo indipendente. Direct2D serializza le chiamate a questi oggetti, quindi una singola istanza Direct2D multithreading non verrà ridimensionata anche sulla CPU come molte istanze a thread singolo. Tuttavia, le risorse possono essere condivise all'interno dell'istanza multithreading.

Si noti il qualificatore "Nella CPU": le GPU in genere sfruttano il parallelismo con granularità fine in modo maggiore rispetto alle CPU. Ad esempio, le chiamate multithreading dalla CPU potrebbero comunque finire per essere serializzate quando vengono inviate alla GPU; Tuttavia, un'intera banca di pixel e vertex shader verrà eseguita in parallelo per eseguire il rendering.

Esempio

I frammenti di codice seguenti dichiarano un puntatore factory, creano un'istanza factory a thread singolo e usano la factory per creare una destinazione di rendering.

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

Requisiti

Requisito Valore
Client minimo supportato Windows 7, Windows Vista con SP2 e Aggiornamento della piattaforma per Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 R2, Windows Server 2008 con SP2 e Platform Update per Windows Server 2008 [app desktop | App UWP]
Intestazione d2d1.h

Vedi anche

CreateFactory

ID2D1Factory

App Direct2D multithreading