Эмулировать GLSL #import через сборку Xcode - PullRequest
1 голос
/ 08 сентября 2011

Некоторые из моих фрагментных шейдеров GLSL имеют общие функции и константы.Я не могу найти никакой функции # import-подобной в GLSL (понятно), но было бы очень круто, если бы я мог подражать этому на этапе сборки Xcode.Это может быть так же просто, как добавить общий файл ко всем моим фрагментным шейдерам, прежде чем копировать их в мою папку ресурсов.Кто-нибудь хочет помочь мне или указать мне правильное направление?

1 Ответ

1 голос
/ 08 сентября 2011

Я не очень много знаю о 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, а затем поменять местами требуемое содержимое файла для этой строки.Все, что вы думаете, работает лучше всего.

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

...