2011-09-08 21 views
1

我的一些GLSL片段着色器共享通用函数和常量。我无法在GLSL中找到任何#类似于导入的功能(可以理解),但是如果我可以在Xcode的构建阶段中模拟它,那将是超酷的。它可以像在将所有片段着色器复制到我的资源文件夹之前将通用文件附加到所有碎片着色器一样简单。模拟GLSL#通过Xcode构建

但是我的脚本功能很弱。任何人都想帮助我,或者指引我走向正确的方向?

回答

1

我不太了解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'; 
     } 
} 

我会让你的工作的isImportDirectivegetFileNamePart细节,但它不应该是太困难的。我也没有注意同一个文件中的多个#import - 这样的冗余应该检查,如果你想实现与Objective-C的#import类似的功能。

当然,您也可以先加载整个文件,然后搜索字符串#import,然后交换该行所需的文件内容。无论你认为最好。

希望这会有所帮助。

+0

嘿!我甚至没有考虑过在我的应用中做这件事。整洁的方法! – andyvn22

+0

其实,如果你谷歌'GLSL#include'(而不是'#import'),这个想法出现了很多。以防万一你想看到一些稍微不同的方法。 –