LINUX.ORG.RU

Програмирование графики в linux

 , , ,


2

3

Привет! Есть у меня минимальная базовая система Linux kernel + основные драйвера и утилиты busybox. Нужно написать GUI приложение. У меня есть собственные библиотеки GUI из прошлых мох проектов, но проблема в другом... Как реализовать доступ к графическому контроллеру? Как переключить в режим графического вывода и установить разрешение дисплея? Можно ли подключить библиотеку OpenGL?


Как реализовать доступ к графическому контроллеру?

Через DRI, ясен хрен.

P.S. Не страдай фигнёй, возьми Qt.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)

Рекомендую SDL, это кроссплатформенная игровая библиотека (графика, ввод, звук и т.д.). Можно использовать в ней OpenGL. Смотри libsdl.org и http://linuxgamesdev.blogspot.ru/2010/10/sdl-opengl.html

В SDL 2.0 инициализация немного отличается, и она автоматически умеет рисовать 2D через OpenGL/DirectX, ничего подключать не нужно. Правда, когда я смотрел ее последний раз, то сильно глючила, как сейчас - не знаю. Версия 1.2 работает надежно. Вот урок по версии 2.0 на Хабре: http://habrahabr.ru/post/198600/

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

Спасибо за рекомендацию. Попробовал SDL2

SDL_Init(SDL_INIT_EVERYTHING);
win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN); 

Зависимостей уйма

        linux-gate.so.1
	libstdc++.so.6
	libm.so.6
	libgcc_s.so.1
	libc.so.6
	libasound.so.2
	libdl.so.2
	libpulse-simple.so.0
	libpulse.so.0
	libX11.so.6
	libXext.so.6
	libXcursor.so.1
	libXinerama.so.1
	libXi.so.6
	libXrandr.so.2
	libXss.so.1
	libXxf86vm.so.1
	libwayland-egl.so.1
	libwayland-client.so.0
	libwayland-cursor.so.0
	libxkbcommon.so.0
	libpthread.so.0
	librt.so.1
	libpulsecommon-5.0.so
	libcap.so.2
	libjson-c.so.2
	libdbus-1.so.3
	libxcb.so.1
	libXrender.so.1
	libXfixes.so.3
	libffi.so.6
	libX11-xcb.so.1
	libICE.so.6
	libSM.so.6
	libXtst.so.6
	libsystemd.so.0
	libwrap.so.0
	libsndfile.so.1
	libasyncns.so.0
	libattr.so.1
	libXau.so.6
	libXdmcp.so.6
	libuuid.so.1
	liblzma.so.5
	libgcrypt.so.20
	libresolv.so.2
	libnsl.so.1
	libFLAC.so.8
	libvorbisenc.so.2
	libgpg-error.so.0
	libogg.so.0
	libvorbis.so.0)
 
Все бы ничего но я против X-ов...

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

как сейчас - не знаю

Вроде уже более-менее, говорят. Всё-таки добрались до версии 2.0.3. Правда, сам SDL2 не пользовался.

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

Есть у меня один бинарник(выдрал из одного встраиваемого устройство) весит 20мб... Там реализовано полноценное GUI (кнопки,чекбохсы, текст..) С выводом на USB-LCD дисплей(что-то вроде framebuffer->USB-framebuffer). Вся система грузится где то за 30 секунд... Вот его зависимости

linux-gate.so.1
	librt.so.1
	libssl.so.6
	libxml2.so.2
	libz.so.1
	libuuid.so.1
	libstdc++.so.6
	libm.so.6
	libgcc_s.so.1
	libc.so.6
	libcrypto.so.6
	liblzma.so.5
Хочется и мне сделать что-то вроде этого но без USB-LCD.

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

Что на счет framebuffer? Qt ресурсоемкая...

Qt (Qt 4) может работать без иксов вообще. Qt 5 тоже может, но там посложнее.

Вот пруф-пример: http://rghost.net/7CYtBsbgh/image.png

И это мне потребовалось собрать Qt с поддержкой gstreamer и glib. Можно без них. Тогда вообще зависеть будет только от QtGui/QtCore.

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

Это потому что так опакетили мейнтейнеры дистрибутива.

Тебе нужно следующее:

1. Собрать SDL с поддержкой framebuffer only (желательно статически) и установить его куда-нибудь в /opt/sdl-static
2. Собрать свою программку с тем обрезанным SDL.
3. Ctrl+Alt+F1 и запускаешь там своё творение. Вроде бы как от рута.

Точно знаю что SDL 1.2.15 имеет поддержку LinuxFB, насчёт SDL 2.x.x — ещё не тыкал.

Но если тебе нужно именно:

полноценное GUI (кнопки,чекбохсы, текст..)

То смотри в сторону Qt 4, собранный в минимальной комплектации (QtCore/QtGui).

В SDL нет подобных примитивов, всё нужно будет писать самому.

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

В SDL нет подобных примитивов, всё нужно будет писать самому.

У меня уже есть собственно написанная либы с примитивами и WM. Писал для микроконтроллера+LCD+тачскрн) портировать не проблема)

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

Можно же вроде eglfs поверх kms запустить. А там рисовать чем удобно. Вроде на малине так делают.

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

Оно на крестах, так ОП вроде не говорил, что ему нужно на Pure C. На Си гуя не видел (ну кроме Gtk, но он ОПу не подойдет).

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

На Си гуя не видел

OpenGL'ная какая-то вещь есть. А еще всякие motif (правда, тут уже иксы нужны).

А вообще, нафиг в консоли графика? ncurses — и вперед! Ну или OpenGL через framebuffer (только я сомневаюсь, что оно не будет жесточайше тормозить).

Кстати, столкнулся недавно с такой неприятностью: если по ssh на "малинке" запустить OpenGL'ное приложение с клиента с nvidia, то нифига никакой графики не будет. Какой-то косяк в блобе. Может его и починили, но поддержку видеокарты выкинули — обновляться смысла нет.

Eddy_Em ☆☆☆☆☆
()

Ты эту минимальную базовую систему как сделал? Как она у тебя появилась? От этого будет зависеть мой ответ или совет...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Eddy_Em

Ну или OpenGL через framebuffer (только я сомневаюсь, что оно не будет жесточайше тормозить).

Уж лучше быстродействие чем красиво но с тормозами... Есть еще идеи?

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

когда я смотрел ее последний раз, то сильно глючила

в 2008м пилили на ней POS, ничо не глючило

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

DirectFB тогда

С DirectFB пока не смог разобраться. Есть еще ugfx но тоже не смог разобраться, инфы по линуксу не нашел... Пробовал AntTweakBar, SFML-2.3. жутко грузит процессор.

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

Как реализовать доступ к графическому контроллеру?

Напрямую к графическому контроллеру? Может, лучше Xlib или даже что-то ещё выше уровнем?

Как переключить в режим графического вывода и установить разрешение дисплея?

man xrandr

Можно ли подключить библиотеку OpenGL?

Разрешаю.

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

Да, я уже прочитал. В таком случае можно заюзать DirectFB.

CYB3R ★★★★★
()

А почему иксами не воспользоваться? Если в системе нормальный opengl, а не gles, то в иксах всё будет сильно проще.

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

Взялся за gtk+-directfb. Компиляция прошла успешно, посмотрю что из этого получится. Еще такой вопрос возник... Как разом скопировать разделяемые библиотеки (зависимости конкретного бинарника) в папку сборки?

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

Можно собрать SDL без иксов, однако без иксов скорее всего никакого OpenGL тебе не будет, только низкоуровневые операции с буфером экрана (типа вывода bitmap). Если тебе этого достаточно, то просто пересобери SDL, если нужна производительность и OpenGL (к слову, вывод 2D через OpenGL тоже работает быстрее), то придётся поставить иксы.

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

Как разом скопировать разделяемые библиотеки (зависимости конкретного бинарника) в папку сборки?

cp $(ldd sourcebin | cut -d \( -f1 | cut -d \> -f2)  destination-folder/ 

Сам спросил, сам же и ответил)))

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

Это всё лишь слои абстракции, так что разницы принципиально никакой.

Топикстартеру посмотреть в сторону DirectFB, однозначно. Его даже тулкиты умеют, что уж там о всяких SDL.

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

ldd + ручками копировать

А зачем? Cкриптик все сам скопирует...

 #!/bin/sh
# https://www.linux.org.ru/people/Simn/profile 
echo -n "Enter filename->"
read filnm
echo -n "Enter destination folder->"
read fold
ldd $filnm
cp $(ldd $filnm | cut -d \( -f1 | cut -d \> -f2)  $fold 

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