Quick answer: The “shading language version not supported” error means your GPU or driver doesn’t support the GLSL version Godot’s renderer requires. Update GPU drivers first. If the hardware is too old for Vulkan, switch to the Compatibility renderer (OpenGL 3.3). For distribution, ship a fallback mechanism that auto-selects the best available renderer.
You export your Godot 4 project, send it to a friend for testing, and they get a blank window with “shading language version not supported” in the console. The game works fine on your machine, so what’s going on? This error comes down to a mismatch between what Godot’s renderer needs and what the player’s GPU can provide. Here’s how to diagnose it and how to ship a game that handles it gracefully.
Understanding Godot 4’s Renderer Requirements
Godot 4 offers three rendering backends, each with different GPU requirements:
- Forward+ — the default renderer. Requires Vulkan 1.0 or later. Provides the best visual quality with features like volumetric fog, SDFGI, and advanced lighting. Only works on GPUs from roughly 2015 and newer with up-to-date drivers.
- Mobile — designed for mobile and lower-end devices. Also requires Vulkan but uses a simpler rendering pipeline with fewer features. Slightly lower hardware bar than Forward+ but still needs Vulkan support.
- Compatibility — the fallback renderer. Uses OpenGL 3.3 (GLSL 330) and works on significantly older hardware. Lacks some advanced rendering features but covers GPUs dating back to approximately 2010.
The “shading language version not supported” error typically appears when the game tries to use Forward+ or Mobile on a GPU that doesn’t support Vulkan, or when it tries Compatibility mode on a GPU that doesn’t even support OpenGL 3.3. The error message in the console usually includes the GLSL version the GPU reports and the version Godot requires.
Diagnosing the Problem
First, determine what the player’s GPU actually supports. On Windows, the quickest method is running dxdiag from the Start menu and checking the Display tab. On Linux, use glxinfo:
# Linux: check OpenGL and GLSL versions
glxinfo | grep -i "opengl version"
glxinfo | grep -i "opengl shading language"
# Example output on a supported system:
# OpenGL version string: 4.6 (Compatibility Profile) Mesa 23.1.0
# OpenGL shading language version string: 4.60
# Example output on an unsupported system:
# OpenGL version string: 2.1 Mesa 18.3.6
# OpenGL shading language version string: 1.20
If the reported OpenGL version is below 3.3, the Compatibility renderer won’t work. If Vulkan isn’t available at all (check with vulkaninfo on Linux or the Vulkan Runtime on Windows), the Forward+ and Mobile renderers won’t work.
Common scenarios that trigger this error:
- Outdated GPU drivers. Many GPUs that support OpenGL 3.3 or Vulkan have shipped with older drivers that don’t expose these capabilities. Updating to the latest driver from NVIDIA, AMD, or Intel often resolves the issue immediately.
- Integrated GPUs on older laptops. Intel HD Graphics 3000 and earlier (Sandy Bridge, 2011) only support OpenGL 3.1. These chips physically cannot run any Godot 4 renderer.
- Linux Mesa driver version. Older Linux distributions ship Mesa versions that don’t expose full OpenGL 3.3 even on capable hardware. Updating Mesa (or the distribution) fixes this.
- Virtual machines. Most VM graphics drivers emulate older OpenGL versions. Players running your game in a VM will almost always hit this error.
Switching to the Compatibility Renderer
If your game doesn’t require Vulkan-specific features, switching to the Compatibility renderer dramatically expands your hardware support. In the Godot editor, go to Project > Project Settings > Rendering > Renderer and select Compatibility.
Be aware of what you lose: no volumetric fog, no SDFGI global illumination, no screen-space reflections, simplified shadow mapping, and reduced particle features. For many 2D games and simpler 3D games, these limitations don’t matter. For visually demanding 3D projects, you may need to offer both renderers.
You can also set the renderer via command-line arguments when launching the exported game:
# Force Compatibility (OpenGL) renderer
./my_game --rendering-driver opengl3
# Force Vulkan renderer
./my_game --rendering-driver vulkan
Implementing a Renderer Fallback for Distribution
The most robust approach is shipping a launcher or startup script that detects the GPU’s capabilities and launches the game with the appropriate renderer. Here’s a simple bash script for Linux:
#!/bin/bash
# launch.sh - auto-detect renderer for Godot game
if vulkaninfo >/dev/null 2>&1; then
echo "Vulkan detected, using Forward+ renderer"
./my_game.x86_64 --rendering-driver vulkan
else
GL_VERSION=$(glxinfo 2>/dev/null | grep "OpenGL version" \
| grep -oP "\d+\.\d+")
if [ "$(echo "$GL_VERSION >= 3.3" | bc)" -eq 1 ]; then
echo "OpenGL 3.3+ detected, using Compatibility renderer"
./my_game.x86_64 --rendering-driver opengl3
else
echo "ERROR: Your GPU does not meet minimum requirements."
echo "Godot 4 requires OpenGL 3.3 or Vulkan 1.0."
echo "Please update your GPU drivers and try again."
exit 1
fi
done
On Windows, you can achieve something similar with a small C# or C++ launcher that checks for Vulkan DLLs and OpenGL version through the Windows API before spawning the game process with the correct arguments.
Whatever approach you choose, make sure the error message is player-friendly. “Shading language version not supported” means nothing to someone who just wants to play your game. “Your graphics card or driver does not meet the minimum requirements. Please update your graphics driver from [link]” is actionable and kind.
Always test on the oldest hardware you can find — your players will have GPUs you’ve never heard of.