Box2D Testbed运行报错:GLSL 3.30不支持,如何解决?
先看你贴出的错误日志:
Error compiling shader of type 35633! 0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
Error compiling shader of type 35632! 0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
Testbed:/home/amrit/Box2D/Box2D/Testbed/Framework/DebugDraw.cpp:176: GLuint sCreateShaderProgram(const char*, const char*): Assertion `vsId != 0 && fsId != 0' failed.
[1] 14679 abort (core dumped)
问题根源很明确:Testbed默认使用GLSL 3.30版本,但你的显卡驱动只支持到GLSL 1.30或OpenGL ES系列版本,导致着色器编译失败触发断言崩溃。下面是几个可行的修复方案:
方案1:修改着色器版本为硬件支持的版本
这是最直接的解决办法,把Testbed的着色器代码从3.30降级到你支持的版本:
- 打开
Box2D/Testbed/Framework/DebugDraw.cpp文件 - 找到顶点着色器和片段着色器的字符串定义(一般在文件开头或
sCreateShaderProgram函数内部) - 把着色器第一行的
#version 330 core改成#version 130(如果130不行,就选错误日志里列出的最高支持版本,比如1.20) - 重新编译Testbed,运行即可
方案2:更新显卡驱动
如果你的硬件本身应该支持GLSL 3.30(比如较新的NVIDIA/AMD/Intel显卡),那大概率是驱动版本太旧:
- NVIDIA显卡:终端运行
sudo apt update && sudo apt install nvidia-driver-535(替换为适配你显卡的驱动版本,比如525、545等) - AMD显卡:安装官方驱动包,运行
sudo apt install amdgpu-install后按提示完成配置 - Intel集成显卡:更新Mesa驱动,运行
sudo apt update && sudo apt install mesa-vulkan-drivers mesa-utils
更新驱动后重启系统,再运行Testbed测试。
方案3:编译时启用OpenGL ES支持
如果你的设备是嵌入式平台或老旧硬件,更适合用OpenGL ES版本:
- 进入Box2D的编译目录(比如
build文件夹) - 重新执行CMake并添加参数:
cmake -DBOX2D_TESTBED_USE_OPENGL_ES=ON .. - 重新编译:
make -j$(nproc) - 运行Testbed,此时会使用GLSL ES 3.00,刚好在你支持的版本列表内
我之前碰到老硬件兼容问题时,方案1或方案3用起来最省心,你可以根据自己的设备情况选一个试试。
内容的提问来源于stack exchange,提问作者Amrit

