//------------------------------------------------------------------------------
// Charge une image BMP 24 bits
//------------------------------------------------------------------------------

int LoadBMP(char *filename, int nb)
 {
    GLubyte     *image;
    GLubyte     Header[0x36];
    GLuint      DataPos, imageSize;
    GLsizei     Width,Height;
    
    // Lit le fichier et son header
    FILE * fichier = fopen(filename,"rb");
    if (!fichier) return -1;
    if (fread(Header,1,0x36,fichier)!=0x36) EXIT;
    if (Header[0]!='B' || Header[1]!='M')   EXIT;
    if (CTOI(Header[0x1E])!=0)              EXIT;
    if (CTOI(Header[0x1C])!=24)             EXIT;

    // Récupère les infos du fichier
    DataPos     = CTOI(Header[0x0A]);
    imageSize   = CTOI(Header[0x22]);

    // Récupère les infos de l'image
    Width   = CTOI(Header[0x12]);
    Height  = CTOI(Header[0x16]);    
    
    // !!!!
    if (imageSize==0)    imageSize=Width*Height*3;
    if (DataPos==0)     DataPos=0x36;

    // Charge l'image
    image = (GLubyte *) malloc ( imageSize );
    if (fread(image,1,imageSize,fichier)!=imageSize) 
     {
        free (image);
        EXIT;
     }
    
    // Inverse R et B
    int t, i;
    for ( i = 0; i < imageSize; i += 3 )
     {
        t = image[i];
        image[i] = image[i+2];
        image[i+2] = t;
     }

    // Traitements de la texture par OpenGL
    glPixelStorei(GL_UNPACK_ALIGNMENT,1);        // Construit la texture sous forme de données
    glGenTextures(nb, &TexNum[nb]);              // Génère une ID pour la texture OpenGL                                             
    
    glBindTexture(GL_TEXTURE_2D, TexNum[nb]);    // Pointe la texture
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);

    // Génère la texture OpenGL en mémoire
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, Width, Height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

    fclose (fichier);
    free (image);
    return TexNum[nb];
 }