Compartilhar via


enumeração D2D1_FACTORY_TYPE (d2d1.h)

Especifica se Direct2D fornece sincronização para um ID2D1Factory e os recursos que ele cria, para que eles possam ser acessados com segurança de vários threads.

Syntax

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

Constantes

 
D2D1_FACTORY_TYPE_SINGLE_THREADED
Valor: 0
Nenhuma sincronização é fornecida para acessar ou gravar na fábrica ou nos objetos que ela cria. Se a fábrica ou os objetos forem chamados de vários threads, cabe ao aplicativo fornecer bloqueio de acesso.
D2D1_FACTORY_TYPE_MULTI_THREADED
Valor: 1
Direct2D fornece sincronização para acessar e gravar na fábrica e nos objetos que ele cria, permitindo o acesso seguro de vários threads.
D2D1_FACTORY_TYPE_FORCE_DWORD
Valor: 0xffffffff

Comentários

Ao criar uma fábrica, você pode especificar se ela é multithread ou singlethreaded. Uma fábrica singlethreaded não fornece nenhuma serialização em relação a qualquer outra instância threaded única em Direct2D, portanto, esse mecanismo fornece um grau muito grande de dimensionamento na CPU.

Você também pode criar uma instância de fábrica multithread. Nesse caso, a fábrica e todos os objetos derivados podem ser usados de qualquer thread e cada destino de renderização pode ser renderizado de forma independente. Direct2D serializa chamadas para esses objetos, portanto, uma única instância de Direct2D multithread não será dimensionada tão bem na CPU quanto muitas instâncias de thread único. No entanto, os recursos podem ser compartilhados na instância multithreaded.

Observe o qualificador "Na CPU": as GPUs geralmente aproveitam o paralelismo refinado mais do que as CPUs. Por exemplo, chamadas multithread da CPU ainda podem acabar sendo serializadas ao serem enviadas para a GPU; no entanto, um banco inteiro de sombreadores de pixel e vértice será executado em paralelo para executar a renderização.

Exemplos

Os fragmentos de código a seguir declaram um ponteiro de fábrica, criam uma instância de fábrica singlethreaded e usam a fábrica para criar um destino de renderização.

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

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 7, Windows Vista com SP2 e Atualização de Plataforma para Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 R2, Windows Server 2008 com SP2 e Atualização de Plataforma para Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Cabeçalho d2d1.h

Confira também

CreateFactory

ID2D1Factory

Aplicativos Direct2D com multithread