Conseils d'optimisation d'OpenGL [fermé]

26

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

Thyrgle
la source

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.

MrValdez
la source
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.

Tetrad
la source
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)

Slurps Mad Rips
la source
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.

chevalier666
la source
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.

Dennis Munsie
la source
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.

Krankzinnig
la source
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.

Kromster dit soutenir Monica
la source
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.

Ellis
la source
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.

Hannesh
la source