Windows Remote 上 OpenGL 的现状和解决方案 [关闭]

2023-12-23

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-curavia 没有任何问题,并且 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(使用前将#替换为@)

Windows Remote 上 OpenGL 的现状和解决方案 [关闭] 的相关文章

  • 如何在opengl中使用四元数绕屏幕中心旋转?

    我正在尝试实现轨迹球 轨迹球旋转 但我的中心有问题 回转 无论如何 我希望中心成为屏幕的中心 让我解释一下到目前为止我所做的事情 我创建了一个四元数 旋转轴 向量起点x向量结束 角度 向量起点 向量结束 从该四元数中 我创建了一个旋转矩阵
  • matplotlib:渲染到缓冲区/访问像素数据

    我想使用 matplotlib 生成的图作为 OpenGL 中的纹理 到目前为止 我遇到的 matplotlib 的 OpenGL 后端要么不成熟 要么已经停止使用 所以我想避免使用它们 我当前的方法是将图形保存到临时 png 文件中 并从
  • 纹理采样:根据LOD值计算BIAS值

    GL ES 2 0 中的功能纹理2DLod在片段着色器中不可用 我需要移植 GLSL 着色器 在 GL ES 2 0 中我只能使用二维纹理 sampler2D 采样器 vec2 坐标 浮点数bias 告诉我如何计算 a 的值bias相当于已
  • 如何为 glDrawElements() 指定每个图元的颜色

    我想渲染一个索引几何体 所以 我有一堆顶点和关联的排序索引 我在用glDrawElements 渲染 2 个四边形 如下所示 现在 我知道我可以使用glColorPointer 用于指定每个顶点的颜色 我的问题是 我可以指定吗每个基元的颜色
  • 如何在OpenGL中像这样绘制连接的带状线

    我想用以下方式绘制一系列连接线 GL LINE STRIP 我尝试过自己编写代码 但没有得到想要的结果 所以我来到这里 帮助我找出我错在哪里 这里我只给出我的draw 函数 glBegin GL LINE STRIP glVertex2f
  • GPU-android opengl es 3.0中的亮度直方图计算

    用于亮度直方图计算 我使用了 Brad Larson 的 GPU image ios 项目中的代码 他使用混合进行直方图计算 连接顶点和片段着色器 顶点着色器 version 300 es in vec4 position out vec3
  • 使用SDL和g++编译找不到-lSDLmain等

    我一直在尝试使用g 来用SDL编译程序 该程序只是一个 main cpp 文件 其中有两条 SDL 测试行 如下所示 include SDL SDL h using namespace std int main void SDL Init
  • Linux 中的 SDL2 空透明窗口

    以下是我尝试在运行 Ubuntu 18 04 和 KDE Plasma 桌面环境的 Linux 计算机上运行的一些示例 SDL2 代码 我安装了多个桌面环境 以防相关 include
  • java中如何获取远程用户的用户名

    我正在开发没有任何登录机制的应用程序 我组织中的任何用户都可以使用它 但我想选择将使用我的工具的远程用户的用户名 我有一个按钮 点击它我想获取他们的用户名 I tried request getRemoteUser got null tri
  • android OpenGl 如何绘制一个矩形

    我想用OpenGL画一个矩形 package jnidemo example com openglsquare import android content Context import android opengl GLSurfaceVi
  • 之前对 GL.Color3 的调用使我的纹理使用了错误的颜色

    制作 2D OpenGL 游戏 渲染帧时 我需要首先绘制一些计算的四边形几何体 然后绘制一些纹理精灵 当我的渲染方法主体仅绘制精灵时 一切正常 但是 当我尝试在精灵之前绘制几何四边形时 精灵的纹理会更改为之前使用的最后一个 GL Color
  • 进行亚像素平移时,2D 纹理会扭曲

    我想知道一个理论推理为什么这是可能的 几何体的平移与纹理映射有何关系 我只能在进行子像素平移时注意到这种效果 如果通过整个像素平移 纹理看起来很好 我正在使用正交投影 GL CLAMP TO EDGE GL NEAREST 片段着色器是hi
  • 三星 S4 上的 Open GL 错误配置错误

    我在 Samsung S4 上收到以下错误 10 21 16 25 44 100 E AndroidRuntime 29778 FATAL EXCEPTION GLThread 11320 10 21 16 25 44 100 E Andr
  • OpenGL 新手: glutMouseFunc

    我试图在单击鼠标后更改球体位置 但在使用 glutMouseFunc 中的 x 和 y 时它不起作用 以下是代码 include stdafx h include
  • 3D 图形批处理

    很多网站 文章都说 批量 批 批 有人可以解释一下着色器中的 批处理 代表什么吗 即 是否 改变纹理 更改任意着色器变量 意味着某些东西不能 批处理 最简单的总结方法就是尝试尽可能少地调用 API 来绘制您需要绘制的内容 使用顶点数组或 V
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • GLSurfaceView onDrawFrame 清除行为

    我在使用 GLSurfaceView 时遇到了不同的行为 据我所知 程序有责任清除每帧的缓冲区 颜色和深度 这意味着 如果我不清除缓冲区 我将获得最后一帧的内容 或双缓冲的前一帧 似乎无论在某些设备上如何 缓冲区都会被清除 我在一些测试设备
  • Windows 7 远程关机:访问被拒绝(5) [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我正在尝试强制从我的笔记本电脑远程关闭我的电脑 machine gt shutdown m 192 168 2 10 s f t 0 192 168
  • CMake 链接 glfw3 lib 错误

    我正在使用 CLion 并且正在使用 glfw3 库编写一个程序 http www glfw org docs latest http www glfw org docs latest 我安装并正确执行了库中的所有操作 我有 a 和 h 文
  • 如何在 Moderngl EGL 后端添加深度缓冲区?

    此代码渲染一个带有抗锯齿功能的彩色三角形 samples 8 当深度缓冲线depth attachment ctx depth texture 512 512 samples 8 被评论 但是当我添加深度缓冲区时 它会在绑定处返回 GL 错

随机推荐

  • 分页库 - 无法停止加载项目

    我正在使用分页库直接从网络加载日期 我是否必须实现逻辑来停止获取数据 就我而言 这可能是当收到的项目计数低于页面大小时 目前 当我到达列表末尾时 库会不断加载新页面 理论上 PageKeyedDataSource有一个结果回调 PageKe
  • 在 PHP 中转换日期时“调用非对象上的成员函数 format()”

    我无法摆脱这个错误消息 调用非对象上的成员函数 format 所以 我继续谷歌搜索并找到一些好的来源 例如这个 StackOverflow 问题 https stackoverflow com questions 2167916 conve
  • 如何通过单个查询删除除主键之外的所有索引

    我计划删除除主键之外的所有索引 我自己制作了主键 但所有其他索引都是 SQL Server 的建议 删除所有非主键索引后 计划使用 SQL Server Profiler 调优模板作为数据库调优顾问并创建索引 通过这种方式 计划不要有未使用
  • 计算一个月中的天数

    有没有什么方法可以计算一个月的天数 Yes Const July As Integer 7 Const Feb As Integer 2 daysInJuly gets 31 Dim daysInJuly As Integer System
  • Swift 从 Firebase 数据库获取特定值

    我正在尝试从 Firebase 数据库获取特定值 我查阅了一些文档 比如Google的 但我无法做到 这是数据库的 JSON 文件 Kullan c ahmetozrahat25 E Mail email protected cdn cgi
  • jQuery 中的去抖动函数

    我正在尝试使用 Ben Alman 的 jquery debounce 库对按钮的输入进行去抖动 http benalman com code projects jquery throttle debounce examples debou
  • 如何使用 Sharepoint 服务器作为 Inno 安装文件的源?

    我正在使用 Inno Setup 进行应用程序设置 此应用程序中包含的许多数据文件都存储在 Microsoft Sharepoint 服务器上 当我尝试使用 Sharepoint 在 来源 中提供的路径时 Files Source http
  • 如何在页面加载时从表中加载一定数量的行,并且仅在用户加载更多行时加载它们?

    我有一个使用 DataTables 的表 它包含大量行 因此这会导致页面加载非常缓慢 因为我假设浏览器会等到表格填满后再显示页面 我只想加载表格的一页 10 行 并且仅在用户浏览表格时显示更多数据 显示加载标志也很棒 我研究并听说过一个名为
  • SSRS 2012 在何处以及如何下载

    我需要 SQL Server 2012 的 SSRS 但是我在任何地方都找不到它 有人可以提供帮助并共享链接吗 我在我的机器上找到了一个但它必需的 Sharepoint 我需要它用于学习目的 这样我就没有共享点 谢谢你 您需要拥有三个不同版
  • Python 中 _ 的作用是什么? [复制]

    这个问题在这里已经有答案了 我在某处看到过关于 Python 中使用的字符如下 print 有人可以帮我解释一下它的作用吗 在交互式翻译中 始终指最后输出的值 gt gt gt 1 1 2 gt gt gt print 2 gt gt gt
  • 如何从 IBM Websphere 迁移到 Tomcat?

    我想要将现有的 IBM Websphere 应用程序服务器迁移到等效的 Tomcat 应用程序服务器吗 其次 如何使用 IBM HTTP Server ihs 配置这个迁移后的 Tomcat 应用服务器 简单介绍一下当前的系统 我们正在使用
  • C/C++ 代码的编码和命名约定测试

    我正在寻找一个可以自定义的脚本 工具来检查和强制执行 C C 代码的编码 命名约定 它应该检查例如 代码行以一定长度包裹 私有变量有前缀 代码缩进正确 所有功能均已记录 我正在从事的许多项目都是由客户外包的 这些客户往往有各种内部编码和命名
  • 是否可以在 android 中将动画 gif 文件设置为动态壁纸?

    我是 Android 平台的新手 我希望开发一个动态壁纸应用 当我在搜索引擎中搜索到此内容时 他们中的许多人创建了动态壁纸作为他们的代码 使用SurfaceView and Canvas 我对此了解不多 我的疑问是 任何可以将 gif 图像
  • Bootstrap 4:如何拥有一个包含容器中内容的全宽导航栏(如 SO 导航栏)?

    我正在使用 Bootstrap 4 如何制作像 SO 导航栏一样的导航栏 内容像 容器 一样对齐 但 Bootstrap 4 中 容器流体 的宽度 我想要 固定顶部 导航栏设置的宽度 而不是固定顶部和 容器 中的导航栏内容 我会提供一个示例
  • Python求和地理半径内的纬度/经度点并求和到网格

    基本上 我的实验程序试图找到给定时间落在有效点半径 例如 50 公里 内的点的数量 我的数据是结构化的 但如果需要的话我可以重组 在三个单独的数组中 例如 1 LAT 1 LON 1 TIM 其中 1 LAT 1 LON 1 TIM 均包含
  • 如何让窗体在按退出键时关闭?

    我有一个小窗体 当我按下 Windows 窗体应用程序中的按钮时会出现该窗体 我希望能够通过按退出键关闭表单 我怎么能这样做呢 我不确定要使用的事件 形式 关闭 如果表单上已有关闭表单的按钮 则可以在表单上设置一个属性来为您执行此操作 Se
  • 如何从视觉工作室外部打开WorkItem(VS-Team Explorer)?

    我想使用 C 代码从 Visual Studio 外部打开工作项 是否可以 我尝试过这个 IWorkItemDocument widoc null try string tfsName http rd tfs no2 8080 tfs si
  • .NET 中的 Getter 和 Setter 声明[重复]

    这个问题在这里已经有答案了 我想知道 getter 和 setter 的声明之间有什么区别 以及是否有首选方法 以及原因 第一个可以由 Visual Studio 自动生成 其他人呢 谢谢 1st string myProperty get
  • Java 中接口的重要性[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 假设我们有两个班级 Tiger an
  • Windows Remote 上 OpenGL 的现状和解决方案 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 OpenGL 和 Windows Remote 不能很好地配合 此问题的解决方案取决于用例 并且答案分散在网络的各个角落 当我开始研究这个