Compatibilidade com gráficos pseudovetoriais
Importante
A plataforma de impressão moderna é o meio preferido do Windows para se comunicar com as impressoras. Recomendamos que você use o driver de classe de caixa de entrada IPP da Microsoft juntamente com PSA (Aplicativos de Suporte à Impressão) 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 Plataformade impressão moderna e o Guia de design do aplicativo de suporte de impressão.
Os dispositivos que não suportam gráficos vetoriais verdadeiros podem aproveitar o 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 renderizar essas 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 dar suporte ao comando CmdRectBlackFill . Essa funcionalidade é desativada quando o recurso Print Optimization na guia Advanced das páginas de propriedades da impressora está desativado.
O recurso de gráficos pseudovetoriais intercepta chamadas para DrvBitBlt, DrvStrokePath e 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 aspecto mais difícil do recurso de gráficos pseudovetoriais é evitar problemas de ordem z causados por objetos que devem ser desenhados em cima de 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 esse 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 algum retângulo preto. Nesse caso, 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 interaja 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 da banda ou da página estiver concluída, todos os retângulos pretos restantes poderão ser baixados diretamente para o dispositivo sem causar problemas de ordem z. O 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 ordenação z em determinadas situações, especialmente quando o texto é baixado diretamente para o dispositivo e objetos subsequentes com recorte complexo devem interagir com esse texto.