WebGL 着色器编译错误消息中的数字是什么意思?

What do the numbers in WebGL shader compile error message mean?

例如,

ERROR: 0:137: 'blend2' : no matching overloaded function found
ERROR: 0:137: '=' : dimension mismatch
ERROR: 0:137: '=' : cannot convert from 'const mediump float' to 'highp 3-component vector of float'

0:137 中的 0 是什么?
0:137中的137是什么?
为什么所有错误消息都以 0: 开头?为什么不是 1:2:

请注意,我不是在问为什么会出现这些错误。如果有的话,最好参考一些官方规范或文档的答案。我正在使用 Chrome 63.0.3239.132.

What is 0 in 0:137?

这是产生错误的着色器字符串的索引。在常规 OpenGL 中,glShaderSource 允许您提供多个字符串。它们被编译为好像它们被连接在一起。但这意味着错误消息必须标识着色器中导致错误的特定字符串。第一个数字是提供给 glShaderSource.

的字符串数组的从零开始的索引

当然,WebGL 的等效 gl.shaderSource 函数不允许您提供多个着色器字符串。因此,如果 WebGL 实现最终直接调用 OpenGL 或 OpenGL ES 实现,那么 OpenGL 产生的错误将在其中包含字符串索引,即使它们在技术上不需要它。

What is 137 in 0:137?

错误发生的行号。