Должны ли мы использовать OpenGL для 2D-графики? - PullRequest
7 голосов
/ 17 марта 2011

Если мы хотим создать приложение, подобное MS Paint, следует ли нам использовать OpenGL для визуализации графики? Я хочу упомянуть о производительности, если использовать традиционный GDI против OpenGL. И если для этого существуют лучшие библиотеки, пожалуйста, посмотрите мне одну.

Ответы [ 2 ]

8 голосов
/ 17 марта 2011

GDI, X11, OpenGL ... являются API рендеринга, т.е. вы обычно не используете их для манипулирования изображениями (вы можете сделать это, но это требует некоторых мер предосторожности).

В приложениях для рисования, подобныхMS Paint, если он основан на пикселях, обычно вы будете манипулировать некоторым буфером изображений обычным кодом или специальной библиотекой обработки изображений, а затем отправлять полный буфер в API рендеринга.

Если ваша модель данных состоит из штрихови отдельные фигуры, то есть векторная графика, тогда OpenGL делает неплохой бэкэнд.Однако, может быть, стоит взглянуть на какой-то другой API для векторной графики, например, OpenVG (который в своих текущих реализациях находится поверх OpenGL, но могут появиться нативные реализации, работающие непосредственно на GPU).

В вашем сценарии использованияу вас не возникнет проблем с производительностью на современных компьютерах, поэтому не выбирайте API по этим критериям.OpenGL определенно быстрее, чем GDI, когда речь идет о текстурировании, альфа-смешивании и т. Д. Однако в зависимости от системы и графического процессора чистый GDI может превзойти OpenGL в таких простых вещах, как рисование дуги или заполнение сложного самопересекающегося многоугольника сложными правилами намотки.

4 голосов
/ 17 марта 2011

Нет веских причин , а не , чтобы использовать OpenGL для этого.За исключением, может быть, если у вас многолетний опыт работы с GDI, но вы ничего не знаете об OpenGL.

С другой стороны, OpenGL во многих случаях вполне может быть лучше.Компоновка слоев или регулировка оттенка / насыщенности / яркости / контрастности в шейдере GLSL будет на несколько порядков быстрее (фактически, почти мгновенно), если в компьютере имеется достаточно новая карта.Пройдя по пути в произвольном виде «нечетким» пером (т. Е. Снова и снова смешивая спрайт с альфа-прозрачностью), вы будете на несколько порядков быстрее.На изображениях с довольно разумными размерами большинство ядер фильтров должно работать близко к реальному времени.Масштабирование с помощью билинейной фильтрации выполняется аппаратно.

Такие вещи не будут иметь значения для изображения 512x512, поскольку почти все происходит мгновенно при таких разрешениях, но на типичном изображении 4096x3072 (или более) с цифровой камеры,это может быть очень заметно, особенно если у вас 4-6 слоев.

...