gpt4 book ai didi

OpenGL/GLSL - 使用带有多个源的 glShaderSource 来支持包含文件

转载 作者:行者123 更新时间:2023-12-04 20:20:40 37 4
gpt4 key购买 nike

由于 GLSL 没有包含文件选项,我试图通过使用“#pragma include”解析器来添加它。 (我想要这个是因为我有一些通用方法,我只想实现一次,但可能会在许多不同的着色器中使用,比如 Ken Perlin 的 smootherstep)

解析着色器文件以获取包含的文件工作正常。
但是在使用多个源文件设置 ShaderSource 时,我总是遇到问题;由于我的主着色器通常以“#version 330”开头,并且#version-line 始终必须是着色器中的第一行,因此我只能将主文件添加为传递给 glShadersource 的字符串数组中的第一行,然后所有包含的文件。
但是我的主文件不能使用在这些包含文件中实现的任何函数,因为它们基本上会在我的主文件之后连接,所以编译器提示它不知道我的主文件正在使用的函数。

我能想到的让它工作的唯一方法是读取主文件,解析包含编译指示,然后用要包含的文件的文件内容替换该编译指示行(递归地将相同的方法应用于所有包含可能包含其他文件本身的文件) - 但这意味着编译错误中的行号将不再与主文件的实际行号匹配。

是否有人为 GLSL 设置了某种“包含”功能,该功能可以工作并保留行号?如果是这样 - 如何?

最佳答案

解析 #version 怎么样?标记并使其成为单独的(和第一个)源字符串?这样你也可以在包含中使用不同的版本标签(取决于它们的功能要求),并将它们减少到只有一个版本标签(版本号最高的那个)。

关于OpenGL/GLSL - 使用带有多个源的 glShaderSource 来支持包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6912457/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com