Prise en charge des graphiques pseudo-vecteur
Important
La plateforme d’impression moderne est le moyen privilégié de Windows pour communiquer avec les imprimantes. Nous vous recommandons d’utiliser le pilote de classe IPP en boîte de Microsoft, ainsi que les applications de support d’impression (PSA), pour personnaliser l’expérience d’impression dans Windows 10 et 11 pour le développement de périphériques d’impression.
Pour plus d’informations, consultez le guide de conception de l’application pour la prise en charge de l’impression .
Les périphériques qui ne prennent pas en charge les graphiques vectoriels véritables peuvent tirer parti du support qu’Unidrv offre pour les graphiques pseudo-vecteur. Lorsque vous utilisez cette fonctionnalité, Unidrv télécharge des rectangles noirs pleins et des lignes horizontales et verticales directement sur un périphérique graphique non vectoriel, réduisant ainsi la surcharge de rendu de ces figures sur une surface raster. Cela réduit également la taille des données de sortie, ce qui peut améliorer le débit de l’imprimante pour les périphériques qui ne gèrent pas efficacement les données raster.
Pour bénéficier de cette fonctionnalité, un minipilote pour un périphérique graphique non vectoriel doit simplement prendre en charge la commande CmdRectBlackFill. Cette fonctionnalité est désactivée lorsque l’option Optimisation d’impression dans l’onglet Avancé des pages de propriétés de l’imprimante est désactivée.
La fonctionnalité de graphiques pseudo-vecteur intercepte les appels à DrvBitBlt, DrvStrokePath et DrvLineTo pour déterminer si un rectangle noir plein ou une ligne verticale ou horizontale doit être dessiné. Lorsque Unidrv reconnaît que la figure à dessiner est un rectangle valide (c’est-à-dire qu’il est noir plein, sans découpage complexe et n’utilise pas de ROP utilisant les bits de destination actuels), il est stocké dans un tableau de rectangles au lieu d’être dessiné sur la surface.
L’aspect le plus difficile de la fonctionnalité de graphiques pseudo-vecteur est d’éviter les problèmes d’ordre Z causés par les objets qui doivent être dessinés au-dessus d’objets déjà dessinés. Les objets au-dessus pourraient avoir besoin d’effacer ou de remplacer une partie d’un rectangle noir. Si le rectangle noir a déjà été téléchargé sur le périphérique, un objet dessiné plus tard sur la surface du système pourrait ne pas être dessiné correctement.
La solution à ce problème consiste à stocker temporairement un rectangle valide, plutôt que de le dessiner immédiatement sur la surface. Lorsqu’un nouvel objet doit être dessiné sur la surface, Unidrv vérifie s’il chevauche un rectangle noir. Si tel est le cas, la partie chevauchée du rectangle noir est dessinée sur la surface avant que le nouvel objet ne soit dessiné, maintenant ainsi l’ordre Z correct. Dessiner le rectangle en premier tient également compte de la possibilité que le nouvel objet à dessiner puisse avoir un ROP associé, y compris un qui interagit avec la destination.
En outre, il est possible que le nouvel objet à dessiner contienne un découpage complexe, de sorte que la figure résultante ne soit plus un rectangle. Lorsque le rendu de la bande ou de la page est terminé, les rectangles noirs restants peuvent être directement téléchargés sur le périphérique sans causer de problèmes d’ordre Z. Unidrv maintient une liste de jusqu’à 256 rectangles par bande, en concaténant les rectangles BitBlt lorsque cela est possible.
Problèmes de graphiques pseudo-vecteur
La fonctionnalité de graphiques pseudo-vecteur peut modifier l’ordre Z dans certaines situations, en particulier lorsque du texte est téléchargé directement sur le périphérique et que des objets ultérieurs avec un découpage complexe doivent interagir avec ce texte.