【问题标题】:Does Azure allow App need OpenGL, any way to go around?Azure是否允许App需要OpenGL,有什么办法吗?
【发布时间】:2018-01-25 00:02:53
【问题描述】:

我希望在 Azure 虚拟机上托管一个远程应用程序,该应用程序是在 VTK 之上使用 python 开发的。每次,我都会收到崩溃消息“您的图形驱动程序不支持带有 gpu_shader4 扩展的 vtkWin32OpenGLRenderWindow...GL version2.1”。 我尝试了 windows server 2016 和 windows 10 虚拟机,同样的崩溃。

难道Azure不支持运行app需要OpenGl支持?除非租超级贵的N个虚拟机?

任何建议如何让我的应用程序在正常成本的虚拟机上运行而无需过多修改我的程序?

【问题讨论】:

    标签: python azure opengl virtual-machine psychopy


    【解决方案1】:

    回答

    Azure VM 通常没有 GPU,除非 Azure N 系列 VM:https://blogs.technet.microsoft.com/hybridcloudbp/2016/12/13/n-series-azure-vms-with-gpu/

    解决方案:

    1)构建Mesa3D+LLvmpipe版本opengl32.dll,使用软件光栅化器。

    您可以关注:https://fdossena.com/?p=mesa/build.frag 来构建您自己的或从互联网下载预构建的 opengl32.dll。

    2)替换windows/system32/opengl32.dll:

    将 Mesa opengl32.dll 保存在应用程序的同一目录中不起作用 - 尚不知道为什么。

    替换windows/ssytem32/openggl32.dll,需要将opengl32.dll的所有权从trustedinstaller改为administrator,并赋予administrator完全访问权限。

    *Mesa3D&LLvmpipe 很棒!但是构建 Mesa3D+LLvmpipe 很痛苦!

    【讨论】:

      【解决方案2】:

      当流程在某种程度上自动化时,从源代码构建 Mesa 并不难: https://github.com/pal1000/mesa-dist-win

      您不必在缺少 GPU 的 VM 上弄乱文件权限并覆盖 opengl32.dll 来安装 Mesa3D。有一个注册表调整告诉 Windows 使用 Mesa3D 作为默认软件光栅器。只需将 Mesa3D opengl32.dll 文件重命名为 mesadrv.dll,将它们放入 windows\system32 和 windows\syswow64(如果适用),然后应用这些注册表调整:

      • 适用于 64 位应用程序或 32 位 Windows 上的 32 位应用程序

      REGEDIT4

      ; https://technet.microsoft.com/en-us/library/cc749368.aspx
      ; https://www.msfn.org/board/topic/143241-portable-windows-7-build-from winpe-30/page-5#entry942596
      [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\MSOGL]
      "DLL"="mesadrv.dll"
      "DriverVersion"=dword:00000001
      "Flags"=dword:00000001
      "Version"=dword:00000002
      
      • 适用于 64 位 Windows 上的 32 位应用程序

      REGEDIT4

      ; https://technet.microsoft.com/en-us/library/cc749368.aspx
      ; https://www.msfn.org/board/topic/143241-portable-windows-7-build-from winpe-30/page-5#entry942596
      [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\MSOGL]
      "DLL"="mesadrv.dll"
      "DriverVersion"=dword:00000001
      "Flags"=dword:00000001
      "Version"=dword:00000002
      

      参考:https://www.mesa3d.org/llvmpipe.html

      【讨论】:

      • 该底部链接似乎已过期。下载附带一个安装脚本,可复制所有需要的 dll。
      【解决方案3】:

      我终于让它为一个名为 PsychoPy 的程序工作,该程序需要 OpenGL 2.0 来处理一切。我必须使用 7zip 文件“mesa3d-21.3.5-release-msvc.7z”顶部的系统范围安装脚本“systemwidedeploy.cmd”来安装它,详情如下。它已经编译好了,你只需要下载它并 7 解压它。 Opengl Extensions Viewer 将版本报告为 3.3。 (如何通过powershell获取版本?)

      “虚拟机中的 OpenGL - Thomas Schwery”https://thomas.inf3.ch/2019-06-12-opengl-kvm-mesa3d/index.html

      这是安装脚本中的一些相关代码。看起来有几个额外的 dll 文件要复制。

      @IF /I %PROCESSOR_ARCHITECTURE%==AMD64 IF EXIST "%mesaloc%\x86\libgallium_wgl.dll" copy "%mesaloc%\x86\libgallium_wgl.dll" "%windir%\SysWOW64\mesadrv.dll"
      @IF /I %PROCESSOR_ARCHITECTURE%==AMD64 IF EXIST "%mesaloc%\x64\libgallium_wgl.dll" copy "%mesaloc%\x64\libgallium_wgl.dll" "%windir%\System32\mesadrv.dll"
      
      @IF /I %PROCESSOR_ARCHITECTURE%==AMD64 IF EXIST "%mesaloc%\x86\libglapi.dll" copy "%mesaloc%\x86\libglapi.dll" "%windir%\SysWOW64"
      @IF /I %PROCESSOR_ARCHITECTURE%==AMD64 IF EXIST "%mesaloc%\x64\libglapi.dll" copy "%mesaloc%\x64\libglapi.dll" "%windir%\System32"
      
      @IF /I %PROCESSOR_ARCHITECTURE%==AMD64 IF EXIST "%mesaloc%\x86\dxil.dll" copy "%mesaloc%\x86\dxil.dll" "%windir%\SysWOW64"
      @IF /I %PROCESSOR_ARCHITECTURE%==AMD64 IF EXIST "%mesaloc%\x64\dxil.dll" copy "%mesaloc%\x64\dxil.dll" "%windir%\System32"
      
      @IF /I %PROCESSOR_ARCHITECTURE%==AMD64 REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\MSOGL" /v "DLL" /t REG_SZ /d "mesadrv.dll" /f
      @IF /I %PROCESSOR_ARCHITECTURE%==AMD64 REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\MSOGL" /v "DriverVersion" /t REG_DWORD /d "1" /f
      @IF /I %PROCESSOR_ARCHITECTURE%==AMD64 REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\MSOGL" /v "Flags" /t REG_DWORD /d "1" /f
      @IF /I %PROCESSOR_ARCHITECTURE%==AMD64 REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\MSOGL" /v "Version" /t REG_DWORD /d "2" /f
      
      @REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\MSOGL" /v "DLL" /t REG_SZ /d "mesadrv.dll" /f
      @REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\MSOGL" /v "DriverVersion" /t REG_DWORD /d "1" /f
      @REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\MSOGL" /v "Flags" /t REG_DWORD /d "1" /f
      @REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\MSOGL" /v "Version" /t REG_DWORD /d "2" /f
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        • 1970-01-01
        • 1970-01-01
        • 2015-07-24
        • 2022-11-04
        相关资源
        最近更新 更多