LINUX.ORG.RU

Размеры монитора, экрана в программе на OpenGL

 , ,


0

2

Делаю небольшую программу на Си для Linux/X Window. При запуске надо задать размер окна программы. Окно рисую и делаю средствами OpenGL/GLUT. Как лучше всего передавать программе размер, если она будет выбирать из всех вариантов наиболее подходящий - автоматически? Учитывая случаи с двумя мониторами и т.п. Я нашёл утилиту xrandr, передавать w/h программе можно через аргументы командной строки.

Нашел вариант на stackexchange.com:

$ xdpyinfo  | awk '/dimensions:/{print $2; exit}'
1366x768
Какие ещё варианты есть? Например, через X Window API. Что делать в случае других систем типа Mir?

★★★★★

Что имеется в виду под «надо задать размер окна программы»? Это должен делать юзер или надо просто размер экрана получить?

Если второе то glutGet(GLUT_SCREEN_WIDTH/HEIGHT), но глут это олдовая штука, не расчитанная на несколько мониторов и эта функция скорее всего вернет размер главного экрана.

Юзай SDL2 там есть поддержка нескольких дисплеев и оно будет работать и на иксах, и на мирах, и в вейланде, и в других ОС.

oh-la-la ()
Ответ на: комментарий от oh-la-la

SDL2

+1 к SDL2, именно это является оптимальным решением для поддержки множества платформ для озвученной задачи

xrandr штука хорошая но лишь в рамках иксов...

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от oh-la-la

Если второе то glutGet(GLUT_SCREEN_WIDTH/HEIGHT), но глут это олдовая штука,

А в OSX еще и помечена как deprecated. И есть шанс, что glut выпилят в самый неподходящий момент.

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

Это либа на пару сотен строк. Можно держать в своем дереве исходников и линковать статикой, даже нужно так делать если речь идет о кроссплатформе. Поэтому пусть выпиливают.

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

Можно держать в своем дереве исходников и линковать статикой

Я всегда знал, что виндузятником глубоко насрать на лицензию и поддержку. Им важно высрать свой «профессиональный» продукт для «профессионалов».

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

А что взамен?

1. Вариант предложили выше.
2. Сделать абстракцию и реализовать нативную оконную систему.

Я в своем вьювере склоняюсь ко второму варианту, но лень пока побеждает.
В игровом движке используется нативная реализация.

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

Для решения лицензионных проблем есть библиотеки-клоны. Поддержку проще осуществлять самому, так как никогда не знаешь когда исправят касающуюся тебя проблему в каком-нибудь дебиане и при «исправлении» не сломают ли чего.

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

2. Сделать абстракцию и реализовать нативную оконную систему.

То есть написать свой glut. И чем это лучше моего варианта с включением уже написанного и работающего кода в свое дерево исходников?

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

Я в своем вьювере склоняюсь ко второму варианту, но лень пока побеждает.

Спасибо, что упомянул про свои проекты. С удовольствием прочитал про Simple Viewer GL, я ведь такой же собирался делать на прошлой неделе. Хорошо, что у тебя такое уже есть. Скачал, буду смотреть исходный код.
Можно будет к тебе присоединиться/к твоей команде? У меня вот такая простая штука пока что существует для кропа фотографий, собираюсь дорабатывать: https://github.com/werkzeuge/krop (добавить ресайз, рамки, поворот). Там у меня пока что хорошая «фишка» - это автоматический оптимальный ресайз в целое число раз от оригинального. Плюс, быстрая отрисовка. Минус - медленно загружаются фото через FreeImage, думаю подцепить JPEGLIB или сделать в фоне, нарастив функционал до ~Picasa. Для нее я и буду использовать glutGet(GLUT_SCREEN_WIDTH/HEIGHT). В сторону GLFW.

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

В сторону GLFW я тоже смотрел, но пока всерьёз не брался.

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

Поддержку проще осуществлять самому, так как никогда не знаешь когда исправят касающуюся тебя проблему в каком-нибудь дебиане и при «исправлении» не сломают ли чего.

Я вот жду, когда в вижле поправят баги, которые тянутся годами. Но видимо профессиональным профессионалам некогда.

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

То есть написать свой glut. И чем это лучше моего варианта с включением уже написанного и работающего кода в свое дерево исходников?

Я уже написал выше, чем это лучше.

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

Можно будет к тебе присоединиться/к твоей команде?

Это возможно.

думаю подцепить JPEGLIB или сделать в фоне, нарастив функционал до ~Picasa.

Тогда лучше отдельным проектом. У меня ведь simple viewer ;)

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

Как обойти лицензионные ограничения я написал.

В этом вся суть вам подобных. А потом гордо рассказывать о профессиональном продукте для профессионалов и обсирать оупен-сорс.

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

Видимо не раньше исправления багов в «конкурирующем» vim'е.

Очевидно, что холопы долго будут ждать, когда им царь поправит их профессиональную студию.

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

Ты лучше скажи что с багами в vim'е. Например, когда наконец копипаст заработает без порчи текста?

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