Меня довольно давно интересовал вопрос вывода графики на Linux и то, как ИМЕННО это реализовано. И у меня появилась мысль реализовать свою граф. библиотеку с помощью низкоуровневого взаимодействия с драйверами и DRM в целом.
Взглянув на загаловки вроде fb.h можно найти структуры позволяющие взаимодействовать с экраном и тд., но у меня остаются вопросы по взаимодействию с этим
И все примеры, коих, я нашёл не так много(возможно, потому, что искал очень мало) Беря хотя бы эту статейку с вопроса на StackOverflow «Графика на чистом c++?» http://betteros.org/tut/graphics1.php многие примеры просто не запускаются из-за ошибок с mmap, например, или неправильных определений, которые почему-то на статье признаны «рабочими». Возможно, я что-то упускаю, запуская это с ядра? САМ ВОПРОС:
Предположим, мне необходимо с помощью низкоуровневых взаимодействий из юзерспейса с помощью framebuffer сделать линию, допустим, белого цвета на экране от середины левого края до середины правого. Как именно должна выглядеть реализация? Я должен открыть сам буффер,рассчитать занимаемое место в памяти экраном и…Выделить для него место? И mmap вывести записанные данные?
- Как реализовывается графика на linux в целом? Как в этом участвует FrameBuffer?
- Каким образом X-сервер выводит данные на экран?
- Где можно найти документации по подобного рода вопросам?Соурсы?
P.S Первая статья на Linux.org, не судите строго, буду учиться, а конструктивной критике - буду рад :)
UPD: Спустя время, подзабыв этот вопрос, смотрю на него, как на начало-начал. Для тех, кто заинтересуется подобного рода темой:
Графический стек линукс(в целом, система и взаимосвязи графики) работает на основе ресурсов видеокарты(того, что в целом, может отображать графику, как, например, фреймбуффер(/dev/fb*)). И, на основе этого работают все графические подпрограммы(то, что отображает окна на твоей ОС), вроде X-сервер, Wayland и тд., которые и дают начало всяким GTK для прикладной отрисовки. В целом, лучшие графики, которые я смог найти по этому поводу были вот в этом квалификационном документе: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjxipXqtr77AhWzRvEDHYjzAnAQFnoECBgQAQ&url=https%3A%2F%2Foops.math.spbu.ru%2FSE%2Fdiploma%2F2017%2Fbmo%2F444-Butrova-report.pdf&usg=AOvVaw2gPxiVBjRxUTbSj4wNOrn0
Но, если вы на данный момент находитесь на системе, которая для отрисовки использует X11(X-сервер)(За иные не ручаюсь, не смотрел), то доступа к видеопамяти он вам не даст, как и использовать фреймбуффер(Что очень очевидно, но пишу для таких же недалёких как и я, что несколько радикально и дотошно относятся к этой теме) Поэтому, Ctrl-Alt-F*, для вызова другого ОС окна(Честно говоря, не знаю, как корректно описать подобное на основе TTY драйвера) на котором все примеры из ссылки выше вполне будут работать.
Что ж…Теперь пора занятся разработкой собственной граф. подпрограммы, менеджера окон и..Пожалуй, это будет чем-то вроде наиболее низкоуровнего способа отрисовки графики(практически с нуля)(поправьте, если не прав, ведь знаю про всякие API(подчеркну, API)10h на ассемблере)
Уверен, что допустил очень много ошибок, расписывая это, но, опять же я не столь компетентен в этой теме. Думаю, если иные люди поправят во многом - это будет хорошим опытом, для всех, кто читает сие статейку.
Вопрос закрыт