Частота кадров WPF необычно низкая, когда запущено приложение D3D

Я столкнулся с проблемой, когда приложение WPF работает с очень низкой частотой кадров, когда приложение D3D работает одновременно.

Ситуация выглядит следующим образом: Первое приложение - это форма Winforms, которая визуализирует трехмерную графику с использованием SlimDX и D3D10. Приложение работает не в полноэкранном режиме, а в развернутом окне. Это очень плавно и быстро.

Второе приложение состоит из окна WPF, которое отображает ScatterView с некоторыми изображениями. Окно WPF прозрачное (AllowsTransparency="True" с прозрачным фоном). Общая идея здесь заключается в том, что окно WPF должно выглядеть так, как будто оно сложено поверх трехмерной сцены.

Однако, как только приложение D3D10 запущено, производительность приложения WPF снижается до 1-2 кадров в секунду (по данным WPF Performance Tool). Это не потому, что мое компьютерное оборудование не способно отображать оба приложения: приложение D3D10 всегда воспроизводит трехмерную сцену очень плавно, а использование графического процессора и процессора не максимально, когда у меня запущены оба приложения. Даже когда я отдаю приложению WPF более высокий приоритет процесса, производительность рендеринга остается на уровне 1-2 кадра в секунду.

Я также попытался объединить оба приложения в один процесс и используя D3DImage и использование общей поверхности D3D10 (с устройством D3D9Ex) для подачи ее в D3DImage, Кроме того, я попытался использовать InteropBitmap и запись данных кадра в него. Все эти решения работают и создают сцену D3D10 с некоторыми элементами управления WPF поверх нее, но ни одно из них не обеспечивает бесперебойной работы WPF.

Идея использования двух разных прикладных процессов была моей последней идеей отделить стек рендеринга WPF от любых возможных воздействий на производительность, которые могут возникнуть из-за рендеринга D3D10 в одном и том же процессе.

0 ответов

Другие вопросы по тегам