1 votes

OpenGL ES - vaste carte, meilleures pratiques

Si je veux faire le rendu d'une grande carte, quelle est la meilleure pratique pour utiliser OpenGL ES avec un appareil mobile (Android ou iPhone) ?

Quelle est la meilleure structure pour contenir tous les sommets, les normales et les coordonnées de texture ?

Je suppose que l'utilisation d'une structure entrelacée peut vous apporter quelques avantages en termes de performances grâce à la mise en cache de la mémoire. D'accord ?

Dois-je utiliser drawArrays ou drawElements pour transmettre mes données à OpenGL ES ?

Je n'ai pas fait de tests, mais je pense que drawElements est plus rapide si le GFX n'utilise pas la mémoire partagée, car il n'y a pas besoin de pousser autant de données. Puisque c'est très proche de metall, qu'en pensez-vous ? (l'iPhone est basé sur ARM alors que la plateforme Android est basée sur Qualcomm (également un ARM ?))

Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées,

Friedrich

1voto

Stefan Schmidt Points 872

En théorie, l'utilisation de Objets de la mémoire tampon des vertex devrait donner les meilleurs résultats. Vous avez déjà donné les raisons.

Je me souviens avoir entendu, lors d'une des conférences de Stanford sur le développement de l'iPhone, que l'utilisation de VBO ne produisait pas de meilleures performances que l'utilisation de pointeurs de vertex. Là encore, cette information date un peu. Donc, opter pour les VBO sur l'iPhone ne sera certainement pas une mauvaise idée.

Jusqu'à Android 1.5, il existait une fonction fuite de mémoire dans l'implémentation OpenGL déclenchée par glDrawElements. Je suppose que ce problème a été corrigé, mais je n'ai pas vérifié depuis un certain temps.

Et voici quelques Infos sur la manière d'utiliser au mieux les VBO.

0voto

Dinedal Points 773

J'apprécie l'approche présentée dans ce présentation . Consultez les diapositives 26 à 32.

La présentation est spécifique à Android mais devrait également s'appliquer à l'iPhone. En gros, vérifiez vos extensions GL, et si vous pouvez les utiliser, les Vertex Buffer Objects sont la solution.

N'oubliez pas que votre architecture cible (ARM dans les deux cas) n'aura probablement pas de FPU, de sorte que les changements d'état seront très très coûteux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X