Conseils d'optimisation d'OpenGL [fermé]


26

Quels conseils ou astuces avez-vous pour rendre OpenGL plus efficace?

Réponses:


16

Utilisez VBO plutôt que glStart () / glEnd (). Cela économise des cycles de transfert des données vers la mémoire du GPU.


7
Plus que cela, glBegin et glEnd ont été dépréciés dans les révisions ultérieures et ont été complètement supprimés (et ne fonctionneront donc pas) dans les versions 3.x et supérieures. Si vous demandez un contexte OpenGL 3.x, vous ne pourrez pas les utiliser complètement.
Slurps Mad Rips

DirectX vous impose cela, il n'a pas d'équivalent glStart()/glEnd().
knight666

@SAHChandler Je ne le savais pas. Je ne savais pas que c'était obsolète.
MrValdez

3
@SAHChandler: Ça craint! J'ai appris tout mon dessin avec glBegin () et glEnd (). Noooo !!!

8

La pointe de profil standard, profil, profil s'applique tout aussi bien ici, bien que les outils soient légèrement différents.

gDEBugger est excellent pour vous aider à voir exactement ce qui se passe sous le capot. C'est cher, cependant.


2
Je voulais juste ajouter qu'il est maintenant gratuit.
DMan

8

Ce sont des références de documentation d'Apple sur OpenGL, mais chaque petit geste aide à droite? ;)

Optimisation des performances OpenGL: les bases de l'
optimisation du débit de données OpenGL sous OS X

(Ce dernier est un exemple d'application)
Optimisation Vertex

Il existe également un très grand nombre de vidéos disponibles sur le sujet (également d'Apple) qui parlent des extensions OpenGL. Certains d'entre eux sont spécifiques à OS X, mais quelques autres sont plus généralisés et pourraient très probablement être appliqués à Windows et Linux.

Vous pouvez trouver les vidéos ici . Vous avez cependant besoin d'iTunes et d'un compte Apple pour les voir (mais ils sont gratuits!: D)


7

Eh bien, cela dépend vraiment de ce que vous prévoyez de faire, mais voici les bases:

  • Votre CPU est très précieux tandis que votre GPU est une bête affamée. Offrez autant que possible au GPU. De nos jours, vous pouvez le faire avec d'excellentes bibliothèques comme OpenCL, CUDA et Thrust.

  • Faites votre éclairage dans un shader. Non seulement cela vous aidera à conserver votre santé mentale, mais cela vous permettra de refroidir des choses très intéressantes comme les shaders de toon et l' éclairage différé .

  • Les particules sucent. Même lorsque vous utilisez des sprites de points OpenGL.


6

Minimisez vos changements d'état. Sur de nombreuses plates-formes, chaque changement d'état vide potentiellement le pipeline. Il est préférable de regrouper des articles similaires et de changer d'état une fois.


4
glEnable(GL_CULL_FACES);

Simple doublure qui applique l'abattage de la face arrière. Ceci est excellent pour réduire le nombre de polygones. Examinez également l'abattage de troncs / occlusion pour réduire le nombre de poly.

Une autre chose à examiner est SIMD pour vos vecteurs et quaternions (principalement utilisés dans les rotations de caméra). Si vous ne voulez pas jouer avec ASM, consultez libSIMD qui est une excellente bibliothèque pour gérer SIMD en C.


4

N'utilisez pas glGet * lorsque vous pouvez accéder à des variables locales, par exemple:

  • Ne pas interroger la taille des textures depuis OpenGL, les stocker lors du chargement dans les variables
  • Ne pas interroger les largeurs de ligne / tailles de points depuis OpenGL lorsque vous pouvez stocker les modifications dans votre application

Ces appels sont vraiment lents

Déplacez les éléments inutilisés à l'extérieur de la clause glBegin - glEnd (que ce soit glColor ou glNormal ou autre) si elle ne change pas à l'intérieur. OpenGL est une machine à états, il utilise la dernière valeur.


3

Minimiser les commandes OpenGL est la clé. Vous devez donc regrouper toutes les commandes de dessin. Pour les jeux 2D, c'est une bonne idée d'utiliser Altas Texture et de dessiner tous les sprites partageant la même texture dans une seule commande opengl.


Faites attention. Des lots de plus en plus petits sont utiles, mais en fonction de la plate-forme cible, des lots «trop gros» diminueront les performances.
Andreas

3

Lot, lot, lot !! (Ab) utiliser le GPU pour rendre autant que possible dans chaque appel de tirage. Les jeux sont généralement limités par la quantité de changements d'état, pas tant par la quantité de triangles.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.