Opengl 解析GLSL错误消息 当我编译一个损坏的GLSL着色器时,英伟达驱动程序给了我这样的错误信息: 0(102) : error C1008: undefined variable "vec"

Opengl 解析GLSL错误消息 当我编译一个损坏的GLSL着色器时,英伟达驱动程序给了我这样的错误信息: 0(102) : error C1008: undefined variable "vec",opengl,glsl,Opengl,Glsl,我知道括号内的数字是行号。我想知道错误消息开头的0是什么意思。我希望它是传递给glShaderSource的sources数组中的索引,但事实并非如此。它总是0。有人知道第一个数字是什么意思吗 错误消息格式是否有一些官方标准,以便我能够从中解析行号,或者其他OpenGL实现是否使用其他格式?我只能访问NVidia硬件,因此无法检查使用AMD或Intel硬件时错误消息的外观。它是一个文件名,您无法通过GL API指定,因此它是0 可以使用着色器代码中的#line num filename预处理器命

我知道括号内的数字是行号。我想知道错误消息开头的
0
是什么意思。我希望它是传递给
glShaderSource
的sources数组中的索引,但事实并非如此。它总是
0
。有人知道第一个数字是什么意思吗


错误消息格式是否有一些官方标准,以便我能够从中解析行号,或者其他OpenGL实现是否使用其他格式?我只能访问NVidia硬件,因此无法检查使用AMD或Intel硬件时错误消息的外观。

它是一个文件名,您无法通过GL API指定,因此它是0

可以使用着色器代码中的
#line num filename
预处理器命令对其进行设置。如果着色器是通过外部预处理器(在将源代码传递给GL之前)从具有
#include
s的许多文件中构造的,则可能会有所帮助


消息没有标准。每个人都可以随心所欲。

glShaderSource接受源字符串数组。第一个数字是该数组的索引。

首先为什么要“解析”编译错误?很好。该宏是OpenGL标准还是特定于供应商的?它包含在GLSL ES规范中。我相信“大”GLSL也有。好的,很好用。谢谢但需要注意的是,
filename
不是一个文件名(字符串),它也只是一个数字。因此,我猜当我无法解析错误消息时(因为所有供应商都使用自己的格式),我必须输出一个文件名列表,这些文件名涉及构建完整着色器源,以便用户可以看到在哪个文件中可以找到错误。谢谢,刚刚实现的GLSL规范不支持完整的C
#行
,只允许使用“源字符串编号”而不是文件名。Nvidia很可能同时允许这两种情况(至少cgc允许,这与GL实现中使用的编译器几乎相同),但它不可移植:-(