Хобрук: Ваш путь к мастерству в программировании

Следующий самый простой рендеринг графики быстрее, чем GDI+?

У меня есть программа GDI+, которую я тщательно оптимизировал (пакетные вызовы с GraphicsPath, DrawLines и т. д.), но она по-прежнему работает медленно (на отрисовку сложной карты со сглаживанием уходит несколько секунд).

Невозможно ускорить мой GDI+, поэтому я ищу альтернативу.

Какова моя следующая самая простая/легкая альтернатива (с производительностью как минимум в 20 раз выше или около того) для рисования линий/кругов/прямоугольников на экране со сглаживанием, если:

  1. Мне нужна совместимость с Windows XP?
  2. Мне не нужна совместимость с Windows XP?

Сейчас я изучаю DirectDraw и Direct2D, но я даже не понял, как с их помощью рисовать основные фигуры на экране. Я мог бы также подумать об OpenGL, но я не уверен, с чего начать, так как я никогда не использовал его.


  • DirectDraw устарел, поэтому я бы не советовал его использовать (его даже больше нет в DirectX 8+). Direct2D и DirectWrite недоступны в XP. Direct2D или DirectDraw кажутся подходящим вариантом, если вас не волнует XP (например, Chrome, Firefox используют Direct2D, Office 2013 использует DirectDraw). Direct3D или OpenGL, если вам нужна поддержка XP. 02.02.2014
  • Голосование против не принадлежит мне, но это выглядит много как рекомендательный вопрос, а это, как вы знаете, не по теме. Может быть, вопрос можно переориентировать на текущие алгоритмы, которые вы используете, и на то, насколько хорошо они могут работать в другой среде? 02.02.2014
  • @FrédéricHamidi: это не вопрос алгоритма, мои алгоритмы намного быстрее, чем рендеринг GDI+. Узким местом на самом деле является GDI+. Не уверен, что делает этот вопрос рекомендательным... Я спрашиваю, какие API доступны, я не какое программное обеспечение я должен купить или что-то в этом роде. 03.02.2014
  • @dtech: Подождите, DirectDraw недоступен в XP? Уверены ли вы? 03.02.2014
  • @Mehrdad DirectDraw есть, но DirectWrite — нет. Однако DirectDraw устарел, а DirectX 7-. (Я упомянул DirectDraw последние два раза, когда имел в виду DirectWrite) 03.02.2014
  • @dtech: Ой, я тоже забыл о разнице, спасибо. 03.02.2014
  • @dtech: Можно ли вообще рисовать базовые фигуры со сглаживанием с помощью DirectDraw или Direct2D? Глядя на документацию, я чувствую, что единственное, что они делают, - это возвращают вам буфер и оставляют вам самим разбираться, как обращаться с рисованием попиксельно... 03.02.2014
  • Direct2D почти как замена GDI+, только быстрее и чище. Функции рисования доступны через ID2D1RenderTarget интерфейс. 03.02.2014
  • @RogerRowland: О, понятно, спасибо. 03.02.2014
  • @RogerRowland: я попробовал, и это сработало! Теперь намного быстрее, спасибо. Вы хотите опубликовать это как ответ, чтобы я мог принять его? 04.02.2014

Ответы:


1

Direct2D почти как замена GDI+, только быстрее и чище. Функции рисования доступны через ID2D1RenderTarget интерфейс.

В отличие от Direct2D, GDI+ не имеет аппаратного ускорения, поэтому вы должны заметить значительное улучшение скорости рендеринга. Операции рисования со сглаживанием и альфа-смешивания теперь являются частью пакета.

04.02.2014
  • Direct2D не всегда быстрее. Это зависит от узкого места. Иногда это скорее узкое место памяти, чем узкое место рендеринга. 11.02.2014
  • @Frank Direct2D никогда не бывает медленнее. Если у вас ограничена пропускная способность памяти с помощью Direct2D, у вас ограничена пропускная способность памяти, независимо от того, каким способом вы выполняете рендеринг. Однако выбор подходящего целевого объекта рендеринга для Direct2D может серьезно сократить трафик памяти, чего нет, например, при рендеринге с помощью GDI или GDI+. 11.04.2014
  • Direct2D по умолчанию использует аппаратное ускорение, которое может быть медленнее, чем программный рендеринг, в зависимости от оборудования, свободной памяти в системе и того, как видеооборудование использует системную память. GDI+ был разработан в эпоху, когда аппаратные ресурсы были более ограничены; это не самая быстрая система, но она может превзойти Direct2D. Многие люди используют программный рендеринг в Visual Studio, потому что в их системе он работает быстрее; это WPF, но основная проблема та же. 11.04.2014
  • Мне нравится Direct2D, и я рекомендую его вместо GDI+ для новой работы. Мне просто не нравятся общие заявления о производительности, когда нужно учитывать так много факторов. Преимущество GDI+ заключается в том, что он всегда работает на всех системах, в то время как Direct2D может содержать ошибки. 11.04.2014
  • Я считаю, что для профессионального программного обеспечения и клиентов со старыми машинами должны поддерживаться GDI+ и Direct2D. 23.09.2014
  • Новые материалы

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..

    Случай использования npm3 вместо npm2 для разработки библиотеки
    Некоторое время назад я создал библиотеку на NodeJS, чтобы упростить рендеринг на стороне сервера и клиента. Он использует React и React Router для отображения соответствующего HTML на веб-сайте...