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