我希望在Azure虚拟机上托管一个远程应用程序,它是使用python在VTK上开发的。每次,我都会收到崩溃消息说" vtkWin32OpenGLRenderWindow ...你的图形驱动程序"不支持带有gpu_shader4扩展名的GL version2.1。 我试过windows server 2016和windows 10虚拟机,同样崩溃了。
Azure是否不支持运行app需要OpenGl支持?除非租用超级昂贵的N虚拟机?
有没有建议如何在不修改我的程序的情况下让我的应用程序在普通成本虚拟机上运行?
答案 0 :(得分:3)
<强>答案强>:
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,并为管理员分配完全访问权限。
* Mesa3D&amp; LLvmpipe很棒!但是建立Mesa3D + LLvmpipe是一件痛苦的事!
答案 1 :(得分:1)
当流程在某种程度上自动化时,从源代码构建Mesa并不那么难: https://github.com/pal1000/mesa-dist-win
您不必弄乱文件权限并在缺少GPU的VM上覆盖opengl32.dll来安装Mesa3D。有一个注册表调整告诉Windows使用Mesa3D作为默认软件光栅化器。只需将Mesa3D opengl32.dll文件重命名为mesadrv.dll,将它们放在windows \ system32和windows \ syswow64中(如果适用),然后应用这些注册表调整:
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
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