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

zwc*_*oud 1 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'
Run Code Online (Sandbox Code Playgroud)

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

注意我不是在问为什么我会收到这些错误.如果有的话,首选参考一些官方规范或文档的答案.我正在使用Chrome 63.0.3239.132.

Nic*_*las 5

0:137中的0是多少?

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

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

什么是137:0:137?

它是发生错误的行号.

  • 请注意,WebGL或OpenGL ES 2.0规范未定义输出什么错误消息及其格式是什么,甚至根本没有错误消息.不需要任何错误消息.所需的只是无效程序无法链接(根据规范允许无效着色器编译).也就是说,大多数司机确实返回了这个答案中所述的值. (3认同)