私のGLSLフラグメントシェーダーのいくつかは、共通の関数と定数を共有しています。GLSLには(当然のことながら)#importのような機能はありませんが、Xcodeのビルド段階でそれをエミュレートできれば非常にクールです。リソースフォルダにコピーする前に、すべてのフラグメントシェーダーに共通のファイルを追加するのと同じくらい簡単です。
しかし、私のscript-fuは弱いです。誰かが私を助けたい、または私を正しい方向に向けたいですか?
私のGLSLフラグメントシェーダーのいくつかは、共通の関数と定数を共有しています。GLSLには(当然のことながら)#importのような機能はありませんが、Xcodeのビルド段階でそれをエミュレートできれば非常にクールです。リソースフォルダにコピーする前に、すべてのフラグメントシェーダーに共通のファイルを追加するのと同じくらい簡単です。
しかし、私のscript-fuは弱いです。誰かが私を助けたい、または私を正しい方向に向けたいですか?
XCodeについてはよくわかりませんが、独自のコードに実装するのはそれほど難しいことではありません。
コードを1行ずつロードすると、これは非常に簡単です。各行が読み込まれるときに、isの形式が。であるかどうかを確認し#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';
}
}
isImportDirective
との詳細を説明しますがgetFileNamePart
、それほど難しいことではありません。また、同じファイルの複数のファイルにも注意を払いませんでし#import
た。Objective-Cに類似した機能を実現したい場合は、このような冗長性を確認する必要があります#import
。
もちろん、最初にファイル全体をロードしてから文字列#import
を検索し、その行に必要なファイルの内容を交換することもできます。あなたが最もうまくいくと思うものは何でも。
お役に立てれば。