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 :

Buffer objects et optimisation


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut Buffer objects et optimisation
    Bonjour,

    ayant appris (un peu dans la douleur ^^) les rudiments d'OpenGL au cours d'un projet informatique dans le cadre de mes études et une fois qu'on a dut le rendre j'ai voulut aller plus loin dans le domaine et recommencer un projet personnel. En essayant notamment de corriger les graves manques d'optimisation du programme.
    Et je me suis rendu compte q'on faisait un truc stupide: nous rechargions le buffer à envoyer au shader avant de dessiner chaque objet (même si par la suite on dessinait un objet en utilisant le même mesh, et donc en chargeant les mêmes données dans le buffer). J'ai donc essayer d'envisager divers moyens pour optimiser ça.
    On en arrive donc à ma question: vaut-il mieux charger, une seule fois, au début du programme, tous les mesh dans un seul buffer et ainsi éviter de recharger le buffer à chaque fois qu'on change de mesh (et en utilisant les indices de départ - appelés "Base Index" sur le site d'openGL- pour dessiner), où est-ce que ça risque de trop surcharger la mémoire?

    Merci d'avance de votre réponse.

    PS: en vérité la question posée est plutôt: quel est le coût réel des fonctions OpenGL qui gèrent la transmission de données au shader et leur utilisation? Par exemple, je me suis dis qu'il valait mieux utiliser plusieurs programmes shaders et les charger dans le pipeline avec glUseProgram plutôt que de mettre pleins de conditions et de variables uniformes dans le code GLSL, mais est-ce vraiment le cas?

    PS bis: il va sans dire que je parles ici des versions d'OpenGL postérieures à la version 3.0

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


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

    L'idée c'est de charger les modèles (création des buffers / transfert données sur le GPU) au chargement d'un niveau (ou d'une scène). Si vous avez qu'une scène vous chargez tout, sans trop réfléchir (sauf si vous essayez d'afficher une très très grande zone avec trop d'objets qui diffèrent).
    Si un objet apparait deux fois dans une scène, il ne doit y avoir qu'un seul buffer (qui sera donc utiliser deux fois).

    Le second conseil, c'est d'éviter les changements d'états. Plus précisément, c'est faire le moins de bind (shaders / buffer / ...) possible. Pour cela, il faut organiser sa scène dans un arbre hiérarchique et le trier afin d'éviter le plus possible les changements.

    Les shaders, je pense qu'il faille tous les charger / compiler au début du programme. Cela n'a pas un gros impact en mémoire.

    Pour connaître les différentes parties qui vous ralentisse, il faut utiliser un profiler : gDEBugger ou NVIDIA PerfHUD. On ne peut pas dire quelles fonctions coutent plus ou moins (même si on peut le deviner), sachant que cela dépend en grande partie des pilotes. Toutefois, il arrive souvent que ce soit les transferts CPU -> GPU qui ralentisse tout le pipeline (je dis bien, généralement).
    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 du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 7
    Par défaut
    Merci de votre réponse.

    Je vais m'intéresser aux profiler de plus prêt.

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

Discussions similaires

  1. Vertex Buffer Object et performance
    Par ciberrique dans le forum OpenGL
    Réponses: 30
    Dernier message: 07/07/2008, 15h38
  2. Vertex Buffer Object avec de grands maillages
    Par Vinc35 dans le forum OpenGL
    Réponses: 8
    Dernier message: 25/10/2007, 19h46
  3. [Problème] Vertex Buffer Object
    Par Soznor dans le forum OpenGL
    Réponses: 20
    Dernier message: 19/07/2007, 18h44
  4. Performance du frame buffer object (FBO)
    Par Grosbenji dans le forum OpenGL
    Réponses: 4
    Dernier message: 24/01/2007, 15h19
  5. Frame buffer object
    Par Pen² dans le forum OpenGL
    Réponses: 6
    Dernier message: 14/11/2005, 10h17

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