2010-06-23 4 views
3

Dans Direct2D, il est recommandé de dessiner des éléments similaires, afin d'éviter des changements inutiles d'état du GPU. Ils font aussi quelques opérations de réordonnancement derrière la scène juste pour ça.Dessin haute performance WPF - dois-je regrouper par couleur de pinceau?

Je dois dessiner beaucoup de rectangles qui peuvent avoir l'une des deux couleurs. Je pense à faire le dessin en deux passes, une pour les rectangles avec la première couleur et une autre pour les autres avec l'autre couleur.

Avez-vous une idée si cela va améliorer la vitesse de rendu? La vitesse que j'ai en ce moment n'est pas terrible. Je dessine dans un DrawingContext obtenu à partir d'un DrawingVisual.

+0

Pourquoi ne pas créer un point de repère simple à tester. Avoir deux versions une où vous dessinez toutes les couleurs A puis la couleur B, la seconde où vous dessinez des couleurs alternées. Ajoutez un 'StopWatch' et comparez les résultats. – ChrisF

+0

Je vais essayer. J'essayais de voir si quelqu'un connaissait déjà la réponse ou avait un aperçu de cela. – Meh

Répondre

1

Je ne sais vraiment pas ce groupe effet au pinceau aura, mais il y a certaines choses que vous devriez d'abord vérifier:

  • Assurez-vous que tous les pinceaux, stylos et autres freezables sont gelés.
  • Simplifiez votre arborescence visuelle, essayez de réduire le nombre d'éléments. Essayez de réduire le nombre d'éléments qui changent à chaque fois que vous mettez votre dessin à jour.

Lire: http://msdn.microsoft.com/en-us/magazine/dd483292.aspx

+0

Je fais déjà tout ça. J'ai essayé d'utiliser Direct2D de C++/CLI, la vitesse était exceptionnelle, mais je ne pouvais pas obtenir le focus pour fonctionner correctement (http://stackoverflow.com/questions/2844165/wpf-hwndhost-keyboard-focus), alors maintenant je J'essaie l'API de dessin WPF de niveau le plus bas que je puisse trouver, en plus d'aller jusqu'à Direct3D. – Meh

+0

@Adal - DrawingVisual n'est pas l'API WPF de niveau le plus bas, le niveau le plus bas surcharge OnRender, l'utilisation de DrawingVisuals multiples est utile lorsque vous manipulez de grands ensembles de données où chaque partie du cycle change, vous pouvez mettre à jour uniquement visuel contenant les données modifiées et ne pas ré-afficher l'intégralité de l'ensemble de données. – Nir

Questions connexes