LINUX.ORG.RU

Окна в Linux

 , , ,


0

2

Когда-то не так давно (полгода назад) я реверсил EXEшник диаблы 2. Там в этом замечательном ASM-коде, который IDE также любезно перевела в Си я видел множество вызовов WinAPI-функций. Но то и не мудрено. Наверное любая графическая библиотека Windows упирается в WinAPI. Но вот возник вопрос: как так выходит, что в совершенно разных дистрибутивах Linux с совершенно разными графическими серверами одна и та же программа может грузиться, создавать окна и рисовать в них что угодно?

Если кому-то известно, буду рад выслушать.

Какими разными серверами, их всего два - иксы и вейланд. Причем вейланд сессия на практике предполагает наличие xwayland, который является иксами, запущенными поверх вейланда.

Вот так и работает, практически как и в винде.

James_Holden ★★★★★
()
Ответ на: комментарий от James_Holden

Причем вейланд сессия на практике предполагает наличие xwayland

Что нет таких программ, которые работают и в иксах и в вэйланде без этой примочки?

PunkPerson
() автор топика

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

neumond
()
Ответ на: комментарий от PunkPerson

Это больше фреймворк решает. Например, есть приложение на Qt. У Qt есть плагин для работы с иксами, и есть плагин для работы с вейландом. Если при запуске приложения, Qt видит что это вейланд сессия, загружается плагин для вейланда. Нет - значит для иксов. Само же приложение, на своем уровне, вообще может не знать на чем конкретно оно работает. То есть это прозрачно для приложения делается.

James_Holden ★★★★★
()
Ответ на: комментарий от PunkPerson

Есть, но это по сути две версии одной программы. Можно конечно собрать всеядный бинарник с автодетектом что в системе доступно, но это сложно, чаще всего это разные режимы в qt/gtk/браузеров.

neumond
()

Это называется стабильный API. Что-то невероятное для линуксов. Понимаю твоё удивление.

ox55ff ★★★★★
()

В целом ты плохо изучал exeшник дьяблы если пришел к такому выводу. Потому что у нее 3 способа рендеринга directdraw, direct3d и glide. И ничего из них не относится к winapi. Для создания окошка, в которое будет рисоваться картинка нужен winapi, да

cobold ★★★★★
()
Ответ на: комментарий от PunkPerson

Что нет таких программ, которые работают и в иксах и в вэйланде без этой примочки?

Нет, таких сейчас нет. Причина тому – внезапно, иксы. Если бы Xlib + Xt + Xaw/Xm в своё время в мире UNIX-like ситем стали тем что ты видел в реверсе EXE, то бишь полноценным аналогом WinAPI, то у Linux’а был бы стабильный и современный графический API/Toolkit на который можно было бы опираться при создании приложений и игр, исполнительные файлы которых были бы легковесные и работали в любых дистрибутивах Linux не взирая на зоопарки Qt и Gtk и их гонку.

Но так как иксовые фреймворки даже в конце 80-ых были кривые, убогие и уродливые (см. CDE) – никто в т. ч. и иксовые разработчики не стали развивать Xlib/Xt/Xaw из-за чего появился Qt и потом GTK, которые вместо использования иксовых виджетов начали рисовать самостоятельно и тот же Xaw стал полностью заброшенным.

Со временем зоопарк фреймворков вырос, а у Linux-дистрибутивов так и не появилось вменяемого графического API/тулкита с идеей которая имеется в WinAPI: вот вам API, используйте его, а мы (Microsoft) его будет аккуратно развивать, благодаря чему ваши приложения из Windows 2.0 даже получат современные фичи вроде поддержки HiDPI, современных векторных шрифтов со сглаживанием Grayscale, трансляцию координат и скейлинг без мыла:

https://baat.exlmoto.ru/~exl_lab/screens/old_winapi_apps_on_hidpi.png

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 2)
Ответ на: комментарий от cobold

directdraw, direct3d и glide

Знаю про такое. Но я спрашиваю в первую очередь про окно.

PunkPerson
() автор топика
Последнее исправление: PunkPerson (всего исправлений: 1)
Ответ на: комментарий от cobold

Четыре, ещё тот самый winapi который активируется ключом -w одновременно с включением оконного режима. Однако даже те что ты перечислил всё равно требуют кучу winapi функций, ведь кроме рисования собственно сцены надо ещё много всего делать.

Однако автор занимается плохими вещами, кажется он читак.

firkax ★★★★★
()
Ответ на: комментарий от firkax

кажется он читак.

Нет, спасибо. Я таким не промышляю.

PunkPerson
() автор топика
Последнее исправление: PunkPerson (всего исправлений: 1)
Ответ на: комментарий от James_Holden

Причем вейланд сессия на практике предполагает наличие xwayland, который является иксами, запущенными поверх вейланда.

Да нет, вовсе не обязательно. У меня вот не запущен по умолчанию xwayland-sattelite. Он установлен, чтоб если понадобится, был под рукой, но очень давно не пригождался — большинство софта перевели на нативную работу с вяленым таки (в основном это заслуга тулкитов, видимо). Игры да, большинство заточены под иксы (использую gamescope для их запуска, это ещё и производительность улучшает и дополнительные фичи даёт), но вообще SDL тот же вроде умеет напрямую в вяленого, другие движки тоже потихоньку подтягиваются.

Ну а так да, всё верно, всего два протокола по сути, и то долгое время был один. О каких совершенно разных графических серверах идёт речь, непонятно.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от firkax

Нет, ты же не хочешь сказать что они сцену через gdi рисуют? Ddraw и d3d умеют рисовать в окне. Точнее окно там всегда есть, потому что это единственный способ рисовать в винде

cobold ★★★★★
()

Есть устаревший протокол X11 и есть пока не устаревший протокол Wayland. Эти протоколы одинаковые во всех дистрибутивах Linux (да и вообще весь софт во всех дистрибутивах Linux одинаковый по сути). Поэтому одна и та же программа может грузиться и рисовать окна во всех дистрибутивах Linux (если повезёт).

vbr ★★★★★
()
Ответ на: комментарий от cobold

Рисуется фреймбуфер своим движком и потом через BitBlt (начиная с 1.13 - StretchBlt) его мапят на экран (вызывается на каждый кадр на всё окно, независимо от того что именно там изменилось и изменилось ли вообще). Этот режим работает без участия directx вообще.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от ggrn

В иксах его юзать смысла мало — производительность будет, вероятно, ниже. Я бенчмаркал на разных играх (в основном нативные, где есть удобный бенчмарк: различные Total War, Tomb Raider, Talos Principle и др.), и у меня выходит так: больше всего FPS в gamescope, запущенном в вяленом; на втором месте иксы без gamescope; примерно одинаково мало при использовании обычного xwayland и gamescope под иксами. Впрочем, такие фичи как скейлинг (может быть полезно, например, для старых игр, которые не умеют в разные разрешения, а умеют только в одно), в т.ч. с принудительным FSR (поддержка со стороны игры не требуется), а также ограждение игры от доступа к непосредственно к основному X-серверу, он выполнит и под иксами.

Все мои бенчмарки, впрочем, были на AMD. На Nvidia картина может быть другой, тут разве что самому попробовать можно и посмотреть, как оно.

CrX ★★★★★
()
Ответ на: комментарий от EXL

был бы стабильный и современный графический API/Toolkit на который можно было бы опираться

А теперь и не будет никогда.

А так, да, надо было Xt развивать, а не выкидывать как устаревший.

Shadow ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.