如何获取GLSL编译器错误的行号

时间:2015-01-10 21:43:49

标签: c++ c opengl glsl

我想知道是否有一种常见的方法来获取GLSL编译器错误的行号。 起初我以为我可以解析glGetInfoLogARB,但后来我读到它的输出没有标准化。

1 个答案:

答案 0 :(得分:5)

它不是标准化的,但在个别供应商中它或多或少是。

例如,NVIDIA倾向于以这种方式输出引用行的消息:

<Shader String Index>:<Line Number>(<Character Number>): <warning|error|...>:

虽然不完美,但如果您需要解析行号的信息日志,您可以采取的方法是根据GL_VENDOR字符串预处理输入。信息日志通常用于人工解释,所以我不确定这是多么值得付出的努力。

说到非标准事物,glGetInfoLogARB (...)过时(它只存在于GL_ARB_shader_objects中)。

当GLSL在GL 2.0中成为核心时,该函数分别为glGetShaderInfoLog (...)glGetProgramInfoLog (...)分别用于编译器和链接器信息。为了便携,您不应该使用旧的ARB扩展;将GL 2.0作为最低版本,并使用核心GLSL。