В чем разница между X-Windows, wxWidgets, GTK/Qt и OpenGL? [закрытый]

Я занимаюсь консольным программированием в течение нескольких лет, и теперь пришло время, чтобы я узнал немного о увлекательном мире GUIs. Я немного побаловался wxWidgets; составил программу Hello World,немного поиграл с ней и т. д.

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

Итак, я читал по этому вопросу (например,здесь), но мне трудно обернуть голову вокруг всех разных систем, наборов инструментов и того, что они делают. До сих пор я понял, что (пожалуйста, поправьте меня, если я ошибаюсь):

  • Linux сам по себе является" просто " ядром; он не обеспечивает поддержку GUI (?).
  • система X Window находится в основе GUIs на большинстве UNIX-подобных систем.
  • GTK-это набор инструментов GUI, Qt содержит набор инструментов GUI. GTK и Qt находятся на одном "уровне" (?).
  • Gnome-это среда рабочего стола, построенная на GTK, KDE-на Qt.
  • wxWidgets-это библиотека, которая обертывается (?) наборы инструментов более низкого уровня, такие как GTK, что обеспечивает кросс-платформенные преимущества.
  • OpenGL-это API для рендеринга 2-и 3-D векторной графики.

теперь для некоторых вопросов: придерживаясь UNIX-подобных систем:

  1. кто в внизу все это? т. е. какой компонент выводит растровое изображение, которое в конечном итоге отображается на экране?
  2. это делается через OpenGL? Если да, то кто вызывает OpenGL? И как это было сделано на старых пк без видеокарты?
  3. если вы хотите быть действительно упертый, как низко вы можете пойти? Какой самый примитивный API, в котором вы можете запрограммировать GUI? Х11? В OpenGL? (пожалуйста, не говорите логические ворота:)).

для бонуса, может быть, как насчет ОС Windows? Следует ли она вообще подобной структуре, или она идет полностью своим собственным путем?

1 ответов


  1. сервер X, объясняя, что само по себе займет более 10k слов. Не подходит для ответа SO. Прочтите код, и ваши глаза взорвутся. Bare X применяется для рендеринга программного обеспечения. В OpenGL can используйте в этом контексте два разных способа (см. изображение ниже).

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

  3. Это зависит от того, сколько боли вы готовы принять. Вы, конечно, можете нарисовать X примитивов или OpenGL примитивов на экране, но это не 80-е больше.

Gtk+ / Qt являются абстракциями специфичных для ОС API (X/Wayland/W*), чтобы уменьшить боль, создающую GUIs и уменьшить количество кода писать. Эти абстракции сами по себе имеют высокую сложность и охватывают тысячи строк кода (просто взгляните на GtkTreeView Klass, который предоставляет Gtk+). Таким образом, вместо рисования пикселей теперь вы можете просто определить кнопки и макеты и упаковку виджетов.


Итак, из этой статьи wiki вы можете получить основной обзор только расширение GLX X proto:

GLX

также взгляните на обзор того, как рисунок покончено с X

имейте в виду, что это, надеюсь, устареет через пару лет, если wayland и или Mir сделают скачок. Это совершенно разные истории.