Partager via


Conseils sur les performances d’OpenGL

Ces pratiques de programmation optimisent les performances de votre application :

  • Utilisez glColorMaterial lorsqu’une seule propriété matérielle est rapidement variée (à chaque sommet, par exemple). Utilisez glMaterial pour les modifications peu fréquentes, ou lorsque plusieurs propriétés matérielles sont variées rapidement.

  • Utilisez glLoadIdentity pour initialiser une matrice, plutôt que de charger votre propre copie de la matrice d’identité.

  • Utilisez des appels de matrice spécifiques tels que glRotate, glTranslateet glScale, plutôt que de composer vos propres matrices de rotation, de traduction et d’échelle et d’appeler glMultMatrix.

  • Utilisez glPushAttrib et glPopAttrib pour enregistrer et restaurer les valeurs d’état. Utilisez les fonctions de requête uniquement lorsque votre application requiert les valeurs d’état pour ses propres calculs.

  • Utilisez des listes d’affichage pour encapsuler des modifications d’état potentiellement gourmandes en mémoire. Par exemple, placez tous les appels glTexImage requis pour spécifier complètement une texture (et peut-être les appels glTexParameter, glPixelStore, et glPixelTransfer également) dans une liste d’affichage unique. Appelez cette liste d’affichage pour sélectionner la texture.

  • Utilisez des listes d’affichage pour encapsuler les appels de rendu d’objets rigides qui seront dessinés à plusieurs reprises.

  • Pour réduire la bande passante réseau dans les environnements client/serveur, utilisez des évaluateurs même pour des pavages de surface simples.

  • Si possible, pour éviter la surcharge de GL_NORMALIZE, fournissez des normales de longueur unitaire. Étant donné que glScale nécessite presque toujours d’activer GL_NORMALIZE, évitez d’utiliser glScale lors de l’éclairage.

  • Si l’ombrage lisse n’est pas nécessaire, définissez glShadeModel sur GL_FLAT.

  • Utilisez un seul glClear appel par image, si possible. N’utilisez pas glClear pour effacer les petites sous-régions des tampons ; utilisez-le uniquement pour effacer complètement ou presque complètement la mémoire tampon.

  • Pour dessiner plusieurs triangles indépendants, utilisez un seul appel plutôt que plusieurs appels pour glBegin (GL_TRIANGLES) ou un appel à glBegin (GL_POLYGON). De la même façon:

    Pour dessiner un triangle unique, utilisez GL_TRIANGLES plutôt que GL_POLYGON.

    Utilisez un seul appel pour glBegin (GL_QUADS) au lieu d’appeler glBegin ( GL_POLYGON ) à plusieurs reprises.

    Utilisez un seul appel pour glBegin (GL_LINES) pour dessiner plusieurs segments de ligne indépendants, plutôt que d’appeler glBegin (GL_LINES) plusieurs fois.

  • En général, utilisez les formes vectorielles de commandes pour passer des données précomputées et utilisez les formes scalaires de commandes pour passer des valeurs calculées près de l’heure d’appel.

  • Évitez d’apporter des modifications en mode redondant, telles que la définition de la couleur sur la même valeur entre chaque sommet d’un polygone à nuances plates.

  • Lors du dessin ou de la copie d’images, désactivez la rastérisation et les opérations par fragment pour optimiser les ressources. OpenGL peut appliquer des textures aux images de pixels.