Рендеринг внутренних компонентов WPF& #в приложение Directx

У меня есть приложение WPF, предназначенное для наложения HUD в прямом эфире. Первоначальная идея заключалась в создании плагина для xsplit (, популярного приложения для представления живых потоков ), для отображения содержимого приложения WPF. Проблема с этим подходом заключается в том, что рендеринг растрового изображения в COM-интерфейс xsplit сильно снижает производительность ЦП для выпуска приложения (. Поскольку я считаю, что существуют проблемы в COM-интерфейсе xsplit, а также использование RenderTargetBitmap, загружающее ЦП ). ].

Я рассматривал прямой рендеринг оверлея в игре (Целевое приложение DirectX ), потому что это дает ряд преимуществ. В основном это позволяет обойти проблемы с производительностью в xsplit, но также открывает приложение для различных приложений для потоковой передачи и захвата.


Я не очень разбираюсь в DirectX, но думаю, что это схема решения

  1. Инициализировать приложение WPF и захватить устройство Direct3d WPF(с помощью этого метода)

  2. Найти и перехватить целевое приложение DirectX Вызов EndScene(с использованием EasyHook+Slimdx)

  3. Рендеринг содержимого поверхности устройства WPF поверх подключенного приложения DirectX


Главный вопрос, который у меня есть, заключается в том, как выполнить шаг 3 с помощью SlimDX. Я надеюсь, что решение может каким-то образом повторно использовать поверхность и не полагаться на копирование, поскольку цель состоит в том, чтобы не влиять на производительность подключенного приложения. Я также хотел бы иметь возможность ограничивать регион и поддерживать прозрачность. Мне также интересно, может ли использование устройства WPF Direct3d в подключенном устройстве приложения DirectX вызвать какие-либо нестабильности.

Мы будем признательны за любую информацию, спасибо.

8
задан decaprime 29 April 2012 в 21:13
поделиться