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 :

Quand utiliser glTexParameter réellement ?


Sujet :

OpenGL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Par défaut Quand utiliser glTexParameter réellement ?
    Bonjour,

    Quand est-il nécessaire de régler les paramètres d'une texture avec "glTexParameter" ?

    1) Avant la création d'une texture (glTexImage2D) ?

    2) Juste après la création ?

    3) A chaque boucle de rendu si utilisation de textures avec des paramètres différents ?

    J'avoue que le fait qu'OpenGL soit une "machine à états" m'embrouille un peu et j'imagine que a a encore un petit rapport ici.

    Si quelqu'un pouvait éclairer ma lanterne, ça serait sympa

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 054
    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 054
    Billets dans le blog
    141
    Par défaut
    Bonjour,

    C'est juste après le glTexImage2D et cela n'est nécessaire qu'une fois par texture.
    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.

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 604
    Par défaut
    Salut,

    Si le principe de la machines à état t'embète, ne cherche pas à optimiser tes états, renvois les bêtements à chaque frame. Par ex. tu te fais une class Texture qui, à chaque fois que la texture est bindé, renvois les glTexParameters (Attention ! ne fait pas un glTexImage à chaque frame par contre !). Le driver optimise de toute façon les changements d'état en ne renvoyant au GPU que ceux qui ont réelement changé.
    C'est vrai qu'il y a un impacte sur les perfs, mais avec les cartes actuelles (et même un peu plus vielle) il n'est visible que si tu as plusieurs centaines/milliers de changement par frame.

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 054
    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 054
    Billets dans le blog
    141
    Par défaut
    Citation Envoyé par pyros Voir le message
    Salut,

    Si le principe de la machines à état t'embète, ne cherche pas à optimiser tes états, renvois les bêtements à chaque frame. Par ex. tu te fais une class Texture qui, à chaque fois que la texture est bindé, renvois les glTexParameters (Attention ! ne fait pas un glTexImage à chaque frame par contre !). Le driver optimise de toute façon les changements d'état en ne renvoyant au GPU que ceux qui ont réelement changé.
    C'est vrai qu'il y a un impacte sur les perfs, mais avec les cartes actuelles (et même un peu plus vielle) il n'est visible que si tu as plusieurs centaines/milliers de changement par frame.
    Sommes-nous surs que l'on peut se fier aux pilotes ? Sachant que nous avons au minimum trois grands constructeurs avec leurs propres pilotes et que pour les appareils mobiles, la légèreté et l'économie sera recherchée ?
    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 émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 604
    Par défaut
    Disons que la perte de perf est très souvent négligeable devans le temps de debuggage gagné et qu'il y a souvent des optim bien plus rentable que de minimiser les changements d'états . Surtout lorsqu'il s'agit d'un débutant avec, par conséquent, une scène assez simple.
    Je compte plus les (vieux) codes avec un unique glEnable(GL_LIGHT0) à l'init du programme "pour éviter de le renvoyer à chaque frame" et une grosse boucle glBegin(GL_TRIANGLES) pour le rendu...

    Après pour du dev un peu plus pousser (genre implémenter un scenegraph), il devient bien sûr plus interessant d'y penser dès le début dans l'architecture (avec par ex. une pass de collection et une pass de rendu).

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Par défaut
    Bonsoir messieurs et merci pour votre aide.

    Donc j'avais tort. Moi qui pensais qu'il fallait les régler avant la création ...

    Par contre, est-ce moi qui ai du mal ou vous est en contradiction ?
    D'un côté, LittleWhite, tu dis que
    ...ce n'est nécessaire qu'une fois par texture...
    et de l'autre, Pyros, tu dis
    ...tu te fais une class Texture qui, à chaque fois que la texture est bindé, renvois les glTexParameters (Attention ! ne fait pas un glTexImage à chaque frame par contre !).
    Bon, j'ai bien compris que je ne devais pas ré-appeler "glTexImage" (c'est même logique). Peut-être qu'avec la précision suivante vous pourriez mieux m'aider:

    En admettant que j'ai la même texture à plaquer sur deux meshes différents, et que le "TextureWrapMode" désiré soit différent sur chaque mesh (ex: "Clamp" et "Repeat").
    Est-il possible d'utiliser la même texture en mémoire (unique par son indice), mais juste modifier le paramètre concerné avec "glTexParameter", juste avant de dessiner chaque mesh (sans unbind, ni bind vers autre texture donc) ?
    Si j'en crois pyros, oui (et ça m'arrangerait d'ailleurs). Sinon, ça veut dire que pour une même image mais avec paramètres différents, je devrais créer deux textures différentes .

    Pour info, j'utilise bien un système de SceneGraph (arbre de nœuds avec relations parent/enfant et positionnement/rotation local pour les entités).
    En tous cas, je ne pensais pas qu'OpenGL virait automatiquement les réglages superflus,
    Merci pour l'info ... et pour votre aide

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 054
    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 054
    Billets dans le blog
    141
    Par défaut
    ...ce n'est nécessaire qu'une fois par texture...
    Dans la théorie, les cas de code minimaux. Après, il peut arriver qu'on le fasse plusieurs fois, comme dans votre exemple.

    Est-il possible d'utiliser la même texture en mémoire (unique par son indice), mais juste modifier le paramètre concerné avec "glTexParameter", juste avant de dessiner chaque mesh (sans unbind, ni bind vers autre texture donc) ?
    Oui

    En tous cas, je ne pensais pas qu'OpenGL virait automatiquement les réglages superflus
    Oh-la, non, pas dans OpenGL (du moins, je n'ai rien lu dans la spécification). C'est juste une optimisation du pilote qui implémente OpenGL.
    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.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 53
    Par défaut
    Simple et efficace ... j'ai bien compris maintenant !
    Encore merci pour la rapidité et le contenu de l'aide

Discussions similaires

  1. [MySQL 5.0] RAND() inefficace quand utilisation de GROUP BY
    Par Takusen dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/11/2006, 15h39
  2. [POO] Quand utiliser une classe ?
    Par Gwipi dans le forum Langage
    Réponses: 8
    Dernier message: 05/05/2006, 14h31
  3. Réponses: 10
    Dernier message: 08/02/2005, 10h52
  4. Écriture dans un DBgrid quand utilise un query comme dataset
    Par dcayou dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 22h22
  5. [Procédure Stocké] Quand utiliser ?
    Par touhami dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/03/2004, 09h09

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