由于VMware对OpenGL的支持有限,目前最新版本的VMware workstation15 Pro只支持到OpenGL3.3的core profile(核心模式),在有条件的前提下建议安装Linux真机,可以装win10+Deepin或者win10+Manjaro,win10+Ubuntu的双系统。
在Linux下,可以通过sudo glxinfo | grep "OpenGL"查看当前的OpenGL版本,如图所示:
前面的core profile指的是OpenGL的核心模式版本,后面的ES指的是OpenGL ES版本,这个一般在安卓,ios等设备上用的多。如果查看版本的命令行提示无效,输入以下命令后即可:sudo apt-get install mesa-utils。
错误1:虚拟机的OpenGL版本过低
1.检查自己的VMware workstation版本,如果低于12的话就卸载掉吧,15 Pro的百度网盘链接如下:
链接: https://pan.baidu.com/s/16VR1SL6eXP685fRstydUDw 密码: otth
2.检查虚拟机的vmwgfx版本,必须是大于2.9.0。命令行如下:dmesg | grep -i vmwgfx。
3.更新到最新版本的Mesa 3D 图形库及 svga 驱动
sudo add-apt-repository ppa:ubuntu-x-swat/updates
sudo apt-get update
sudo apt-get dist-upgrade
错误2:error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
这个问题是由于VMware只支持3.3版本的核心模式(core profile),并不支持其兼容模式(Compatibility Profile),设置只应用核心模式即可.
1.在QT中
在实现OpenGL功能的类(继承了QOpenGLWidget的类)中的构造函数里添加:
QSurfaceFormat fmt;
fmt.setVersion( 3, 3 );
fmt.setProfile( QSurfaceFormat::CoreProfile );
setFormat( fmt );
QSurfaceFormat::setDefaultFormat( fmt );
2.在glfw中
在main.cpp中加入:
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
错误:3:context mismatch in svga_sampler_view_destroy
这是由于开启了虚拟机的3D加速,在虚拟机的设置—显示里把3D加速关闭即可,如图所示。
错误:4:在QT中运行没有报错但是显示不出来
如果出错的是#version 330版本的着色器代码,这可能是由于glsl版本过低造成的问题,可以参考这篇将glsl3.3的着色器代码改为glsl1.x:https://blog.csdn.net/qq_37996632/article/details/102570800
虽然补救了很多,但是在虚拟机中使用OpenGL还是容易出现许多乱七八糟的错误,毕竟OpenGL主要是基于电脑上的显卡的,连OpenGL的库都是显卡生产商开发的。VMware固然可以虚拟,但效果不是很好,有条件的还是使用双系统吧,更新一下驱动就能用上最新的OpenGL版本,或者直接在windows上开发。
图为笔记本双系统(win10+Deepin)上使用的Deepin15.11 Linux: