为多个显示器设置 OpenGL

Posted

技术标签:

【中文标题】为多个显示器设置 OpenGL【英文标题】:Setup OpenGL for multiple monitors 【发布时间】:2014-10-13 04:10:30 【问题描述】:

我开始在 Windows 7 计算机上进行 OpenGL 编程,我的应用程序由全屏窗口组成,其中每个监视器都有一个单独的窗口和线程。我必须采取哪些步骤才能获得连续场景?我仍然对许多 OpenGL 概念以及我应该如何处理它感到困惑。除了视图矩阵和上下文额外工作之外,它与单显示器渲染基本相同,还是更复杂?

编辑: 我找到了一个有信息的网站,但它很模糊,没有示例代码: http://www.rchoetzlein.com/theory/2010/multi-monitor-rendering-in-opengl/

【问题讨论】:

是的,您必须为每个窗口单独渲染,以某种方式设置投影矩阵,如果您将窗口按边缘排列,就好像它们是瓷砖一样,您将获得无缝图像。这称为平铺渲染。对我来说,写一个全面的答案为时已晚,但它可能会在搜索字符串“OpenGL 平铺渲染”上为您提供一些结果。 谢谢,我一直在寻找要在搜索中使用的准确词汇。我还没有找到一个与我的问题直接相关的问题(尽管这可能只是我的无知)。我不确定我看到的许多帖子是否在谈论多显示器或平铺精灵。我想看看需要什么 API 调用方式和一个简单的步骤方法。我知道这是一个困难的问题,所以当我被允许时,我会悬赏它。 其实平铺渲染并没有那么难。碰巧的是,我目前正在为另一个处理上下文重用或在多个窗口之间共享的 SO 编写一个示例。您的问题也很适合将与您的问题相关的代码放入该示例中。 【参考方案1】:

我的第一个问题是为什么需要两个不同的 OpenGL 窗口?

您是否考虑过游戏行业已经在使用的解决方案?许多支持多显示器设置的 3D 应用程序和游戏实际上并不管理自己的单独窗口,而是让 GPU 管理多个屏幕上的渲染。我在今年的一个项目中使用了它,以在电视屏幕上显示 oculus rift 视图和观众视图。我没有管理两个 OpenGL 场景,只是两个不同的“相机”。

http://www.amd.com/en-us/innovations/software-technologies/eyefinity

http://www.nvidia.com/object/3d-vision-surround-technology.html

优点

更容易编码。您只需将代码视为一个场景,不需要奇怪的场景管理。 优雅降级。如果您的用户只有一个屏幕而不是两个屏幕,那么您的应用在没有一些 UI 细节的情况下仍然可以正常运行。 更好的性能(轶事)。在我自己的项目中,我发现使用两个不同的 3D 窗口具有更好的性能。

缺点

缺乏控制。您应受驱动程序提供商的要求。例如,无论出于何种原因,nVidia 环绕声都要求在 SLI 中设置 GPU。 支持有限。只有相对较新的显卡支持这种多显示器技术。 当屏幕分辨率相同时效果最佳。处理不同的纵横比甚至相同纵横比的分辨率可能很困难。 不方便。当用户可能有自己的首选模式时,他们必须将他们的计算机设置为多显示器模式。

【讨论】:

兼容性是主要原因。我的媒体层有一个 Windows 版本和一个 Linux 版本——众所周知,Linux 的驱动程序不好。另一个是多卡渲染,这可能超出了这个问题的范围。为了澄清,我想每张卡有一个线程(每张卡处理他们的窗口)。然后用户可以选择多卡多显示器、多显示器单卡、全屏或窗口。我不明白你关于优雅降级的观点。你的意思是它更容易实现吗?我已经有多个窗口在没有 OpenGL 的情况下运行良好。 >然后用户可以选择多卡多显示器、多显示器单卡、全屏或窗口。如果不依赖 GPU 驱动程序和 Eyefinity/Surround/TwinView,您将无法轻松获得所有这些功能。 GPU 技术专为解决这些问题而设计。 OpenGL Tile Rendering 将按照上面的建议工作,但值得投入多少时间取决于您。我的特定标准是我正在编写游戏,而不是窗口管理引擎。 我已经制作了可以在“窗口模式”之间切换的窗口创建和任务系统,但是缺少处理 OpenGL 位的代码部分。 如果您不担心支持多个视频卡并且想要走这条路,请考虑查看mesa3d.org/brianp/TR.html,以获取问题链接中使用的一些技术的具体示例编辑。 我可能会在周末尝试一下。

以上是关于为多个显示器设置 OpenGL的主要内容,如果未能解决你的问题,请参考以下文章

在多个 OpenGL 窗口中显示不同的图形 [关闭]

OpenGL在显示多个对象时显示白屏

我的 opengl 代码应该显示多个立方体,但只显示一个正方形

OpenGL中的多个渲染目标与Cg

我可以在 iPhone 上同时显示多个全屏 OpenGL 视图 (EAGLView) 吗?

光照在 OpenGL 中不显示