Популярным способом использования шейдеров GLSL в WebGL, по-видимому, является их внедрение в основной файл html. Шейдеры вершин и фрагментов встроены в теги, например:
<script id="shader-fs" type="x-shader/x-fragment">
Это то же самое соглашение, которое я вижу в примерах WebGL на странице Mozilla Developer Network.
Это отлично подходит для простых приложений, но когда у вас сложное приложение с несколькими шейдерами, html файл становится загроможденным. (Я продолжаю редактировать неправильный шейдер!) Также, если вы хотите повторно использовать ваши шейдеры, эта схема неудобна.
Итак, я думал о том, чтобы поместить эти шейдеры в отдельные файлы XML и загрузить их с помощью XMLHttpRequest(). Затем я увидел, что у кого-то была такая же идея:
http://webreflection.blogspot.com/2010/09/fragment-and-vertex-shaders-my-way-to.html
Мне нравится предложение использовать файлы .c, поскольку это дает вам подсветку синтаксиса и другие удобства редактора для GLSL.
Но проблема с вышеприведенным подходом заключается в том, что (насколько я понимаю) XMLHttpRequest() не может загружать локальный файл .c, то есть на стороне клиента, при разработке и тестировании приложения WebGL. Но в этот процесс сложно загружать его на сервер.
Итак, если я хочу сохранить шейдеры из html файла, это единственный вариант для их вставки в виде строк в коде? Но это затруднит запись, а также отладка...
Я был бы признателен за любые предложения по управлению несколькими шейдерами GLSL в приложениях WebGL.
Привет
Изменить (май 05 2011)
Поскольку я использую Mac для разработки, я решил включить сервер Apache и поместил свой код webgl под http://localhost/~username/. Это оборачивает проблему файла: протокол отключается во время разработки. Теперь код загрузки файла javascript работает локально, поскольку используется http:, а не файл:. Просто подумал, что я поставил бы это здесь, если кто-нибудь найдет это полезным.