Réponses:
Utilisez VBO plutôt que glStart () / glEnd (). Cela économise des cycles de transfert des données vers la mémoire du GPU.
glStart()/glEnd()
.
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.
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)
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.
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.
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.
N'utilisez pas glGet * lorsque vous pouvez accéder à des variables locales, par exemple:
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.
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.