2010-04-26 4 views
1

Я фактически работаю над приложением, чтобы отображать изображение на куполе.Два окна в полноэкранном режиме на двух разных экранах

Купольная проекционная система состоит из двух проекторов и компьютеров, работающих под управлением GentoO Linux и KDE, с системой nvidia TwinView.

С тех пор я использовал SDL для отображения полноэкранных окон, и он отображает мое приложение на двух экранах.

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

Именно поэтому я ищу решение для отображения полноэкранного окна на первом экране (проекторе), а другое на втором. Но полноэкранный режим SDL просто расширяет окно до двух экранов.

Я могу использовать любое librairie (поскольку оно легкое и бесплатное, так как я оберну его в мой маленький «API») или измените настройку отображения. Кстати, было бы неплохо иметь поддержку OpenGL, так как SDL управлять только одно окно ^^»

+0

Вы используете эмуляцию «большого экрана» или два отдельных сервера X на каждом? – ereOn

+0

Twin view эмулировать большой экран, я думаю, но я думаю, что я мог бы попробовать два отдельных X sevrer. Но удастся ли мне иметь рабочий стол с этим, и запускать приложение на одном может принести окно на каждом? – sirithang

+0

См. Мой ответ ниже. Я сомневаюсь, что вы сможете принести приложение с одного экрана на другой, используя то, что я предложил. – ereOn

ответ

0

Я думаю, что SDL (или, скорее, OpenGL, или все, что он использует позади, чтобы отображать графику) считает, что вы только один большой экран.

Поэтому, показывая две разные вещи на разных экранах не имеет смысла (потому что у вас есть только один экран).

Может быть, я ошибаюсь, но вы должны попробовать использовать отдельные X-десктопы для этого. Я не нахожусь в своем linux box прямо сейчас, поэтому я не могу ничего с этим поделать, но если бы я хорошо помнил, была возможность иметь два разных десктопа без двух разных X-серверов.

Другой «решение» было бы вычислить координаты/границу ваших экранов и отображать вещи умно на ваш одном эмулированном экране, но:

  1. Это некрасиво
  2. Ошибка склонной
  3. Я не» t нравится
+0

Ссылаясь на ваш комментарий: если вы хотите запустить приложение на определенном дисплее, просто используйте: экспортируйте DISPLAY =: 0,1 (или любой номер дисплея, который вы хотите) в командной строке, прежде чем запускать приложение. – ereOn

+0

для двух разных Desktop, да, я думаю, что это возможно, но снова SDL может создать только одно окно, поэтому я не могу создать два окна в полноэкранном режиме на разных дисплеях. Возможно, вам повезет с librairy, который может легко отображать многие окна с поддержкой рендеринга OpenGl или даже просто показывать изображение (так как я могу создать массив пикселей). – sirithang

+0

Я полагаю, вы можете это сделать напрямую * OpenGL *. Но я должен признать, что я удивлен, что * SDL * не может сделать такую ​​вещь изначально. Вы также можете взглянуть на http://www.ogre3d.org/, но я не знаю, чего вы хотите достичь. – ereOn

1

Я думаю, у меня есть решение для вас. Вам нужно создать все, что связано с флагом USE «xinerama». Затем установите мета-режимы в вашей конфигурации X или с помощью настроек nvidia для каждого экрана. Это делает ваши мониторы похожими на один экран на драйвер, но информирует диспетчера окон ваших независимых границ экрана. Теперь вы можете перетаскивать назад и назад из окна в окно, и вы можете делать и независимый полноэкранный режим для каждого. Ура!

Примечание: Я успешно проверил это на Gnome, но не KDE.

Удачи!

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

1

Отличный трюк, но на самом деле это не решение.

Вместо этого вам необходимо использовать SDL 1.3 (не реализовано на 1.2) и вызвать SDL_SelectVideoDisplay (index_of_mmonitor) (обычно 0 для первого монитора и 1 для второго), поэтому вы можете направить свой вывод SDL на выбранный вами экран (полноэкранный режим или нет).

С уважением.

Смежные вопросы