我的一些 GLSL 片段着色器共享通用函数和常量。我在 GLSL 中找不到任何类似#import 的功能(可以理解),但如果我可以在 Xcode 的构建阶段模拟它,那就太酷了。它可以像在将公共文件复制到我的资源文件夹之前将它们附加到我的所有片段着色器一样简单。
但我的剧本很弱。有人想帮助我或指出我正确的方向吗?
我的一些 GLSL 片段着色器共享通用函数和常量。我在 GLSL 中找不到任何类似#import 的功能(可以理解),但如果我可以在 Xcode 的构建阶段模拟它,那就太酷了。它可以像在将公共文件复制到我的资源文件夹之前将它们附加到我的所有片段着色器一样简单。
但我的剧本很弱。有人想帮助我或指出我正确的方向吗?
我对 XCode 不太了解,但在你自己的代码中实现应该不会太难。
如果您逐行加载代码,这将非常容易。加载每一行时,检查是否有表单#import "filename"
。如果是这样,则在继续之前加载该文件。像这样的 C++ 代码:
string loadGLSL(string fileName)
{
ifstream inputStream(fileName);
string fileContents, line;
while(inputFile.good())
{
getline(inputStream, line);
if(isImportDirective(line))
loadGLSL(getFileNamePart(line));
else
fileContents += line + '\n';
}
}
我会让你计算出 and 的细节isImportDirective
,getFileNamePart
但这应该不会太难。我也没有注意#import
同一个文件的多个 s - 如果您希望实现类似于 Objective-C 的功能,应该检查这种冗余#import
。
当然,您也可以先加载整个文件,然后搜索字符串#import
,然后为该行交换所需的文件内容。无论你认为什么效果最好。
希望这可以帮助。