Кроссплатформенный графический интерфейс - процесс рендеринга - PullRequest
0 голосов
/ 04 марта 2012

Я использовал несколько кроссплатформенных библиотек GUI (таких как FLTK, wxWidgets, GTK ++), однако я чувствую, что никто не удовлетворяет мои потребности, поскольку я хотел бы создать что-то, что выглядит одинаково, независимо от платформы (я понимаю, что будут люди против создания GUI, которые не имеют нативного взгляда на платформы, но это не проблема здесь). Для создания своих элементов управления я обычно полагаюсь на базовые формы, предоставляемые библиотекой, и стараюсь связывать и кодировать все вместе ...

Поэтому я решил попробовать и сделать opengl для 2D GUI-программирования (так как он все еще был бы кросс-платформенным. Имея это в виду, я не мог не заметить, что приложения, которые я написал с использованием wxWidgets & FLTK обычно имеют средний объем оперативной памяти, составляющий 1 / 2МБ, тогда как базовое окно openGL с простым фоном находится в диапазоне от 6 до 9 МБ.

Это подводит меня к актуальному вопросу для этой темы, Я думал, что весь рендеринг экрана был сделан с использованием либо opengl / direct (под обложками).

Может ли кто-нибудь объяснить или связать мне какую-нибудь статью, которая может дать мне некоторое представление о том, как эти вещи на самом деле работают?

Спасибо за чтение!

Ответы [ 2 ]

0 голосов
/ 04 марта 2012

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

Посмотрите, например.на Qt .В Windows он использует GDI для рисования в качестве родного бэкэнда.На Linux он использует XRender, я думаю.То же самое на Symbian и Mac.Qt также имеет собственный программный растеризатор.И, конечно, есть бэкэнд OpenGL.

Так почему же приложение, использующее некоторые из этих наборов инструментов с графическим интерфейсом, может занимать меньше памяти, чем простое приложение OpenGL?Если инструментарий использует «родной» бэкэнд, все уже загружено в память, поскольку весьма вероятно, что все видимые графические интерфейсы используют один и тот же API рисования.Нативные API также могут использовать только один буфер, представляющий весь экран, в котором могут рисовать все приложения.

Однако при использовании OpenGL у вас есть собственный буфер, который представляет окно приложения.Не говоря уже о том, что приложение OpenGL обычно имеет несколько кадровых буферов, таких как z-буфер, буфер трафарета, обратный буфер, которые не являются необходимыми для 2D-рисования, но занимают некоторое пространство (даже если это, вероятно, пространство в памяти видеокарты).Наконец, при использовании OpenGL возможно, что необходимые библиотеки еще не загружены.

0 голосов
/ 04 марта 2012

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

Это потому, что это приложение OpenGL,Это означает, что он должен хранить все оборудование, необходимое для работы OpenGL.Это означает, что ему нужен кадровый буфер здоровенного размера: обратный буфер, z-буфер и т. Д. Для работы ему нужно много шаблонов.

Действительно, я бы об этом не беспокоился.Это то, что делает каждое приложение.

...