nicolos
Messages postés11Date d'inscriptionmardi 27 janvier 2004StatutMembreDernière intervention 7 décembre 2004
-
3 sept. 2004 à 09:25
cs_kelly
Messages postés55Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 9 septembre 2004
-
3 sept. 2004 à 12:04
Bonjour tout le monde
Je voudrais savoir comment la fonction FillSolidRect de MFC procède afin de dessiner un rectangle aussi rapidement (sans voir l'enchaînenement des pixels s'afficher un par un) ?
La question est aussi valable pour la fonction BitBlt, etc...
Lorsque je fais mon rectangle avec SetPixel dans deux boucles x et y, c'est long, trop long ! :sleepy)
Aussi, quelle est la différence entre les classes CDC, CClientDC et CPaintDC ?
cs_kelly
Messages postés55Date d'inscriptionjeudi 1 mai 2003StatutMembreDernière intervention 9 septembre 2004 3 sept. 2004 à 12:04
Les fonctions du gdi telles que celles que tu as citées (ce sont des fonctions de la bibliotheque gdi avant d'etre encapsulées dans les mfc) sont très optimisées en arrière-plan, et cela malgré leur lourdeur apparente (emploi de brushes et de pens évolués).
Sans en avoir la preuve formelle, je pense que le coeur du gdi repose sur du code machine très optimisé (écrit en assembleur et profitant du mmx ou du simd quand cela est possible) et probablement exploitant certaines fonctions 2D des cartes graphiques, capables par exemple de dessiner en hardware des régions et meme du texte.
Sans parler de la procédure de verrouillage/déverrouillage des DC et de l'accès aux pilotes de la carte graphique au début et a la fin de chaque opération graphique, ce qui fait que ta routine qui fait du pixel par pixel passe son temps à attendre des réactions des couches inférieures du sous système vidéo.