【问题标题】:Two windows fullscreen on two different screen两个不同屏幕上的两个窗口全屏
【发布时间】:2010-04-26 09:53:33
【问题描述】:

我实际上正在开发一个将图像显示到圆顶上的应用程序。

圆顶投影系统由两台投影机和一台运行 GentoO Linux 和 KDE 的电脑组成,带有 nvidia TwinView 系统。

从这里开始,我使用 SDL 显示全屏窗口,并将我的应用程序显示在两个屏幕上。

但我只是想我需要投影两个不同的图像,每个投影仪上一个。

这就是为什么我寻找一种解决方案来在第一个屏幕(投影仪)上显示全屏窗口,在第二个屏幕上显示另一个。但 SDL 全屏只是将窗口扩展到两个屏幕。

我可以使用任何库(因为它轻巧且免费,因为我会将它包装到我的小型“API”中),或更改显示设置。顺便说一句,有 openGL 支持会很好,因为 SDL 只管理一个窗口 ^^"

【问题讨论】:

  • 您是在使用“大屏幕”仿真还是在每个服务器上使用两个单独的 X 服务器?
  • 我认为双视图模拟大屏幕,但我认为我可以尝试两个单独的 X 服务器。但是我会设法拥有一个桌面,并且会在一个应用程序上启动一个应用程序可以在每个应用程序上带来一个窗口吗?
  • 在下面查看我的答案。我怀疑您是否能够按照我的建议将应用从一个屏幕转移到另一个屏幕。

标签: c++ linux fullscreen


【解决方案1】:

我想我有一个适合你的解决方案。您需要显示与 'xinerama' USE 标志相关的所有内容。然后在您的 X 配置中设置元模式或为每个屏幕使用 nvidia-settings。这使您的监视器在驱动程序看来就像一个屏幕,但会通知窗口管理器您的独立屏幕边界。现在您可以从一个窗口到另一个窗口来回拖动,并且您可以在每个窗口上进行独立的全屏操作。耶!

注意:我已经在 Gnome 上成功测试了这个,但还没有在 KDE 上测试。

祝你好运!

编辑:忘了提,那么您仍然需要弄清楚如何让您的应用程序能够感知元模式。 :p

【讨论】:

    【解决方案2】:

    不错的技巧,但它并不是真正的解决方案。

    您需要使用 SDL 1.3(未在 1.2 上实现)并调用 SDL_SelectVideoDisplay(index_of_mmonitor)(通常第一个监视器为 0,第二个监视器为 1),以便您可以将 SDL 工作输出定向到您喜欢的屏幕(全屏或不全屏) .

    问候。

    【讨论】:

      【解决方案3】:

      我的猜测是 SDL(或者更确切地说是 OpenGL,或者它用于显示图形的任何东西)认为你只有一个 一个大 屏幕.

      因此,在不同的屏幕上显示两种不同的东西是没有意义的(因为您只有一个屏幕)。

      也许我错了,但您应该尝试使用单独的 X 桌面来执行此操作。我现在不在我的 linux 机器上,所以我无法提供尽可能多的帮助,但如果我没记错的话,可以选择拥有两个不同的桌面,而无需拥有两个不同的 X 服务器。

      另一种“解决方案”是计算屏幕的坐标/边界,并在模拟屏幕上巧妙地显示内容,但是:

      1. 太丑了
      2. 容易出错
      3. 我不喜欢它

      【讨论】:

      • 参考您的评论:如果您想在特定显示器上启动应用程序,只需在启动应用程序之前在命令行中使用:export DISPLAY=:0.1(或您想要的任何显示编号) .
      • 对于两个不同的桌面,是的,我认为这是可能的,但是 SDL 只能创建一个窗口,所以我不能在不同的显示中创建两个全屏窗口。您是否碰巧知道一个可以轻松显示许多窗口的库,支持 OpenGl 渲染,甚至只是显示图像(因为我可以创建像素数组)。
      • 我想你可以直接使用 OpenGL 来做到这一点。但我必须承认,我很惊讶 SDL 不能原生地做这样的事情。你也可以看看ogre3d.org,但我不知道你想要达到什么目的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      相关资源
      最近更新 更多