LINUX.ORG.RU

opengl без Х

 


1

2

Всем доброго! Подскажите пожалуйста, я понимаю, что этот пирог крайне многослойный, но я никак не могу сообразить в каком слое какой крем. Использую ffmpeg для просмотра видео в консоле и без иксов. Вопрос в следующем. Могу ли я выйти на работу с opengl из консоли и юзать всю его мощь? В каком направлении и что поискать, почитать? Т.е. в моем случае как будет происходить инициализация и возможно ли это вообще.

KMS/DRM, вроде. MPV так умеет, но там используется по мелочи.

boowai ★★★★
()

Был такой субпроектик Off-screen Mesa. Только я не знаю, можно ли там аппаратное ускорение, или там все swrast. Больше не скажу ничего по теме.

Zubok ★★★★★
()

Тут лучше смотреть в сторону vulkan. Там такое из коробки.

deadplace
()

да, это возможно, chromeos загружается сразу в браузер. в браузере есть свой менеджер окон, композитор и всё остальное, т.е. браузер становится дисплейным сервером. т.е. теми же самыми иксами, но «без иксов».

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

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

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

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

Спасибо) Это было бы замечательное путешествие, но мне видится, что моя задача немного проще. Грубо говоря, я потоком отдаю данные в программу, она запускается. Я такой поюзал конвееры для расчета и как «вишенка на торте» у меня на выходе прога построила 3д графики и прочие модели. Я такой с клавиатуры их покрутил, понял, что это «хорошо». Тыкрнул «Q». Т.е. меня интересует временный захват и использование всего экрана. До момента окончания работы проги. =)

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

X сервер - это всего лишь приложение. Если оно умеет работать с OpenGL то сумеет и другое.

slovazap ★★★★★
()

Можешь, но это не оч хорошее решение, в плане крема, важно четко разделить что обсчёт графики и отрисовка графики это два разных процесса, OpenGL это в большей степени обсчёт, проще говоря любой графический фреймворк описывает набор функций, типа тут вот треугольничек, тут вот свет, тут вот такая то поверхность и набор этих функций не зависит от реализации железа или драйвера, потому каждый видеодрайвер и тащит свою библиотеку предоставляющую интерфейс для OpenGL, Vulkan и пр. и именно поэтому никто не гарантирует что конкретная функция фреймворка будет реализована в той либе, что дал тебе производитель, может быть просто замокана.

Теперь про отрисовку, тут всё намного хуже, много реализаций, у всех свои тонкости, исконно юниксовой классикой считается FrameBuffer, это тупо область памяти которая отображается на экран, можешь поиграться с cat /dev/urandom > /dev/fb0, т.е. тут нет никаких оптимизаций, буферов и пр хрени, ты спросил как раз про FrameBuffer, всё приложухи аля ffmpeg, vlc (Да и в целом QT умеет сразу в FB рисовать интерфейсы) и тому подобное. При использовании OpenGL ты можешь сформировать некий PixelBuf который тебе надо будет передать в FB, но ещё раз, это оч медленный интерфейс сам по себе, был проект KSM Con, в рамках которого пытались улучшить FB и сделать из телеги спортивный корч, гуглить лень, могу ошибаться, но помоему проект свернули

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

херню морозишь, что иксы, что wayland работают через DRM, kmscon это просто приложуха опять же работающая через drm, а через fb0 никто десятилетиями уже не работает

anonymous
()
Ответ на: комментарий от adamsgreen

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

что бы ты ни делал, в конце ты изобретёшь икс-сервер. ты вполне можешь не запускать менеджер окон в иксах, менеджер окон - это отдельное приложение.

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

чтобы что-то отрисовать на этой поверхности, из чисто opengl-тулкитов для графики есть nux который использовался в unity, но он тебе наверное не подойдёт. поэтому вариант который у тебя остаётся - загрузиться в браузер и рендерить веб-странички из html и css, а браузер будет это рендерить в opengl.

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

«такова наша жизнь» (с)

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

Спасибо. Я сообразил, что мат.часть по Х-ам провалена. Ушел пилить)))

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

Да, это возможно. Твоему приложению нужно будет запускаться с правами root и договариватся с видеокартой через drm/kms показать твой буфер на экран.

Начать можно тут https://www.kernel.org/doc/html/latest/gpu/index.html

Но лучше посмотреть в исходники weston или иксов.

P.S. Либо можно посмотреть в сорцы EGL из Mesa.

trex6 ★★★★★
()

А почему такая потребность есть? Пилите какой-то встраеваемый девайс для просмотра видео?

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

Скорее способ собственного развития. Манит вот меня) Я долгое время занимался графическим программированием в разном софте (Nuke, Houdini) но удовольствие покинуло меня. Позже познакомился с плюсами и под окошки писал графические панели на опенгл для музейных комплексов. Но удовольствие опять покинуло меня. И только сейчас я понял, что чем хардкорнее (относительно моих знаний), тем дольше удовольствие. Наркоман, короче. =) Конечную цель не определяю, но промежуточную наметил. Хочу маленький программс для концертных визуализаций писануть. Звук приходит, я его цепляю к чему-либо в визуализации. Смотрю - радуюсь. Желания - странная штука)

adamsgreen
() автор топика
Ответ на: комментарий от anonymous

Ты вопрос то прочитай - «Могу ли я выйти на работу с opengl из консоли и юзать всю его мощь?», а то лезешь со своими иксами, KMSCON - Linux KMS/DRM based Virtual Console, fb активно исползуется в эмбедете, кстати поверх него могут и иксы работать - Direct FB

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

неплохой манёвр, но нет. KMSCON тут непричём, не испльзуя иксы/вейланд opengl можно завести только через libdrm и прочее. KMSCON это как бы «эмулятор терминала» не использующий иксы, он ничем связанным с opengl не управляет, а сам является «клиентом»

anonymous
()

ну как бы есть offline отрисовка в которой достаточно проинициализировать egl и разработчик может полностью пользовать opengl и выполнять отрисовку просто в буфер, с которым можно делать что угодно, пример

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

Хочу маленький программс для концертных визуализаций писануть. Звук приходит, я его цепляю к чему-либо в визуализации. Смотрю - радуюсь. Желания - странная штука)

О, дружище, читая тебя вспомнил такую штуку из мира демосцены, как Bonzomatic:

https://github.com/Gargaj/Bonzomatic

Этот софт как раз предназначен для визуализации музыки посредством самописных шейдеров. В демосцене последних лет существует даже такое состязание: два кодера соревнуются в том, кто из них напишет более крутую шейдерную визуализацию под играющую музыку за ограниченное время. На демопати Revision 2018, которое проходило в Германии, победил наш земляк, и пользователь ЛОРа @w23, кстати.

Как пример подобной визуализации под музыку видео с этого мероприятия:

https://www.youtube.com/watch?v=ZwR0zFe57Y4

Поковыряйся в коде этой программы, может возмёшь оттуда себе какие-нибудь концепции для воплощения своей идеи в жизнь. Софтина вроде в public domain. Удачи!

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

причём здесь иксы? иксы, как и вейленд - это ненужное легаси, я же написал, что надо загрузиться в браузер и отрендерить веб-страничку.

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

не испльзуя иксы/вейланд opengl можно завести только через libdrm и прочее

libdrm это в последние год-два, до этого все производители GPU для ARM-SoC делали реализацию EGL для фреймбуфера. Они бы и счас делали но Google перешел на KMS/DRM в своей эталонной реализации AOSP.

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

запускаешь икс-сервер,

Насколько быстро его можно запустить? Есть ли сервер, который на Intel/AMD/nvidia запустится быстрее 20 миллисекунд?

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

20 миллисекунд

фига ты. тут лоровские страдальцы минутами ждут когда fx кукуруза и механический hdd пропердятся, а ты про миллисекунды

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

Исходя из частоты кадров. Не тратить ни одного кадра на ожидание.

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

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

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

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

Насколько я помню, EGL предлагает создавать контекст на основе уже существующей поверхности/окна. Не помню там функциональности для работы в фреймбуфером напрямую. Пропустил?

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

Есть ли сервер, который на Intel/AMD/nvidia запустится быстрее 20 миллисекунд?

kmscube на Intel запускается с ощутимой задержкой. Навскидку — 300-700 мс. И это без лишних прослоек. Так что не думаю, что X-сервер сможет обеспечить запуск приложения быстрее чем эти 300-700 мс.

i-rinat ★★★★★
()

opengl без Х

Фу, какие непристойности вы говорите…

просто ужас

Владимир

anonymous
()

возьми просто libSDL, оно умеет напрямую с libdrm работать. К нему возьми Dear IMGUI для GUI и в нем де свои графики на виджетах построишь. Это наверное самое простое что могу посоветовать. Компилируй с -lEGL -lGL чтобы OpenGL подцепился, ну там зависимости могут и из SDL подтянуться. Заодно получишь работу и в X11 и в голой консоли и в wayland.

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

и в wayland

Слабин, не хочу вас огорчать, на вайленд не готов еще.

Владимир

anonymous
()
Ответ на: комментарий от slapin

И даже в винде

Слабин, вы как-то подписались на меня? Мне приятно, что вы считаете меня хорошим собеседником.

Владимир

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.