2011-09-08 36 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'),這個想法出現了很多。以防萬一你想看到一些稍微不同的方法。 –