Question

Je suis en train de coder une application 3D avec DirectX 10 et je me demande comment se fait le virement de Shadermanagement.

Est-il plus efficace de précharger tous les shaders existants au démarrage de l'application, puis de les utiliser au besoin? Cela forme-t-il les ressources du matériel si le nombre augmente?

Je me demande également s’il est rapide de commander le rendu par shader afin de minimiser les changements de shader.

Était-ce utile?

La solution

Je n'ai pas travaillé avec DX10, seulement avec DX9, mais je suppose que ces éléments sont toujours les mêmes.

En fonction de votre application, vous pouvez générer des shaders lors de l'exécution (de nombreux jeux 3D sophistiqués le font actuellement).

Le préchargement des shaders n’est pas une mauvaise idée, selon que vous générez des shaders, combien il en existe, quelles sont vos considérations en matière de mémoire - cela dépend. Cependant, le préchargement d'un shader (par lequel je suppose que vous voulez dire créer l'instance ID3DXEffect) ne nécessite que de la mémoire au moment de l'exécution, pas d'utilisation du processeur.

Commander par shader est une bonne idée. En règle générale, le tri par matériau est une bonne idée, car changer de nuanceur engendre des frais généraux (pas excessivement, mais perceptible en fonction de la complexité de votre application).

Pour trier vos tirages, lisez ceci: http://realtimecollisiondetection.net/blog/?p = 86

Autres conseils

Dans D3D10, toutes les ressources du périphérique sont virtualisées afin que vous ne manquiez pas d'elles. Bien sûr, vous pouvez toujours épuiser les ressources physiques de la carte et causer beaucoup de frustrations si vous ne faites pas attention à ce que vous faites.

De plus, ils ont considérablement modifié l'état de l'appareil afin de réduire les coûts de changement d'état, y compris les shaders.

Mais vous demandez en réalité que & "la méthode X est-elle plus rapide que la méthode Y pour mon application? &"; et bien que le D3D10 simplifie la gestion d’états pour rendre l’état de commutation plus rapide, la seule façon de répondre à la question ci-dessus est de mesurer les performances avec votre application et vos données .

Le blog de realtimecollectiondetection.net ne fait que parler du tri de vos appels de tirage. Cela va conduire à moins de changement d'état. Peu importe la vitesse de changement d'état, en faire moins est toujours plus rapide. Voilà donc un bon conseil général.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top