虚拟机中使用OpenGL遇到的错误总结

由于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:

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值