Closed. 这个问题不符合堆栈溢出指南 /help/closed-questions 。目前不接受答案。
OpenGL 和 Windows Remote 不能很好地配合。
此问题的解决方案取决于用例,并且答案分散在网络的各个角落。
当我开始研究这个问题时,我希望这篇文章存在,无论是针对编码员还是非编码员。
Problem:
Windows 的 RDP 会话不会暴露显卡,至少不会直接暴露。例如,您无法更改桌面分辨率,而显卡驱动程序通常只是禁用其设置菜单。因此,启动高于 v1.1 的 OpenGL 上下文会失败。不幸的是,特别是在支持 IRC 中,经常建议的“不要使用 WindowsRemote”对于许多人来说并不是一个选择。在许多企业环境中,Windows Remote 是一种经常使用的工具,并且应用程序也必须在那里工作。
非编码器解决方法
您可以启动 OpenGL 程序,使其能够查看显卡,创建 opengl 上下文,然后通过 WindowsRemote 进行连接。这始终有效,因为 Windows 远程仅传输窗口内容。这可以通过以下方式完成:
批处理脚本,用于关闭会话并启动程序,允许您连接到已经运行的程序。 (Source https://social.technet.microsoft.com/Forums/windowsserver/en-US/c8295ef8-3711-4576-9293-2c4965280165/opengl-and-remote-desktop?forum=winserverTS )
使用VNC或其他方式远程进入机器,启动程序,然后切换到Windows Remote。 (简单的数控程序 http://tightvnc.net/ ,还带有一个便携式客户端 https://portableapps.com/node/32118 )
编码器解决方法
(仅适用于 OpenGL ES)将 OpenGL 转换为 DirectX。 DirectX 在 Windows Remote 下工作得非常糟糕,甚至在出现故障时还内置了 DX11 中的软件渲染回退功能。
使用 ANGLE 项目在运行时执行此操作。这就是QT官方建议 https://wiki.qt.io/Qt_5_on_Windows_ANGLE_and_OpenGL#Recommendations 您所做的以及 Chrome 和 Firefox 如何实现 WebGL。 (Source https://github.com/google/angle )
切换到软件渲染作为后备。例如,一些 CAD 软件(例如 3dsMax)可以执行此操作:
在SDL2下,您可以使用SDL_CreateSoftwareRenderer(Source https://wiki.libsdl.org/SDL_CreateSoftwareRenderer )
GLFW 3.3版本将发布OSMesa(Mesa的离屏渲染),同时你可以使用-DGLFW_USE_OSMESA=TRUE构建Github版本,但我个人仍然很难让它运行(Source http://www.glfw.org/docs/3.3/window_guide.html#window_hints_ctx )
直接使用 Mesa 的 LLVM 管道来快速实现 OpenGL。 (Source https://www.mesa3d.org/llvmpipe.html )
Misc:
使用 OpenGL 1.1:Windows 具有 OpenGL 1.1 的内置实现,并且
早些时候。一些游戏引擎有内置的回退功能,因此
在 Windows 远程下工作。
显然有一个中间件,甚至允许在 Windows Remote 上使用 OpenGL 4,但它是一个更大的软件包的一部分,并且是一个商业解决方案。 (Source http://www.thinanywhere.com/products/thinanywhere-for-windows-rdp/ )
任何其他解决方案或更正将不胜感激。
[10] 英伟达 ->https://www.khronos.org/news/permalink/nvidia-provides-opengl-accelerated-remote-desktop-for-geforce-5e88fc2035e342.98417181 https://www.khronos.org/news/permalink/nvidia-provides-opengl-accelerated-remote-desktop-for-geforce-5e88fc2035e342.98417181
根据本文 https://community.esri.com/thread/225251-enabling-gpu-rendering-on-windows-server-2016-windows-10-rdp 看来现在 RDP 可以处理较新版本的 Direct3D 和 OpenGL在 Windows 10 和 Windows Server 2016 上 ,但默认情况下它被组策略禁用。
我认为出于性能原因,禁用了硬件显卡,并且 RDP 使用仅提供一些基准功能的软件模拟显卡驱动程序。
我在尝试运行时偶然发现了这个问题Ultimaker CURA https://ultimaker.com/software/ultimaker-cura 通过标准远程桌面从 Windows 10 客户端到 Windows 10 主机。 Cura大喊“无法初始化OpenGL 2.0上下文”。我还注意到重复主机 https://www.repetier.com/ “预览”窗口运行速度非常慢,并且 Repetier 只检测到OpenGL 1.1
卡片。几乎符合“唯一的基线特征”的描述。
通过跑步gpedit.msc
然后导航到
本地计算机策略\计算机配置\管理模板\Windows 组件\远程桌面服务\远程桌面会话主机\远程会话环境
并改变值
对所有远程桌面服务会话使用硬件图形适配器
我能够成功运行Ultimaker CURA https://ultimaker.com/software/ultimaker-cura via 没有任何问题,并且 Repetier-Host 现在显示OpenGL 4.6
,一切终于开始了fast 正如它应该。
注释来自发生故障 https://stackoverflow.com/users/44729/genpfault :
与往常一样,本政策保存在 HKLM 注册表组中
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services
Set REG_DWORD:bEnumerateHWBeforeSW
to 1
在 RDP 中使用 GPU 开启。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)