Как правильно нарисовать GeometryDrawing на холсте в WPF (с точки зрения производительности) - PullRequest
1 голос
/ 13 сентября 2011

Несколько дней назад я задал следующий вопрос: Как рисовать графику максимально эффективно в WPF

Было достигнуто единодушное мнение, что Canvas используется в качестве хост-объекта в сочетании с GeometryDrawing.классы, которых мне нечего бояться в плане производительности.

Хотя, реализовав простой тест, я пришел к выводу, что приложение захлебывается только 3000 из этих объектов на экране.

Во время реализации я заметил, что мне нужно было инкапсулировать объект GeometryDrawing в 2 разных объекта (DrawingImage и Image), прежде чем я смог сделать Canvas-рендеринг, я думаю, что именно здесь находится точка притяжения.Ниже приведен пример кода о том, как я делаю это в настоящее время:

//Node
GeometryDrawing geoNode = new GeometryDrawing(
    new SolidColorBrush(Utils.IntToColor(graphNode.Color)), 
    new Pen(Brushes.Black, graphNode.Thickness), 
    new EllipseGeometry(new Point(graphNode.Position.X, graphNode.Position.Y), 16, 16)
);

Image imageNode = new Image
{
    Source = new DrawingImage(geoNode),
};

SetLeft(imageNode, graphNode.Position.X);
SetTop(imageNode, graphNode.Position.Y);

Children.Add(imageNode);

Мои вопросы:

  • Является ли инкапсуляция объектов GeometryDrawing надлежащим методом для их визуализации?

  • Есть ли более быстрый способ отображения моих объектов GeometryDrawing без необходимости их инкапсулировать (например, что-то еще, кроме Canvas)?

  • Являюсь ли яожидаете слишком многого, если мне нужна хорошая производительность с 3000 экранными объектами, использующими WPF?Мне не кажется, что это большое число, так как правильный 2D-движок может рендерить 10000 объектов и при этом работать без сбоев.Кроме того, было отмечено, что WPF «под капотом» использует DirectX.

Спасибо!

1 Ответ

0 голосов
/ 18 октября 2011

В итоге я использовал WPF для интерфейса и использовал SlimDX / XNA для реального рендеринга.Библиотека, вышедшая из него, будет доступна через некоторое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...