IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Lenteur de chargement de texture bitmap


Sujet :

OpenGL

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut Lenteur de chargement de texture bitmap
    Bonjour,

    Je code en c# et j'ai du faire mon propre loader de bitmap mais j'ai un problème, c'est très lent à charger car je doit inversé les pixels un à un pour ensuite passé le data à glTexImage2D.

    Si je n'inverse pas les pixels Rouge et Bleu j'obtient une image dont les couleurs sont inversé.

    Je me demande s'il y a une fonction openGl pour inversé le data ou pour lire dans le bon ordre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    public static uint LoadTexture(String fileName)
        {
            BitmapData bData = new BitmapData();
            Bitmap textureBMP;
    
            try
            {
                textureBMP = new Bitmap(fileName);
            }
            catch (ArgumentException)
            {
                return 0;
            }
            
            // Obtenir l'adresse du tampons de l'image
            Rectangle rect = new Rectangle(0, 0, textureBMP.Width, textureBMP.Height);
            bData = textureBMP.LockBits(rect,ImageLockMode.ReadOnly,textureBMP.PixelFormat);
            textureBMP.UnlockBits(bData);
    
            // Passer de BGR à RGB ( Inverser les couleurs )
            Color temp;
            Color newColor;
            for (int y = 0; y < textureBMP.Height; y++)
                for (int x = 0; x < textureBMP.Width; x++)
                {
                    temp = textureBMP.GetPixel(x, y);
                    newColor = Color.FromArgb(temp.B,temp.G,temp.R);
                    textureBMP.SetPixel(x, y, newColor);
                }
            
            // Affecter la texture
            uint[] texture = new uint[1];
    
            GL.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1);
            GL.glGenTextures(1, texture);
            GL.glBindTexture(GL.GL_TEXTURE_2D, texture[0]);
            
            GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, (int)GL.GL_RGB, textureBMP.Width, textureBMP.Height, 0, GL.GL_RGB, GL.GL_UNSIGNED_byte, bData.Scan0);
            GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
            GL.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
            
            return texture[0];             
        }
    Connaissez-vous certain truc pour charger les textures bitmap plus rapidement?

    Merci de votre aide

    DestinyWar

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2003
    Messages : 72
    Points : 43
    Points
    43
    Par défaut
    Après quelque heure de debogage et de multiple essais j'ai fini par trouver comment faire lire le format BGR d'un image BITMAP à glTexImage2D

    Lorsque le bitmap est en memoire par défaut, le rouge et le bleu sont inversé, donc c'est sous la forme BGR et il faut que OpenGL puisse le lire de facon correct alors j'ai trouvé le paramètre....

    Quelque heure de recherche et de test pour finir par comprendre qu'on pouvais dire à glTexImage2D de lire le data en BGR.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    glTexImage2D(GL_TEXTURE_2D, 0, 3, textureBMP.Width, textureBMP.Height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, bData.Scan0);
    Je l'indique pour aider toute personne qui chercherais à trouver un moyen tout comme moi à lire les données correctement dans le data

    DestinyWar

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 12/06/2006, 12h06
  2. [VBA-E] Lenteur de chargement d'un fichier
    Par Amoust dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 01/06/2006, 09h08
  3. Lenteur de chargement d'un formulaire
    Par Rcanada dans le forum Access
    Réponses: 2
    Dernier message: 19/05/2006, 08h45
  4. Chargement de Texture
    Par Glosialabolas dans le forum OpenGL
    Réponses: 5
    Dernier message: 27/01/2006, 16h40
  5. chargement de texture avec la SDL
    Par Fry dans le forum OpenGL
    Réponses: 7
    Dernier message: 27/05/2004, 15h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo