Страницы

Поиск по вопросам

воскресенье, 15 декабря 2019 г.

Отрисовать пиксели на Xorg-окне с помощью стандартных либ в Linux

#linux


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

Условие:  

Только стандартные библиотеки ядра Linux. Никаких GTK/Qt/OpenGL/Cairo и встроенных
Xorg-способов.

Вопросы:  


Чем, собственно, рисовать? (Хотелось бы услышать конкретный ответ.)  
Как рисовать? (Желательны примеры/ссылки на примеры, тема довольно   непопулярная,
информации мало.)  
Преимущества того или иного способа.


UPD: В ответ на комментарий пользователя @KoVadim всё не влезло, отпишу в основной
вопрос в качестве общего пояснения.


  Если это Xorg окно, то и он должен рисовать
  с помощью XDrawPoint


Хочется сказать, что большинство граф. тулкитов не рисует картинку через фичи графического
сервера. Qt рисует с помощью своего "велосипеда", GTK это делает с помощью Cairo, и
это правильно. В том же Wayland, который пришел в замену иксов вообще нет подобного
функционала. Wayland просто делает окно оставляя отрисовку всего в окне тулкитам.  

Остановимся на Cairo, он наверняка использует что-то низкоуровневое, я хочу узнать
что. (копать сорцы опыта не хватает)

Фреймбуфер пробовал, всё про него знаю. Во первых лучше использовать DRM. Во вторых
это всё не то. (А возможно DRM вполне годен, но как его использовать а Xorg я не нашел,
нету документации и всё.)
    


Ответы

Ответ 1



LibXCB считается более современной и более производительной, чем xlib, но документация по ней не полная. Рисовать что-то по пикселам очень непроизводительно, поэтому есть набор примитивов, часть которых обычно поддерживается аппаратно. Там есть пример рисования некоторых примитивов кроме пиксмапов. Cairo использует libXCB. Кстати если разберётесь, может быть ответите на мой вопрос четырёхлетней давности?

Ответ 2



Так как Xorg не является частью ядра системы, то рисовать в XOrg окне средствами ядра "немножко сложновато". Поэтому есть два варианта: Если это Xorg окно, то и он должен рисовать. Конкретно точку можно нарисовать с помощью XDrawPoint. А здесь есть пример, как рисовать. Если хочется рисовать именно "средствами ядра", то тогда нужен уже не Xorg, а консоль с фреймбуфером. Есть примеры - https://stackoverflow.com/questions/4996777/paint-pixels-to-screen-via-linux-framebuffer или https://gist.github.com/FredEckert/3425429 , но тут есть одна особенность - если Xorg запущен, то лучше рисовать именно Xorg. А иначе будет в лучшем случае просто "побитая картинка" или просто ничего не будет.

Комментариев нет:

Отправить комментарий