CODINGSDCC TUT'S PAR STEPHBB75 ★ H Line ★

Sdcc - 10 - H LineCoding Sdcc Tut's Par Stephbb75

C'est quoi HLine ?

C'est tout bêtement une fonction pour dessiner un peut plus vite une ligne horizontal, cette fonction vas aller plus vite que la fonction de dessin lineBresenham qui utilise PutPixelMode1, celle ci vas directement écrire si elle le peut le maximum d'octets directement en mémoire, sans avoir à faire les tests et opérations sur les octets pour l'affichage.

Dans le source, il y a la comparaison entre les deux méthode pour dessiner une ligne horizontale, et y'a pas photo !
Je ne vous présente ici que la fonction HLine que pour le mode 1, pour les autres modes il faut modifier le calcule de l'adresse du 1er point et le 1er while, en fonction du nombre de point dans l'octet, pour le reste allez voire dans le ZIP, il y a tout...
Explication :

  • Création d'un octet de référence en fonction de la couleur passé, c'est en fait cette octet que l'on écriras si on le peut, c'est la que l'on gagne bien en rapidité.
  • Met X1 et X2 dans le bon ordre, on dessine toujours de droite à gauche.
  • Calcule de la dresse mémoire du 1er point.
  • Temps que le point à dessiné n'est pas le 1er point d'un octet (aller voire comment les pixels sont organisés en mémoire) on utilise la fonction PutPixelMode1 (aucun gain de temps la).
  • Temps que l'on a encore 4 pixels à tracer on met en mémoire notre octet de référence (c'est la que l'on gagne du temps).
  • Temps que l'on est pas arrivé à x2, on trace les points avec la fonction PutPixelMode1 (aucun gain de temps la).
Bon, on peut encore aller plus vite, mais se seras pour une prochaine fois ;-)

// Tracé d'une ligne horizontal avec écriture mémoire directe quand c'est possible
// x1 : point de début en x de la ligne
// x2 : point de fin en x de la ligne
// y : position en y de la ligne
// nColor : couleur de la ligne
void HLine(int x1,int x2,unsigned char y, unsigned char nColor)
{
// creation de l'octet de référence couleur
// comme cela on pourras aller plus vite, en remplacent en mode 1 4 pixels d'un coup ci c'est possible !!!
unsigned char refColor = 0;
unsigned char *pAdrD; // adresse mémoire de départ de la ligne, elle est calculé quand on auras mis X1 et X2 dans le bonne ordre
int curX;
int addAdr;

// creation de l'octet de référence couleur
if(nColor & 1)
{
refColor |= 240; // = 128 + 64 + 32 + 16 -> 11110000
}
if(nColor & 2)
{
refColor |= 15; // = 8 + 4 + 2 + 1 -> 00001111
}

// on remet la ligne dans le bon sans...
if(x1>x2)
{
curX=x1;
x1=x2;
x2=curX;
}

// calcule de l'adresse de dépar de la ligne
pAdrD = (unsigned char *)((unsigned int)(0xC000 + ((y / 8) * 80) + ((y % 8) * 2048) + (x1 / 4)));

curX = x1;
addAdr = 0;
// dessine les pixel avant l'octet complet suivant à droite
while ( ((curX % 4) != 0) && (curX<=x2) )
{
PutPixelMode1( curX++, y, nColor );
addAdr = 1;
}

// Temps que octet complet on trace directement 4 point en mémoire
while ( (curX + 4) < x2 )
{
pAdrD[addAdr++] = refColor;
curX += 4;
}

// Dessine les pixels après octet complet
while ( curX <= x2 )
{
PutPixelMode1( curX++, y, nColor );
}
}


Voila, comme d'hab, le tout se trouve dans se ZIP, bonne écriture ;-)

stephbb75

AUTEUR: Stephbb75

Page précédente : Sdcc - 09 - Cls Ultra Rapide

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Sdcc - 21 - 3D - Face Plaine 2
» Coding » Sdcc - 07 - Ecrire un Fichier sur une Disquette
» Coding » Sdcc - 16 - 3D - Temps Reel Basic
» Coding » Sdcc - 13 - Animation Par Couleur et Scrool
» Coding » Sdcc - 08 - Swap d'Ecran
» Coding » Sdcc - 18 - 3D - Fil de Fer
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 355 millisecondes et consultée 1815 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.