Ваш вопрос может быть закрыт в основном как мнение, но ....
Мое предложение, используйте модули es6 с многострочными шаблонами.
// some-vs-shader.glsl
export default `
attribute vec4 position;
uniform mat4 matrix;
void main() {
gl_Position = matrix * position;
}
`;
Затем вы можете импортировать в некоторых другихСценарий, подобный этому
import someVertexShaderSource from './some-vs-shader.glsl';
И если вы хотите, вы можете позже запустить накопительный пакет, веб-пакет или пакет, чтобы прочитать ваш код и создать один большой файл, который загружается быстрее.
Этото, что Three.js .
отмечает, что для использования ключевого слова import
необходимо использовать type="module"
как в
<script type="module" src="somescript.js"><script>
или во встроенном
<script type="module">
import someVertexShaderSource from './some-vs-shader.glsl';
...
</script>
Примечание: я бросил вместе рабочий пример . Мне пришлось назвать файлы так, чтобы они заканчивались на .js
, потому что в противном случае сервер glitch.com отправляет неправильный заголовок Content-Type
. Таким образом, вы должны решить, хотите ли вы, чтобы ваши файлы заканчивались на .glsl
, вам нужно выяснить, как настроить сервер для отправки правильного заголовка типа контента.
Что касается вашего вопроса о том, почему
<script type="notjs" src="/assets/2dVertexShader.glsl" id="2dVertexShader" ></script>
не работает, TL; DR Это потому, что спецификация говорит, что это не должно.