1

私のGLSLフラグメントシェーダーのいくつかは、共通の関数と定数を共有しています。GLSLには(当然のことながら)#importのような機能はありませんが、Xcodeのビルド段階でそれをエミュレートできれば非常にクールです。リソースフォルダにコピーする前に、すべてのフラグメントシェーダーに共通のファイルを追加するのと同じくらい簡単です。

しかし、私のscript-fuは弱いです。誰かが私を助けたい、または私を正しい方向に向けたいですか?

4

1 に答える 1

1

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を検索し、その行に必要なファイルの内容を交換することもできます。あなたが最もうまくいくと思うものは何でも。

お役に立てれば。

于 2011-09-08T07:39:04.360 に答える