Я работаю над симулятором, который использует OpenGL для отображения символов, карт, движущихся объектов ... в виде слоев / текстур.
Мы изучаем различные варианты введения поддержки мультитач в симуляторе.
WPF является одним из вариантов, поскольку он может обеспечить интересные факторы производительности для разработки графического интерфейса.Прототип был создан, но он не соответствует нашим требованиям к производительности.
Я ищу способ улучшить производительность или любой совет, который мог бы вернуть нас на правильный путь.
Текущая система основана на
Основном / хостинговом приложении, написанном на C ++ и OpenGL, которое управляет (запускает, планирует, останавливает ...) WPF-частью и предоставляет контекстную информацию
Приложение WPF с поддержкой мультитач, которое реагирует соответственно на основной контекст и на пользовательский ввод
COM-компонент для связи между приложением Main / hosting иприложение WPF
Мультитач-входы, управляемые определенным уровнем абстракции (обрабатывает TUIO или собственные события)
Планировщик приложения хоста запрашивает приложение WPFдля захвата / растрового изображения каждые xx мс (обычно xx <50-60 мс) и добавляет это растровое изображение в качестве текстуры OpenGL (glTexImage2D) для визуализации окна моделирования. </p>
Текущий способ WPFРендеринг его растрового изображения основан на RenderTargetBitmap.Время рендеринга составляет около 500 мс, что по крайней мере в 10 раз медленнее, чем хотелось бы, и потребляет слишком много ресурсов ЦП (в этом случае WPF использует программный конвейер).
Итак, мои вопросы будут такими:
Есть ли способ визуализации растрового изображения окна WPF намного быстрее при сохранении всех его функций (например, прозрачности)?Я знаю об API gdi32, но, похоже, он не поддерживает такие вещи, как прозрачность, и я не знаю, сможем ли мы добиться какой-либо производительности
Текущая архитектура не похожа наоптимальный выбор, поскольку выполняются два «рендеринга» (рендеринг самого приложения WPF и рендеринг его растрового изображения).Можно ли будет сделать один раз WPF для рендеринга в некотором пространстве виртуальной памяти, которое может быть непосредственно прочитано приложением Main / hosting?