2010-06-29 4 views
1

J'ai la situation de vide sanitaire en utilisant des tampons de sommet en OpenGL sur iPad: - rendre certains objets avec 30 FPS - supprimer les objets et créer de nouveaux (tuer toutes les entités et spawn autres) - rendre la nouvelle ObjetsOpengGL vertex buffer ES

Le FPS chute à 10 pendant quelques secondes et revient lentement à 30. J'ai utilisé quelques temporisateurs et j'ai vu que le temps de calcul passe de 30ms à 100ms pendant quelques secondes. L'heure de mise à jour n'augmente que lorsque vous chargez de nouveaux objets (une image) et que l'envoi vers l'heure de rendu est constant. Je pense que le problème est avec la mise en cache des buffers de vertex. Existe-t-il un moyen de forcer la mise en cache au lieu d'attendre que OpenGL le fasse? Avez-vous d'autres opinions sur ce problème?

+0

Est-ce que quelqu'un connaît la limite de mémoire pour les VBO sur PowerVR SXG 535? Il peut aussi s'agir d'un problème de mémoire vidéo avec la création de nouvelles VBO avant de supprimer les anciennes – Felics

Répondre

2

Une autre option possible serait de ne pas détruire les objets et de les recréer, mais plutôt de mettre à jour les données à l'aide de glBufferSubData().

Cela peut ne pas résoudre le problème de mise en cache, car vous mettez toujours de nouvelles données dans le tampon, mais je pense qu'il est garanti d'être plus rapide que de détruire et de recréer le tampon.

Avec ce changement en place, une autre chose que vous pouvez essayer est de jouer avec le paramètre usage de glBufferData() et changer à GL_DYNAMIC_DRAW ou GL_STREAM_DRAW. ceux-ci sont censés donner à OpenGL un indice que les tampons changent fréquemment et peut-être que cela le conduira à optimiser la mise en cache de façon appropriée.

+0

Ceci est la méthode préférée, la destruction et la création de VBO pendant le rendu n'est pas une bonne pratique. –

Questions connexes