#include #include "global.h" #include "sdlscreen.h" void Pixel_SDL (word X,word Y,byte Couleur) /* Affiche un pixel de la Couleur aux coords X;Y à l'écran */ { *(((Uint8 *)Ecran_SDL->pixels) + Y * Ecran_SDL->pitch + X)=Couleur; //SDL_UpdateRect(Ecran_SDL,X,Y,0,0); } byte Lit_Pixel_SDL (word X,word Y) /* On retourne la couleur du pixel aux coords données */ { Uint8 * p = ((Uint8 *)Ecran_SDL->pixels) + Y * Ecran_SDL -> pitch + X * Ecran_SDL -> format -> BytesPerPixel; return *p; } void Effacer_Tout_l_Ecran_SDL (byte Couleur) { puts("Effacer_Tout_l_Ecran_SDL non implémenté!"); } void Afficher_partie_de_l_ecran_SDL (word Largeur,word Hauteur,word Largeur_image) /* Afficher une partie de l'image telle quelle sur l'écran */ { byte* Dest=Ecran; //On va se mettre en 0,0 dans l'écran (EDI) byte* Src=Principal_Decalage_Y*Largeur_image+Principal_Decalage_X+Principal_Ecran; //Coords de départ ds la source (ESI) int dx; for(dx=Hauteur;dx!=0;dx--) // Pour chaque ligne { // On fait une copie de la ligne memcpy(Dest,Src,Largeur); // On passe à la ligne suivante Src+=Largeur_image; Dest+=Largeur_ecran; } SDL_UpdateRect(Ecran_SDL,0,0,Largeur,Hauteur); } void Block_SDL (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur) /* On affiche un rectangle de la couleur donnée */ { SDL_Rect rectangle; rectangle.x=Debut_X; rectangle.y=Debut_Y; rectangle.w=Largeur; rectangle.h=Hauteur; SDL_FillRect(Ecran_SDL,&rectangle,Couleur); SDL_UpdateRect(Ecran_SDL,Debut_X,Debut_Y,Largeur,Hauteur); } void Block_SDL_Fast (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur) /* On affiche un rectangle de la couleur donnée */ { SDL_Rect rectangle; rectangle.x=Debut_X; rectangle.y=Debut_Y; rectangle.w=Largeur; rectangle.h=Hauteur; SDL_FillRect(Ecran_SDL,&rectangle,Couleur); } void Pixel_Preview_Normal_SDL (word X,word Y,byte Couleur) /* Affichage d'un pixel dans l'écran, par rapport au décalage de l'image dans l'écran, en mode normal (pas en mode loupe) Note: si on modifie cette procédure, il faudra penser à faire également la modif dans la procédure Pixel_Preview_Loupe_VESA_LFB. */ { Pixel_SDL(X-Principal_Decalage_X,Y-Principal_Decalage_Y,Couleur); } void Pixel_Preview_Loupe_SDL (word X,word Y,byte Couleur) { puts("Pixel_Preview_Loupe_SDL non implémenté!"); } void Ligne_horizontale_XOR_SDL(word Pos_X,word Pos_Y,word Largeur) { //On calcule la valeur initiale de EDI: byte* edi=Pos_Y*Largeur_ecran+Pos_X+Ecran; //On met dans ECX le nombre de pixels à traiter: int ecx; for (ecx=0;ecxpixels; }