2011-09-08 3 views
1

일부 GLSL 프래그먼트 쉐이더는 공통 함수 및 상수를 공유합니다. GLSL에서 #와 비슷한 기능을 (당연히) 찾을 수는 없지만, Xcode의 빌드 단계에서이 기능을 에뮬레이트 할 수 있다면 매우 멋지다. 파일을 내 리소스 폴더에 복사하기 전에 모든 조각 쉐이더에 공통 파일을 추가하는 것만 큼 간단 할 수 있습니다.Xcode 빌드를 통해 GLSL # import를 에뮬레이트하십시오.

그러나 내 script-fu는 약합니다. 누구나 나를 도와 주거나 올바른 방향으로 나를 가리키고 싶습니까?

답변

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'; 
     } 
} 

난 당신이 isImportDirectivegetFileNamePart의 세부 사항을 작업 할 수 있습니다,하지만 모든 너무 어렵지 않을 것이다. 또한 같은 파일의 복수 #import에주의를 기울이지 않았습니다. Objective-C의 #import과 유사한 기능을 구현하려는 경우 중복성을 확인해야합니다.

물론 전체 파일을로드 한 다음 #import 문자열을 검색하고 해당 파일 내용을 바꿀 수도 있습니다. 당신이 생각하는 것이 무엇이든간에 가장 잘 생각합니다.

희망이 도움이됩니다.

+0

ㅎ! 나는 내 애플 리케이션에서 그것을하는 것을 고려하지 않았다. 깔끔한 접근! – andyvn22

+0

사실'GLSL # include'를 ('# import'가 아니라) google하면이 아이디어가 많이 나온다. 단지 약간 다른 접근법을보고 싶다면. –