【发布时间】:2011-08-02 12:58:37
【问题描述】:
由于 GLSL 没有包含文件选项,我试图通过使用“#pragma include”解析器来添加它。 (我想要这个,因为我有一些通用方法我只想实现一次,但可能会在许多不同的着色器中使用,比如 Ken Perlin 的 smootherstep)
解析着色器文件以获取包含的文件可以正常工作。 但是在使用多个源文件设置 ShaderSource 时,我总是遇到问题;因为我的主着色器通常以“#version 330”开头并且#version-line 总是必须是着色器中的第一行,所以我只能将我的主文件添加为传递给glShadersource的字符串数组中的第一个,然后即所有包含的文件。 但是我的主文件不能使用在这些包含文件中实现的任何函数,因为它们基本上会在我的主文件之后连接,所以编译器抱怨它不知道我的主文件的功能正在使用。
我能想到的让它工作的唯一方法是读取主文件,解析 include pragma,然后 replace 该 pragma 行与文件的文件内容包含(递归地将相同的方法应用于可能包含其他文件本身的所有包含文件)-但这意味着编译错误中的行号将不再与主文件的实际行号匹配。
是否有人为 GLSL 设置了某种“包含”功能,可以正常工作并保留行号?如果是这样 - 如何?
【问题讨论】:
标签: opengl include glsl shader pragma