Partilhar via


Suporte gráfico Pseudo-Vector

Importante

A moderna plataforma de impressão é o meio preferido do Windows para comunicar com as impressoras. Recomendamos que utilize o controlador de classe da caixa de entrada IPP da Microsoft, juntamente com as Aplicações de Suporte de Impressão (PSA), para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.

Para obter mais informações, consulte Guia de design do aplicativo de suporte de impressão v1 e v2.

Os dispositivos que não suportam gráficos vetoriais verdadeiros podem tirar proveito do suporte que o Unidrv fornece para gráficos pseudovetoriais. Quando você usa esse recurso, o Unidrv baixa retângulos pretos sólidos e linhas horizontais e verticais diretamente para um dispositivo gráfico não vetorial, reduzindo a sobrecarga de renderização dessas figuras em uma superfície raster. Isso também reduz o tamanho dos dados de saída, o que pode melhorar a taxa de transferência da impressora para dispositivos que não lidam com dados raster de forma eficiente.

Para se beneficiar desse recurso, um minidriver para um dispositivo gráfico não vetorial precisa apenas suportar o comando CmdRectBlackFill. Esta funcionalidade é desativada quando a funcionalidade Otimização de Impressão no separador Avançado das páginas de propriedades da impressora está desativada.

O recurso de gráficos pseudovetoriais interceta chamadas para DrvBitBlt, DrvStrokePathe DrvLineTo, para determinar se um retângulo preto sólido ou uma linha vertical ou horizontal deve ser desenhada. Quando o Unidrv reconhece a figura a ser desenhada como um retângulo válido (um que é preto sólido, não tem recorte complexo e não usa um ROP usando os bits de destino atuais), ele é armazenado em uma matriz de retângulo em vez de ser desenhado na superfície.

O aspeto mais difícil do recurso de gráficos pseudovetoriais é evitar problemas de ordem z causados por objetos que devem ser desenhados sobre objetos desenhados anteriormente. Os objetos na parte superior podem precisar apagar ou substituir parte de um retângulo preto. Se o retângulo preto já tiver sido baixado para o dispositivo, um objeto desenhado posteriormente na superfície do sistema pode não ser desenhado corretamente.

A solução para este problema é armazenar temporariamente um retângulo válido, em vez de desenhá-lo imediatamente na superfície. Quando um novo objeto deve ser desenhado na superfície, o Unidrv verifica se o objeto se sobrepõe a qualquer retângulo preto. Em caso afirmativo, a parte sobreposta do retângulo preto é desenhada na superfície primeiro, antes que o novo objeto seja desenhado, mantendo assim a ordem z correta. Desenhar o retângulo primeiro também leva em conta a possibilidade de que o novo objeto a ser desenhado possa ter um ROP associado a ele, incluindo um que interage com o destino.

Além disso, é possível que o novo objeto a ser desenhado contenha recortes complexos para que a figura resultante não seja mais um retângulo. Quando a renderização de banda ou página estiver completa, quaisquer retângulos pretos restantes podem ser baixados diretamente para o dispositivo sem causar problemas de ordem z. A Unidrv mantém uma lista de até 256 retângulos por banda, concatenando retângulos BitBlt sempre que possível.

Problemas de gráficos pseudovetoriais

O recurso de gráficos pseudovetoriais pode alterar a ordem z em certas situações, particularmente quando o texto é transferido diretamente para o dispositivo e objetos subsequentes com recorte complexo precisam interagir com esse texto.