You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GLSL简单着色器编译出现奇怪错误,该如何修复?

GLSL编译报错:无法识别#version行且出现意外字符

问题重现

编写的顶点着色器代码:

#version 460

layout (location = 0) in vec3 inPos;
layout (location = 0) out vec3 outPos;

void main() {
    gl_Position = vec4(inPos.x, inPos.y, inPos.z, 1.0);
    outPos = inPos;
}

使用编译命令:

glslangValidator -V -G -o triangle.vert.spv triangle.vert

得到错误信息:

error : #version: ES shaders for SPIR-V require version 310 or higher
error : Source\Shaders\triangle.vert:1: '€' : unexpected token
error : Source\Shaders\triangle.vert:1: '' : compilation terminated

修复方案

1. 修复文件编码问题

报错中的€是文件编码带BOM导致的乱码——glslangValidator对带BOM的UTF-8文件解析存在问题,开头的BOM字节被识别成了无效字符。

  • 用文本编辑器(如VS Code、Notepad++)打开着色器文件,将编码切换为无BOM的UTF-8:
    • VS Code:点击右下角编码标识,选择"通过编码重新打开"->"UTF-8"后保存;
    • Notepad++:选择菜单栏"编码"->"转为UTF-8无BOM格式"后保存文件。

2. 匹配编译参数与着色器版本

命令中的-G参数指定生成OpenGL ES兼容的SPIR-V,但你的着色器使用了桌面OpenGL的#version 460版本,两者不兼容导致版本错误。

  • 若编译桌面OpenGL的SPIR-V:移除-G参数,命令改为:
    glslangValidator -V -o triangle.vert.spv triangle.vert
    
  • 若需要OpenGL ES的SPIR-V:修改着色器版本为ES兼容版本(如#version 310 es或更高),保留-G参数。

内容的提问来源于stack exchange,提问作者Liyuu_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:21:12