DrawImage / DrawLine с использованием XNA / DirectX - PullRequest
1 голос
/ 06 июля 2011

Я создаю визуализацию песни, в которой мне нужно каждые ~ 50 мс вычислять новый растровый файл и показывать его в форме, рисуя его на картинке.

К сожалению, производительность рендеринга / рисования этого изображения не высокая при использовании DrawImage / DrawLine.

Есть ли способ улучшить с помощью XNA / DirectX?

Какой из них лучше для этой задачи?

Есть ли примеры?

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

XNA использует DirectX в фоновом режиме. Также вы больше не можете напрямую использовать обычный DirectX в C #, потому что ManagedDX был прекращен из-за XNA. Есть, например, альтернативы slimdx . XNA ближе к движку, который использует DirectX. Вам нужен более низкоуровневый подход, при котором кажется, что производительность рисования - это не проблема, а операции с управляемой памятью. Я бы предложил использовать Direct2D (также является частью slimdx), который использует аппаратное ускорение и больше подходит для 2D-рендеринга. Вы также можете попробовать this и полностью манипулировать растровым изображением вручную.

0 голосов
/ 06 июля 2011

Я бы согласился с использованием xna способом, подобным образцу winforms.

Я думаю, что вы могли бы получить наилучший внешний вид и производительность для линий не рендерингом растрового изображения или использованием SpriteBatch, а созданиемдинамический буфер вершин, содержащий все конечные точки всех линий.Затем используйте DrawUserPrimitives () и укажите для параметра primitiveType значение PrimitiveType.LineList.

Это отправляет все эти точки в графический процессор, где вы можете создавать всевозможные эффекты (шейдеры) на линиях, в то время как графический процессор выполняет всю тяжелую работу.

Некоторые из примеров в образовательныхВ разделе приложения-концентратора этот вид рендеринга используется для создания сеток.На ум приходит образец perPixelLighting .Вам может (или не может) работать в трехмерном пространстве.

...