Objetos de bitmap
Observação
Para aplicativos no Windows 10, recomendamos o uso de APIs Windows.UI.Composition em vez de DirectComposition. Para saber mais, veja Modernizar seu aplicativo da área de trabalho usando a camada Visual.
Microsoft DirectComposition é um mecanismo de composição de bitmap. Ele permite que os desenvolvedores de aplicativos combinem vários bitmaps e os manipulem de várias maneiras para obter efeitos visuais e animações interessantes em uma interface do usuário do aplicativo. Este tópico descreve os tipos de conteúdo de bitmap suportados pelo DirectComposition.
- de conteúdo de bitmap
- Tópicos relacionados
Conteúdo de bitmap
Os aplicativos fornecem ao DirectComposition o conteúdo de bitmap para compor e animar criando objetos visuais e, em seguida, definindo a propriedade Content desses objetos. DirectComposition não oferece nenhum serviço de rasterização. Um aplicativo deve usar alguma outra biblioteca de rasterização baseada em software ou acelerada por hardware, como Direct2D ou Direct3D para preencher os bitmaps que serão compostos. Depois de compor, o DirectComposition passa o conteúdo de bitmap composto para do Desktop Window Manager (DWM) para renderização na tela.
Tipos suportados de conteúdo de bitmap Microsoft DirectComposition suporta os seguintes tipos de bitmaps:
Bitmaps de memória de vídeo
Um bitmap de memória de vídeo é rasterizado no hardware usando métodos Microsoft DirectX (incluindo o modelo de interoperabilidade DX-to-GDI). Ele é apoiado por superfícies compartilhadas de processo cruzado que são visíveis para o aplicativo de chamada e para DirectComposition. Um bitmap de memória de vídeo não está sujeito a rasgamento porque o aplicativo só pode ler as superfícies das texturas DirectComposition.
Conteúdo de vídeo
Os aplicativos podem usar DirectComposition para compor quadros de vídeo que usam cadeias de permuta sem janelas DirectX vinculadas a uma superfície DirectComposition. Conceitualmente, DirectComposition trata o conteúdo de vídeo como uma sequência de bitmaps. DirectComposition não fornece um meio de apresentar quadros de vídeo.
O DirectComposition suporta cadeias de permuta sem janela DirectX, ou seja, cadeias de permuta que não estão vinculadas a uma janela específica, e permite que dois aplicativos diferentes compartilhem cadeias de permuta sem janela entre os limites do processo. O compartilhamento de cadeias de permuta sem janelas permite cenários de vídeo em que a cadeia de permuta é criada em um processo e usada com o DirectComposition em um segundo processo. As cadeias de permuta sem janela são criadas usando o IDXGIFactory2::CreateSwapChainForCompositionSurface método.
Para obter mais informações sobre cadeias de permuta DirectX, consulte Visão geral DXGI.
Conteúdo estéreo
Conceitualmente, uma cadeia de permuta estéreo consiste em superfícies DXGI (Microsoft DirectX Graphics Infrastructure) que representam os canais esquerdo e direito para conteúdo 3D estéreo. Quando uma cadeia de permuta estéreo é usada como o recurso de bitmap para um visual, DirectComposition compõe em estéreo. Todos os conteúdos não estéreo (conteúdo mono) são considerados como tendo conteúdo idêntico do canal esquerdo e direito; ou seja, o mesmo conteúdo de bitmap é usado para ambos os canais. DirectComposition compõe todo o conteúdo esquerdo e todo o conteúdo direito separadamente. Se o dispositivo de exibição não for compatível com estéreo, o DirectComposition tratará o canal estéreo esquerdo ou direito (dependendo do aplicativo) como conteúdo mono e compõe usando apenas esses dados para o recurso de bitmap.
DirectComposition não suporta a criação ou manipulação de conteúdo estéreo e não pode promover uma cadeia de permuta mono para um par estéreo. Um aplicativo deve executar essas tarefas antes de apresentar conteúdo estéreo DirectX para DirectComposition. Além disso, um aplicativo deve fornecer os deslocamentos de canal esquerdo e direito para perceção de profundidade; O DirectComposition não pode ajustar os deslocamentos de canal esquerdo e direito para modificar a profundidade percebida do conteúdo estéreo do DirectX.
O conteúdo estéreo DirectX é composto e persiste para DWM quando hardware com capacidade estéreo está disponível.
Bitmaps de janela
Um "bitmap de janela" não é um bitmap real, mas é um espaço reservado que o DirectComposition substitui em tempo real por rasterizações de janelas filhas ou de nível superior em camadas. Um bitmap de janela é semelhante a uma miniatura DWM, exceto que uma miniatura pode conter contribuições de muitas janelas, como janelas não filhas de propriedade, enquanto um bitmap de janela DirectComposition é sempre uma representação de apenas uma janela e seus filhos.
Como o DirectComposition tem acesso às superfícies de redirecionamento de todas as janelas e de todas as árvores visuais, ele pode reutilizar o conteúdo de uma janela em várias árvores visuais. A janela deve ser em camadas porque uma janela sem camadas não tem uma superfície de redirecionamento dedicada e, portanto, sua rasterização nem sempre está disponível para DirectComposition.
Para usar um bitmap de janela, um aplicativo associa um visual a um identificador de janela (HWND). Depois, DirectComposition recompõe o visual sempre que o conteúdo da janela muda, incluindo quando o conteúdo muda como resultado de alterações nas árvores visuais associadas à janela. Em outras palavras, como as miniaturas DWM, os bitmaps da janela DirectComposition são "ao vivo".
Associando conteúdo de bitmap a um visual
Para todos os três tipos de bitmaps, um aplicativo pode associar o mesmo bitmap a vários visuais, o que significa que uma única alocação de memória pode ser usada para exibir o mesmo conteúdo várias vezes.
Canal alfa
Todos os bitmaps têm um formato de 32 bits por pixel (BPP), que inclui oito bits para transparência por pixel. No entanto, um aplicativo pode especificar como DirectComposition deve consumir o canal alfa. Em particular, DirectComposition pode respeitar o canal alfa, ou pode ignorar alfa completamente, caso em que o bitmap é considerado totalmente opaco.
Um modo alfa adicional ignora o canal alfa, mas trata os valores vermelho, verde e azul como valores alfa por canal em vez da interpretação normal desses canais como intensidades de cor. Esse modo é útil para renderização ClearType, que requer informações de cobertura de subpixel. Para usar o modo alfa por canal, um aplicativo deve primeiro usar Direct2D e DirectWrite para gravar dados de cobertura de subpixels em um bitmap. Em seguida, o aplicativo deve definir o modo alfa correto e especificar uma cor de texto quando associar o bitmap a um visual. DirectComposition combina a cor do texto com os dados de cobertura, o que produz a mistura ClearType contra o plano de fundo.
Em situações em que o algoritmo ClearType não é aplicável, como se o bitmap não estiver alinhado a pixels e eixos, ou se precisar ser desenhado em uma superfície intermediária, o DirectComposition pode usar os dados de cobertura de subpixels no bitmap para produzir uma rasterização em escala de cinza, automaticamente, sem custo adicional.
Para obter mais informações, consulte a descrição do parâmetro alphaMode do IDCompositionDevice::CreateSurface ou função de IDCompositionDevice::CreateVirtualSurface.
Tópicos relacionados