Probleme en prog SDL.h

Signaler
Messages postés
3
Date d'inscription
mardi 19 juillet 2005
Statut
Membre
Dernière intervention
30 mai 2007
-
Messages postés
3
Date d'inscription
mardi 19 juillet 2005
Statut
Membre
Dernière intervention
30 mai 2007
-
Salut a tous.
Je voudrez savoir pourquoi mon va plus vite au TEMP 2 qu'au TEMP 1

#include <SDL/SDL.h>
#include <stdio.h>
#include <time.h>
#include <string.h>

/* surface qui sert à l'affichage dans la mémoire vidéo */
SDL_Surface *ecran = NULL;

//On crée une surface dans la mémoire système
SDL_Surface *Virtuel = NULL;

Uint16 color[1024*768];

int main(int argc, char **argv)
{
/* SDL_INIT_VIDEO si besoin de seulement la vidéo */
if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
{
printf("Error: %s\n", SDL_GetError());
return 1;
}
ecran = SDL_SetVideoMode(1024, 768, 16, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_HWACCEL | SDL_FULLSCREEN);

if (ecran == NULL)
{
printf("Error: %s\n", SDL_GetError());
return 1;
}

int i;
int j;
int k;
int l;
int co1;
int co2;
int co3;

//TEMP 1

for (k = 0; k < 80; k++)
{
    co1 = rand() % 255;
    co2 = rand() % 255;
    co3 = rand() % 255;

    Uint16 rgb = SDL_MapRGB(ecran->format, co1, co2, co3);  
    for (i=0; i<1024 ; i++)
    {
        for (j=0; j<768 ; j++)
        {
            l = j*1024 + i;
            color[l] = rgb;
        }
    }

          
    memcpy((Uint16*)(ecran->pixels),color,1024*768*2);  
    SDL_Flip(ecran);
}

//TEMP 2

for (k = 0; k < 80; k++)
{
    co1 = rand() % 255;
    co2 = rand() % 255;
    co3 = rand() % 255;

    Uint16 rgb = SDL_MapRGB(ecran->format, co1, co2, co3);  
    for (i=0; i<1024*768 ; i++) color[i] = rgb;
 

          
    memcpy((Uint16*)(ecran->pixels),color,1024*768*2);  
    SDL_Flip(ecran);
}

}

@++

2 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Ton programme devrait meme pas marcher. Je sais pas si t'as conscience du fait que tu alloues une qté de mémoire monstrueuse dans ta pile:

Uint16 color[1024*768];  ce qui représente plus d'1Mo. Donc ton programme devrait crasher directement.

Dans le cas 2, tu fais moisn de calcul, donc ca va plus vite. Logique implacable en info.
Mais je comprends pas pk tu passes par un tableau intermédiaire. Cette version irait encore plus vite:

for (k = 0; k < 80; k++)
{
    co1 = rand() % 255;
    co2 = rand() % 255;
    co3 = rand() % 255;

    Uint16 rgb = SDL_MapRGB(ecran->format, co1, co2, co3);  
    Uint16 * ptr = (Uint16*)(ecran->pixels);

    for (i=0; i<1024*768 ; i++)
        ptr[i] = rgb;
 
    SDL_Flip(ecran);
}
Messages postés
3
Date d'inscription
mardi 19 juillet 2005
Statut
Membre
Dernière intervention
30 mai 2007

Tout simplament par cs que je fais comme si je calcule une image pixel par pixel.for(x 0; x < RX; x++) for (y 0; y< RY, y++) ptr[RX*y+x] = couleur_corespondant[RX*y+x];
mon objectif est de pouvoir fair une comande:
void dot( int x, int y, unsigned int color);

dout

//TEMP 1

for (k = 0; k < 80; k++)
{
    co1 = rand() % 255;
    co2 = rand() % 255;
    co3 = rand() % 255;

    Uint16 rgb = SDL_MapRGB(ecran->format, co1, co2, co3);  
    for (i=0; i<1024 ; i++)
    {
        for (j=0; j<768 ; j++)
        {
            l = j*1024 + i;
            color[l] = rgb;
        }
    }

          
    memcpy((Uint16*)(ecran->pixels),color,1024*768*2);  
    SDL_Flip(ecran);
}

@++