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 :

Textures et mémoire


Sujet :

OpenGL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut Textures et mémoire
    Bonjour à tous,

    J'aurais une petite question, qui pourrait paraitre assez debile pour ceux qui ont une reponse clair et evidente, mais il faut vraiment m'oter un doute

    Lorsque l'on créé une texture (glGenTextures), puis que l'on envoi les pixels (glTexImage2D, par exemple), puis ensuite que l'on veut changer le contenu de cette texture (voir même sa taille, pourquoi pas), suffit-il de refaire appel à glTexImage2D (Bind puis TexImage)? Ou faut-il détruire cette texture au préalable?

    Pour synthétiser la question : Plusieurs TexImage sur le meme id sans delete provoquent-ils une fuite dans la mémoire de la carte graphique?

    Je pose cette question dans le forum OpenGL, mais je pense qu'elle peut s'appliquer aussi en Direct3D ou autre.
    Et si quelques petites infos (sur le fonctionnement de la partie du pipeline graphique en rapport avec le sujet) pouvaient venir etayer la réponse, je suis preneur!

    Merci d'avance et bonne soirée!

    Romu

  2. #2
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Je suis pas spécialiste et je peux me tromper sur je que je vais dire.

    Citation Envoyé par Romuuu Voir le message
    Lorsque l'on créé une texture (glGenTextures), puis que l'on envoi les pixels (glTexImage2D, par exemple), puis ensuite que l'on veut changer le contenu de cette texture (voir même sa taille, pourquoi pas)
    On gros pour te résumer Bind et Gen permet de 'creer une adresse' sur la mémoire ta carte graphique pour que tu puisse la sélectionner par la suite.

    Citation Envoyé par Romuuu Voir le message
    suffit-il de refaire appel à glTexImage2D (Bind puis TexImage)? Ou faut-il détruire cette texture au préalable?
    glTexImage2D envoi sur la mémoire de ta carte graphique la texture, et non tu n'es pas obligé t'utiliser Bind et Gen pour renvoyer la texture (j'ai je que je fais).

    Citation Envoyé par Romuuu Voir le message
    Bonjour à tous,
    Pour synthétiser la question : Plusieurs TexImage sur le meme id sans delete provoquent-ils une fuite dans la mémoire de la carte graphique?
    non , et puis 'fuite de mémoire' sur une carte graphique ? je pense pas que ça a un sens.
    Si c'est sur le même id il écrasera ancienne texture envoyer sur ta carte graphique.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    Merci pour ta réponse, c'est effectivement ce que je me disais.

    Bonne journee,
    Romu

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 158
    Billets dans le blog
    152
    Par défaut
    Bonjour,

    Citation Envoyé par Kannagi Voir le message
    non , et puis 'fuite de mémoire' sur une carte graphique ? je pense pas que ça a un sens.
    Si c'est sur le même id il écrasera ancienne texture envoyé sur ta carte graphique.
    Si si, cela a un sens, les fuites de mémoire sont possible (normalement, elles sont largement évités par les pilotes, mais bon ...)


    Pour ce genre de questions, rien de mieux que de se référé à la spécification:
    A GL implementation may vary its allocation of internal component res-
    olution based on any TexImage3D, TexImage2D see below, or TexIm-
    age1D see below parameter except target, but the allocation must not be
    a function of any other state, and cannot be changed once it is established.
    Allocations must be invariant; the same allocation must be made each time a
    texture image is speci ed with the same parameter values. These allocation rules also apply to proxy textures, which are described in section 3.8.7.
    Il est dit que si la taille, format (paramètres), de la texture ne sont pas modifié, alors il n'y a pas de nouvelle allocation.

    Mais, j'avoue que ce n'est pas trop clair non plus.

    Si vous voulez être sur, vous devez détruire la texture et la reconstruire. Mais, pour l'avoir fait plusieurs fois, je ne pense pas qu'il y ai de problème (tant que l'on garde les même paramètres)
    Sinon, vous pouvez utiliser les Frame Buffer Objects (qui sont nettement plus rapide de toute façon), enfin, cela dépend si l'image que vous voulez mettre en texture est généré par le GPU.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 10
    Par défaut
    Merci bien, j'y vois plus clair

    A bientot!

    Romu

  6. #6
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Bonjour,

    si vous voulez mettre à jour une texture existante, en conservant sa taille et son type, le mieux est de passer par glTexSubImage. C'est plus rapide que de recréer la texture avec glTexImage, et pas de soucis niveau gestion de la mémoire.

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

Discussions similaires

  1. Supprimer une texture en mémoire
    Par benjani13 dans le forum OpenGL
    Réponses: 1
    Dernier message: 01/03/2010, 00h50
  2. Réponses: 16
    Dernier message: 01/05/2008, 20h14
  3. Réponses: 22
    Dernier message: 03/08/2005, 00h28
  4. DirectGraphics Texture Zone Mémoire
    Par Cartman dans le forum DirectX
    Réponses: 2
    Dernier message: 02/03/2004, 21h33
  5. Chargement d'une texture a partir de la mémoire
    Par logramme dans le forum DirectX
    Réponses: 6
    Dernier message: 27/01/2003, 14h57

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