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

Glsl WebGL着色器编译错误消息中的数字是什么意思?,glsl,webgl,Glsl,Webgl,比如说, 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开

比如说,

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分

注意,我不是在问为什么我会犯这些错误。如果有一些官方规范或文件,则首选参考这些规范或文件的答案。我使用的是Chrome63.0.3239.132

0:137中的0是什么

它是产生错误的着色器字符串的索引。在常规OpenGL中,glShaderSource允许您提供多个字符串。它们被编译,就像它们被连接在一起一样。但这意味着错误消息必须识别着色器中负责错误的特定字符串。第一个数字是提供给glShaderSource的字符串数组中基于零的索引

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

0:137中的137是什么

这是发生错误的行号

0:137中的0是什么

它是产生错误的着色器字符串的索引。在常规OpenGL中,glShaderSource允许您提供多个字符串。它们被编译,就像它们被连接在一起一样。但这意味着错误消息必须识别着色器中负责错误的特定字符串。第一个数字是提供给glShaderSource的字符串数组中基于零的索引

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

0:137中的137是什么


这是发生错误的行号。

首选参考一些官方规范或文档的答案。错误消息由实现定义。不能引用某些官方规范或文档。@NicolBolas理解。我补充说,如果有。您可以在代码中包含或放入一个单独的JS文件中,最好包含参考某些官方规范或文档的答案。错误消息由实现定义。不能引用某些官方规范或文档。@NicolBolas理解。我补充说,如果有。您可以在代码中包含或放入一个separete JS文件,并且着色器只有97行。第137行大于97的可能原因是什么?不过,这是另一个问题。着色器保存在一个单独的.frag文件中。我刚刚知道发生了什么。我正在使用三个js,它将向shaderBuilt的属性中添加一些threejs内部语句,并将这些语句与代码一起传递给着色器。,因此,着色器错误消息中的行号不正确。请注意,WebGL或OpenGL ES 2.0规范未定义输出的错误消息及其格式,或者即使存在错误消息。不需要任何错误消息。所需要的只是一个无效的程序无法链接,根据规范允许编译无效的着色器。也就是说,大多数驱动程序都会返回此答案中所述的值。但是着色器只有97行。第137行大于97的可能原因是什么?不过,这是另一个问题。着色器保存在一个单独的.frag文件中。我刚刚知道发生了什么。我正在使用三个js,它将向shaderBuilt的属性中添加一些threejs内部语句,并将这些语句与代码一起传递给着色器。,因此,着色器错误消息中的行号不正确。请注意,WebGL或OpenGL ES 2.0规范未定义输出的错误消息及其格式,或者即使存在错误消息。不需要任何错误消息。所需要的只是一个无效的程序无法链接,根据规范允许编译无效的着色器。也就是说,大多数驱动程序都会返回此答案中所述的值。