$.getScript
загружает скрипты JavaScript. В отличие от внутренних сценариев, сценариев, содержимое которых находится внутри HTML, нельзя использовать внешний сценарий для загрузки чего-либо, кроме JavaScript.
Для загрузки текстового файла современным простым способом используйте fetch и async / await
async function main() {
const vertexShader = await fetch("path/to/file/vertexShader.glsl").then(req => req.text());
...
}
main();
или, конечно, превратить его в функцию
async function main() {
const vertexShader = await loadText("path/to/file/vertexShader.glsl");
...
}
function loadText(url) {
return fetch("path/to/file/vertexShader.glsl").then(req => req.text());
}
main();
или без асинхронного / ожидающего
fetch("path/to/file/vertexShader.glsl")
.then(req => req.text())
.then(function( vertexShader ) {
console.log(vertexShader);
});
или, если хотите, чтобы он выглядел как getScript
getTextFile("path/to/file/vertexShader.glsl", function( vertexShader ) {
console.log(vertexShader);
});
function getTextFile(url, callback) {
fetch("path/to/file/vertexShader.glsl")
.then(req => req.text())
.then(callback);
}
, который сказал, что если бы я и хотел, чтобы мои шейдеры были внешними, я бы использовал import
/ export
, как в
// myvertexshader.glsl
default export `
attribute vec4 position
void main() {
gl_Position = position;
}
`;
И затем вы можете import
это в другой модуль javascript, как в
// main.js
import vertexShader from './myvertexshader.glsl';
...
main.js должен быть включен как модуль
<script src="main.js" type="module"></script>
import
работает только в современных браузерах (например, в тех, которые запускают WebGL2), но вы можете использовать что-то вроде rollup , чтобы преобразовать его обратно в старый файл JavaScript в одном стиле.
Преимущество заключается в том, что во время разработки все ваши файлы являются отдельными, но для производства / развертывания вы можете встроить свой JavaScript в один большой файл, который будет загружаться намного быстрее, чем многие маленькие файлы
three.js делает это , если вы хотите увидеть пример