Objetos Bitmap
Observação
Para aplicativos no Windows 10, é recomendável usar APIs Windows.UI.Composition em vez de DirectComposition. Para obter mais informações, consulte Modernizar seu aplicativo da área de trabalho usando a camada Visual.
O 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 aos quais o DirectComposition dá suporte.
Conteúdo do bitmap
Os aplicativos fornecem directComposition com o conteúdo de bitmap para compor e animar criando objetos visuais e, em seguida, definindo a propriedade Content desses objetos. O DirectComposition não oferece nenhum serviço de rasterização. Um aplicativo deve usar alguma outra biblioteca de rasterização acelerada por software ou hardware, como Direct2D ou Direct3D para preencher os bitmaps que devem ser compostos. Depois de redigir, o DirectComposition passa o conteúdo de bitmap composto para o DWM (Gerenciador de Janelas da Área de Trabalho) para renderização na tela.
Tipos com suporte de conteúdo de bitmap O Microsoft DirectComposition dá suporte aos seguintes tipos de bitmaps:
Bitmaps de memória de vídeo
Um bitmap de memória de vídeo é rasterizado em hardware usando métodos do Microsoft DirectX (incluindo o modelo de interoperabilidade DX para GDI). Ele é apoiado por superfícies compartilhadas entre processos 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 desinstalação porque o aplicativo só pode ler das superfícies das quais as texturas do DirectComposition são lidas.
Conteúdo em vídeo
Os aplicativos podem usar o DirectComposition para compor quadros de vídeo que usam cadeias de troca sem janelas directX associadas a uma superfície DirectComposition. Conceitualmente, o DirectComposition trata o conteúdo do vídeo como uma sequência de bitmaps. O DirectComposition não fornece um meio de apresentar quadros de vídeo.
O DirectComposition dá suporte a cadeias de troca sem janelas do DirectX, ou seja, cadeias de troca que não estão associadas a uma janela específica, e permite que dois aplicativos diferentes compartilhem cadeias de troca sem janelas entre os limites do processo. O compartilhamento de cadeias de troca sem janelas permite cenários de vídeo em que a cadeia de troca é criada em um processo e é usada com DirectComposition em um segundo processo. Cadeias de troca sem janelas são criadas usando o método IDXGIFactory2::CreateSwapChainForCompositionSurface .
Para obter mais informações sobre cadeias de troca do DirectX, consulte Visão geral do DXGI.
Conteúdo estéreo
Conceitualmente, uma cadeia de troca estéreo consiste em superfícies DXGI (Infraestrutura Gráfica do Microsoft DirectX) que representam os canais esquerdo e direito para conteúdo 3D estéreo. Quando uma cadeia de troca estéreo é usada como o recurso de bitmap para um visual, DirectComposition compõe em estéreo. Todo o conteúdo não estéreo (conteúdo mono) é considerado com conteúdo idêntico do canal esquerdo e direito; ou seja, o mesmo conteúdo de bitmap é usado para ambos os canais. O DirectComposition compõe todo o conteúdo à esquerda e todo o conteúdo direito separadamente. Se o dispositivo de exibição não for capaz de estéreo, o DirectComposition tratará o canal estéreo esquerdo ou direito (dependendo do aplicativo) como conteúdo mono e redigirá apenas esses dados para o recurso de bitmap.
O DirectComposition não dá suporte à criação ou manipulação de conteúdo estéreo e não pode promover uma cadeia de troca mono para um par estéreo. Um aplicativo deve executar essas tarefas antes de apresentar o conteúdo estéreo DirectX ao DirectComposition. Além disso, um aplicativo deve fornecer os deslocamentos do canal esquerdo e direito para percepção de profundidade; O DirectComposition não pode ajustar os deslocamentos do canal esquerdo e direito para modificar a profundidade percebida do conteúdo estéreo do DirectX.
O conteúdo estéreo DirectX é composto e persistido no DWM quando o hardware compatível com 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 filho 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 filho 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 todas as árvores visuais, ele pode reutilizar o conteúdo de uma janela em várias árvores visuais. A janela deve estar em camadas porque uma janela não em 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). Posteriormente, o DirectComposition redigi o visual sempre que o conteúdo da janela é alterado, inclusive quando o conteúdo é alterado como resultado de alterações nas árvores visuais associadas à janela. Em outras palavras, como miniaturas de DWM, os bitmaps da janela DirectComposition são "dinâmicos".
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 BPP (32 bits por pixel), que inclui oito bits para transparência por pixel. No entanto, um aplicativo pode especificar como o DirectComposition deve consumir o canal alfa. Em particular, DirectComposition pode respeitar o canal alfa ou pode ignorar alfa completamente, nesse caso, 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 a renderização ClearType, que requer informações de cobertura de sub pixel. Para usar o modo alfa por canal, um aplicativo deve primeiro usar Direct2D e DirectWrite para gravar dados de cobertura de sub pixel 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. O DirectComposition combina a cor do texto com os dados de cobertura, o que produz a mesclagem ClearType em relação à tela 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 alinhado ao eixo ou se precisar ser desenhado para uma superfície intermediária, o DirectComposition poderá usar os dados de cobertura de subpixel no bitmap para produzir uma rasterização em escala de cinza, automaticamente e sem custo adicional.
Para obter mais informações, consulte a descrição do parâmetro alphaMode da função IDCompositionDevice::CreateSurface ou IDCompositionDevice::CreateVirtualSurface .
Tópicos relacionados