Эмулируйте GLSL #import через сборку Xcode

Несколько моих шейдерных фрагментов GLSL имеют общие функции и константы. Я не могу найти никакой функции #import-подобной в 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';
      }
 }

Я позволю вам проработать детали isImportDirective а также getFileNamePart, но это не должно быть слишком сложно. Я также не обратил внимание на несколько #importиз того же файла - такая избыточность должна быть проверена, если вы хотите добиться функциональности, аналогичной Objective-C #import,

Конечно, вы также можете сначала загрузить весь файл, а затем искать строку #import а затем поменяйте местами необходимое содержимое файла для этой строки. Все, что вы думаете, работает лучше всего.

Надеюсь это поможет.

Другие вопросы по тегам