2010-12-06 29 views
-1

J'essaye d'accélérer un peu les temps de démarrage de mon application Direct3D, et j'ai remarqué que Direct3DCreate9 prend une seconde entière en fonction de profiler (plus que toute autre chose). Pourquoi? Et que peut-on faire à ce sujet?Pourquoi Direct3DCreate9 peut-il être lent?

OS: XP, DirectX: 9.0. Même comportement sur Windows 7 avec DirectX différent, et j'ai remarqué que beaucoup de jeux souffrent aussi de ce lag "Direct X initialisation", donc ce n'est pas un problème avec juste ma configuration.

Répondre

3

Lorsque vous appelez Direct3DCreate9, vous initialisez toutes les bibliothèques DirectX. Cela peut prendre un moment.

Il y a peu de choses que vous pouvez faire pour améliorer la vitesse de cet appel. La meilleure option consiste généralement à fournir un retour visuel à l'utilisateur que les éléments sont en cours de chargement, si possible, lors de la première initialisation de DirectX. Ceci, au moins, montre que votre application fait "quelque chose" et n'est pas simplement accrochée.

+0

Pourtant, je ne comprends pas comment initialiser juste un groupe de bibliothèques peut prendre une seconde. Il n'y a pas de DLL en cours de chargement dans Direct3DCreate9, en d'autres termes, il s'agit juste d'exécuter du code. Je peux difficilement imaginer des tâches qui nécessitent autant de temps pour calculer. – himself

+1

@lui-même: Il ne s'agit pas seulement d'initialiser les librairies, mais aussi de faire des vérifications contre votre carte graphique, de configurer des caps pour les futurs appels, etc. Il y a beaucoup de choses à faire pour initialiser Direct3D. Il n'y a (malheureusement) rien qui puisse être fait pour améliorer le perf. Là. (Bien qu'il soit beaucoup plus rapide en version que le mode D3D, btw ...) –