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

Posted

技术标签:

【中文标题】如何获取GLSL编译器错误的行号【英文标题】:How to get the line number of GLSL compiler error 【发布时间】:2015-01-10 21:43:49 【问题描述】:

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

【问题讨论】:

【参考方案1】:

它不是标准化的,但在各个供应商之间或多或少是标准化的。

例如,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。

【讨论】:

以上是关于如何获取GLSL编译器错误的行号的主要内容,如果未能解决你的问题,请参考以下文章

如何从错误消息中获取实际的存储过程行号?

在针对 XML 模式验证 XML 文件时如何获取错误的行号

如何获取 Python 中发生异常或错误的行号?

在 R 中使用 doParallel 时,如何获取引发错误的行号?

调用render()时如何获取Django模板错误的文件名和行号?

如何使用带有行号信息的 gcc 获取 C++ 的堆栈跟踪?