Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os drivers de ecrã e o hardware não são necessários para suportar sobreposições de várias camadas. No entanto, para fornecer suporte a sobreposição de vários planos, o hardware deve atender aos seguintes requisitos.
- O hardware deve suportar planos não sobrepostos.
- Um plano pode cobrir uma parte da tela, enquanto outro plano pode cobrir uma parte diferente, mutuamente exclusiva, da tela.
- Se qualquer parte da tela não estiver coberta por um plano, o hardware deve exibir preto nessa área. O hardware pode assumir que há um plano virtual na ordem z mais inferior que está preenchido com preto.
- O hardware deve suportar planos sobrepostos:
- O hardware deve ser capaz de ativar ou desativar a mistura alfa por plano. (A mistura alfa é uma técnica em que a cor em um bitmap de origem é combinada com a cor em um bitmap de destino para produzir um novo bitmap de destino.)
- Deve ser suportada a mistura entre os planos utilizando alfa pré-multiplicado.
- Quando apenas um alvo de saída está ativo, a saída ativa deve suportar sobrecamadas multiplanares. No modo de clone, onde várias saídas estão simultaneamente ativas, o hardware não deve relatar que suporta sobreposições de vários planos, a menos que todas as saídas ativas suportem sobreposições de vários planos.
- A cadeia de permuta do Desktop Window Manager (DWM) (plano 0) deve ser capaz de interagir com os outros planos de sobreposição.
- Todos os aviões devem poder ser ativados e desativados, incluindo o plano 0 (a cadeia de permuta do DWM).
- Todos os planos devem suportar clipping de origem e destino, incluindo o plano 0 (swapchain do DWM).
- Pelo menos um plano deve suportar encolhimento e estiramento, independente de outros planos que possam ser ativados.
- Os planos que suportam dimensionamento devem suportar filtragem bilinear e uma qualidade de filtragem superior à bilinear.
- Pelo menos um plano deve suportar esses formatos YUV (para obter mais informações, consulte Intervalos de formatos YUV no Windows 8.1):
- Conversão de matriz ITU BT.601 e BT.709 YUV para RGB para formatos YUV.
- Luminância YUV de alcance normal (ou estúdio) (16 - 235) e luminância YUV de alcance estendido (0 - 255).
- O hardware deve lidar com estes cenários de travamento de registro:
- Todos os atributos por plano (endereço do buffer, recorte, dimensionamento e assim por diante) devem ser postados atomicamente durante o período de retrace vertical. Quando o hardware atualiza um bloco de registros, todos esses registros devem ser postados atomicamente. Por exemplo, se o VSync ocorrer depois de escrever 10 de 20 registos relacionados ao plano de sobreposição, nenhum deles será enviado até o próximo VSync porque não podem ser enviados todos no VSync atual.
- Cada plano pode ser atualizado independentemente dos restantes planos. Por exemplo, suponha que os registros do plano 0 foram atualizados antes do VSync e que os registros do plano 1 sejam atualizados posteriormente, quando o VSync ocorrer. Nesse cenário, as atualizações do plano 1 podem esperar até o próximo VSync, mas as atualizações do plano 0 devem ocorrer a tempo.
- Quando vários planos são atualizados durante uma única chamada presente, as atualizações devem ocorrer atomicamente. Por exemplo, se uma única chamada presente estiver atualizando o plano 0 e habilitando o plano 1, os registros do plano 0 não deverão ser lançados no VSync, a menos que os registros do plano 1 também sejam lançados no mesmo VSync.
- A transformação, o dimensionamento e a mistura devem ocorrer nesta ordem:
A alocação de fonte é recortada de acordo com o retângulo de origem especificado. É garantido que o retângulo de origem seja definido dentro dos limites da alocação de origem.
Aplique uma inversão de imagem horizontal e, em seguida, uma inversão de imagem vertical, se solicitado.
Aplique o redimensionamento de acordo com o retângulo de destino, aplique o corte de acordo com o retângulo do clipe e aplique a filtragem apropriada ao redimensionar.
Misture com alocações em outras camadas. A mistura deve ser realizada de cima para baixo (ou até que uma camada opaca seja atingida) na ordem z. Se a mistura alfa for solicitada, o hardware deverá respeitar o alfa por pixel, e o valor da cor será pré-multiplicado por alfa. O pseudocódigo a seguir executa uma operação de origem sobre destino repetidamente de cima para baixo, (((Layer[0] over Layer[1]) over Layer[2]) over ¦ Layer[n]). Fora do retângulo de destino, cada camada deve ser tratada como transparente (0,0,0,0).
Color = Color[0]; // Layer 0 is topmost. Alpha = Color[0].Alpha; for (i = 1; Alpha < 1 && i < LayersToBlend; i++) { Color += ((1 - Alpha) * Color[i]); Alpha += ((1 - Alpha) * Color[i].Alpha); } Output Color;O hardware pode ser misturado de baixo para cima, desde que o resultado de saída seja o mesmo. Neste caso, deve ser utilizado o seguinte algoritmo de mistura:
Color = Color[LayersToBlend-1]; // Bottom-most layer Alpha = Color[LayersToBlend-1].Alpha; if (LayersToBlend > 1) { for (i = LayersToBlend - 2; Alpha < 1 && i >= 0; i--) { Color = Color[i] + ((1 - Color[i].Alpha) * Color; Alpha = Color[i].Alpha + (1 - Color[i].Alpha) * Alpha; } } Output Color;A cor preta deve ser exibida na área onde não está coberta por nenhum dos retângulos de destino de quaisquer camadas. O hardware pode assumir que há uma camada preta mais inferior virtual conceitual que é do tamanho da tela.