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

DirectX Discussion :

Charger beaucoup de grosses textures -> plantage


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 80
    Par défaut Charger beaucoup de grosses textures -> plantage
    Bonjour,
    Je suis en train de creer un jeu avec DirectX et pour l'accelerer un peu, je charge toutes mes textures au début. Actuellement, j'utilise des .png et je viens de rajouter un niveau. Mon probleme c'est que j'ai maintenant trop de texture et j'ai un D3DERR_OUTOFVIDEOMEMORY au bout d'un moment lorsque je charge mes textures...
    J'ai donc décider de convertir mes .png en .gif et là,
    D3DXCreateTextureFromFileEx me renvoie D3DXERR_INVALIDDATA dès la première image... pourquoi?
    Et si quelqu'un a une solution pour que je puisse garder mes .png, je suis preneur.

    merci d'avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je comprends pas trop ce que ça va changer d'avoir des gif à la place de png. Et je ne pense pas que D3DX sache lire les gif, d'où ton erreur.

    Tu ferais mieux d'utiliser des formats de texture optimisés, genre DXTC si ta carte le supporte.

    Et puis il faut le faire quand même pour exploser la mémoire vidéo en textures, ton niveau est énorme ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 80
    Par défaut
    Je me disais qu'en utilisant des gif, je réduirais la taille en KO de mes images et aussi la complexité mais apparement, ça ne donnera rien: j'ai d'abord converti en gif puis je suis revenu en png; ça a réduit leur taille de plus de la moitié mais j'ai encore eu ces problèmes de mémoire.

    Pour info, je charge 35 textures dont la plupart ont une résolution superieure à 720x1000. elles sont donc de grande taille (la plus grande fait 1248x1152).
    Je ne voit malheureusement pas comment diminuer ce nombre ni leur taille car chaque image est un spriteSheet d'ennemi ou du hero et les niveaux sont optimisés au max...
    Il n'y a pas moyen d'augmenter la mémoire allouée?

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je me disais qu'en utilisant des gif, je réduirais la taille en KO de mes images et aussi la complexité mais apparement, ça ne donnera rien: j'ai d'abord converti en gif puis je suis revenu en png; ça a réduit leur taille de plus de la moitié mais j'ai encore eu ces problèmes de mémoire.
    La taille des fichiers sur le disque importe peu, c'est la taille des textures en mémoire vidéo qu'il faut optimiser. Tu peux très bien avoir un gif, un png ou un bmp, si ta texture reste en ARGB 32 bits ça ne changera rien. Comme je te l'ai dit tu peux utiliser les formats compressés : avec le DXT5 les textures peuvent être 4 fois plus petites.
    Si c'est de la 2D, tu peux aussi éviter de créer les niveaux de mipmap.

    Pour info, je charge 35 textures dont la plupart ont une résolution superieure à 720x1000. elles sont donc de grande taille (la plus grande fait 1248x1152).
    Je ne voit malheureusement pas comment diminuer ce nombre ni leur taille car chaque image est un spriteSheet d'ennemi ou du hero et les niveaux sont optimisés au max...
    C'est quel genre de niveau ? Tu as une capture d'écran ? Parce que bon, tu pourrais peut-être réduire la taille de tes textures, à moins d'avoir besoin d'une très bonne qualité.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    'Alut.

    Il te faut absolument travailler avec des textures plus petites et/ou compressées et/ou ne les envoyer vers la carte graphique uniquement lorsque c'est nécessaire.

    A mon avis, ta carte graphique n'a pas assez de mémoire pour ces énormes textures. Et tu ne peux pas augmenter la taille de la mémoire de ta carte graphique.

    Pour info, je charge 35 textures dont la plupart ont une résolution superieure à 720x1000. elles sont donc de grande taille (la plus grande fait 1248x1152).
    Je ne voit malheureusement pas comment diminuer ce nombre ni leur taille car chaque image est un spriteSheet d'ennemi ou du hero et les niveaux sont optimisés au max...
    C'est quel genre de niveau ? Tu as une capture d'écran ? Parce que bon, tu pourrais peut-être réduire la taille de tes textures, à moins d'avoir besoin d'une très bonne qualité.
    Si ton niveau ne s'affiche pas sur l'écran dans son intégralité, tu peux aussi découper tes textures, et ne les envoyer que lorsque c'est nécessaire.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 80
    Par défaut
    le probleme c'est que mon niveau, ce n'est pas une image toute bete, c'est une page regroupant tous les types de décors. Par exempe une montagne dans mon jeu est crée par une matrice où chaque élément correspond à un rectangle du niveau. donc meme si mon niveau est tres grand, la taille de ma texture sera toujours la meme.
    Ci joint, deux images: par exemple, la texture est l'image Niveau.jpg et l'image est Ecran.jpg.
    Cela vous donnera une bonne idée de ce que je fais.
    Sinon, j'ai remarqué que sur un autre ordi, ça plantait aussi. pourtant, l'autre c'est un bete de course avec Vista et une bonne dose de memoire vidéo...
    Ca vient donc peut etre d'autre chose.
    Images attachées Images attachées   

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    OK.

    Pour info, ma carte graphique ne supporte pas les textures supérieures à 4096x4096 ( c'est une 7800GTX (mais certes que 256Mo)). Autre info une texture 4096x4096 en 32bits non compressés occupe 64Mo!! (si pas d'erreurs dans mes calculs). Les textures qu tu utilises sont vraiments énormes!

    tu peux aussi découper tes textures, et ne les envoyer que lorsque c'est nécessaire.
    En gros pourquoi ne pas avoir une petite texture pour l'herbe, une autre pour l'herbe avec des fleurs, etc... et ne les envoyers vers ta carte graphique que lorsque c'est nécessaire? Garde-les en mémoires systeme et envoye-les vers la mémoires vidéo quand tu en as besoin.

    Enfin sache que la doc du SDK directx conseille d'utiliser des textures 256x256 ou plus petites si possible (rubrique performance optimization).

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    35 tilesets de l'ordre de 1000x1000, si on prend 32x32 pour une tile, ça fait... environ 35000 tiles. Ca fait pas un peau beaucoup ? Et as-tu toujours besoin de tes 35 tilesets en même temps ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/04/2014, 10h16
  2. [Texture] charger simplement des png?
    Par kacedda dans le forum OpenGL
    Réponses: 6
    Dernier message: 08/03/2006, 08h40
  3. copier une petite texture sur une grosse texture
    Par gaut dans le forum DirectX
    Réponses: 5
    Dernier message: 15/10/2004, 22h12
  4. Grosses, tres grosses textures
    Par Invité(e) dans le forum DirectX
    Réponses: 8
    Dernier message: 06/10/2004, 18h50
  5. Charger 16x16 sur une texture 256x256
    Par Johngame dans le forum DirectX
    Réponses: 4
    Dernier message: 06/03/2004, 17h16

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