Mam niestandardowe rozwiązanie oparte na http://blackpixel.com/blog/494/xcode-using-includes-in-opengl-shaders/ [404 teraz]. Zasadniczo powiedział, że można użyć narzędzia m4 do wstępnego przetwarzania plików.
w plikach źródłowych GLSL właśnie to pożądany fragment, który chcesz ponownie użyć:
include(Utils.glsl)
include(Colors.glsl)
...
void main (void) {
...
}
w Xcode, dodaj wszystkie glsl
plików „Kopiuj Bundle Zasoby”.
Dodaj „Run Script” fazę z tego skryptu powłoki:
#!/bin/sh
cd ${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}
find . -name "*.fsh" | while read file; do
echo Preprocess $file
m4 "$file" > "$file.tmp"
mv "$file.tmp" "$file"
done
exit 0
Scenariusz zakłada twoi shadery mają .fsh
rozszerzenie. Zmodyfikowanie go tak, aby pasowało do rozszerzeń modułu cieniującego, jest banalne.
Ostrzegam: twoje shadery będą łatwo dostępne dla prawie każdego. Możesz go używać do programowania i konwertować na ciągi przed ich zwolnieniem (nie jest to prawdziwa ochrona, chyba że zaszyfrujesz ...).
Ponadto, jeśli nie ma większego współdzielenia między shaderów, otrzymasz wiele nieużywanych kodów. Domyślam się, że kompilator shaderów zaopiekuje się nim, ale nie jestem w 100% pewien, czy jest jakaś kara za wydajność.