Аппаратное ускорение в MFC

В настоящее время я разрабатываю программное обеспечение, которое включает отображение показателей производительности в режиме реального времени в виде графиков и диаграмм. Мне нужно получить данные, обработать данные и отобразить изображение как можно быстрее. Мой бэкэнд написан на C++, и я нахожусь в той точке, когда мне нужно сделать выбор в отношении внешнего интерфейса. Учитывая, что мой бэкэнд написан на C++, я был склонен использовать MFC. Другой альтернативой является использование WPF C# для внешнего интерфейса и взаимодействие с моим внутренним интерфейсом C++. Недавно я прочитал, что WPF обеспечивает аппаратное ускорение, это должно помочь мне добиться высокой частоты кадров. Аппаратное обеспечение MFC также ускоряет графику? Имеет ли значение аппаратное ускорение? Учитывая аппаратное ускорение WPF, делает ли это WPF наиболее эффективной альтернативой для графики в моем случае?


person user2654449    schedule 01.06.2014    source источник
comment
Есть ли какая-то конкретная причина, по которой вы не должны использовать OpenGL/DirectX для растеризации с ускорением GPU?   -  person gifnoc-gkp    schedule 02.06.2014
comment
Если я использую WPF, не интернализирует ли он рендеринг на основе OpenGL/DirectX? С MFC мне нужно будет сделать это самостоятельно. Я не знаю, как и насколько это будет сложно.   -  person user2654449    schedule 02.06.2014
comment
Я предлагаю пойти на XNA. он предоставляет управляемую среду выполнения, облегчающую разработку видеоигр. en.wikipedia.org/wiki/Microsoft_XNA   -  person pushpraj    schedule 02.06.2014


Ответы (2)


Я считаю, что WPF обеспечивает аппаратное ускорение с использованием DirectX 9. Однако для линейных графиков ограничивающим фактором является количество элементов интерфейса. Мы создаем программу в WPF, которая отображает данные sEMG в реальном времени с использованием диаграмм Telerik. Их можно настроить для использования ускорения Direct2D, что немного повышает производительность, если у вас много точек данных. Это все еще дергается, потому что вы не можете управлять потоком рендеринга WPF.

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

person Wouter    schedule 01.06.2014
comment
Если бы я все же использовал WPF, был бы он быстрее, чем MFC? - person user2654449; 02.06.2014
comment
У меня нет опыта работы с МФЦ. - person Wouter; 02.06.2014

Visual Studio 2010 добавила классы в MFC для поддержки использования рендеринга Direct2D из программ MFC.

Чтобы использовать Direct2D, вы начинаете с вызова EnableD2DSupport() в OnCreate вашего представления (технически я полагаю, что это не обязательно должно быть в OnCreate, но это обычное место). Затем вы будете получать AFX_WM_DRAW2D сообщения, когда контекст отображения D2D нуждается в обновлении, поэтому обычно вы хотите добавить обработчик для этого и реагировать на него, отображая свой контент по мере необходимости.

Еще одна возможность, которую следует рассмотреть, — это использование существующего элемента управления для рисования графиков. Их довольно много, в том числе бесплатные с довольно либеральным лицензированием. Например, в CodeProject есть ряд элементов управления диаграммами, несколько которые используют D2D для рисования, и многие другие, которые этого не делают.

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

person Jerry Coffin    schedule 29.06.2020