首页 > 解决方案 > OpenGL over Windows Remote 的当前状态和解决方案

问题描述

OpenGL 和 Windows Remote 不能很好地配合。

对此的解决方案取决于用例,并且答案分散在网络的广阔深处。这是我开始研究时希望存在的一篇文章,适用于编码人员和非编码人员。

问题:

Windows 的 RDP 会话不公开显卡,至少不直接公开。例如,您无法更改桌面分辨率,而显卡驱动程序通常只是禁用它们的设置菜单。因此,启动高于 v1.1 的 OpenGL 上下文会失败。特别是在支持 IRC 中,经常建议“不要使用 WindowsRemote”,不幸的是,这不是许多人的选择。在许多企业环境中,Windows Remote 是一个经常使用的工具,并且应用程序也必须在那里工作。

非编码器解决方法

你可以启动 OpenGL 程序,让它看到显卡,创建一个 opengl 上下文,然后通过 WindowsRemote 连接。这总是有效的,因为 Windows 远程只是传输窗口内容。这可以通过以下方式实现:

编码器解决方法

(仅适用于 OpenGL ES)将 OpenGL 转换为 DirectX。DirectX 在 Windows Remote 下完美运行,如果出现故障,甚至在 DX11 中内置了软件渲染回退。

切换到软件渲染作为后备。例如,一些 CAD 软件(如 3dsMax)会这样做:

杂项:

非常感谢任何其他解决方案或更正。

[10] 英伟达 -> https://www.khronos.org/news/permalink/nvidia-provides-opengl-accelerated-remote-desktop-for-geforce-5e88fc2035e342.98417181

标签: openglopengl-essdlremote-accessglfw

解决方案


根据这篇文章,现在 RDP 似乎在 Windows 10 和 Windows Server 2016 上处理较新版本的 Direct3D 和 OpenGL ,但默认情况下它被组策略禁用。

我想出于性能原因,禁用了使用硬件显卡,而 RDP 使用了仅提供一些基线功能的软件模拟显卡驱动程序。

我在尝试通过标准远程桌面从 Windows 10 客户端到 Windows 10 主机运行Ultimaker CURA时偶然发现了这个问题。Cura 大喊“无法初始化 OpenGL 2.0 上下文”。我还注意到Repetier Host 的“预览”窗口运行速度非常慢,而且 Repetier 只检测到一张OpenGL 1.1卡。非常符合“唯一基线特征”的描述。

通过运行gpedit.msc然后导航到

本地计算机策略\计算机配置\管理模板\Windows 组件\远程桌面服务\远程桌面会话主机\远程会话环境

并改变价值

为所有远程桌面服务会话使用硬件图形适配器

我能够毫无问题地成功运行Ultimaker CURA,并且 Repetier-Host 现在显示OpenGL 4.6,一切最终都运行得很快


来自genpfault的注释:像往常一样,此策略保存在 HKLM 注册表组中

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services

设置REG_DWORD:bEnumerateHWBeforeSW1使用 RDP 中的 GPU 打开。


推荐阅读