У меня была такая же проблема, и я обнаружил, что это работает для меня с jQuery:
var fragmentShaderSRC = null,
var vertexShaderSRC = null;
...
function executeProgram(){ //main program }
...
$.get("shader.fs", function(data){
fragmentShaderSRC = data.firstChild.textContent;
$.get("shader.vs", function(data){
vertexShaderSRC = data.firstChild.textContent;
executeProgram();
});
});
Где shader.fs
и shader.vs
- мои шейдеры (включая
<script type="x-shader/x-fragment">
и
<script type="x-shader/x-vertex">
строк объявления)
Обновление
С Chrome интеллектуальное предположение не выбирает «xml». Следующий код работает и в Chrome:
$.ajax({
url: 'shader.fs',
success: function(data){
fragmentShaderSRC = data.firstChild.textContent;
$.ajax({
url: 'shader.vs',
success: function(data){
vertexShaderSRC = data.firstChild.textContent;
executeProgram();
},
dataType: 'xml'
})
},
dataType: 'xml'
});
Обновление 2:
Поскольку <
и &
в источнике шейдера необходимо экранировать для загрузки в виде XML, это работает постоянно, даже если вы используете операторы less than сравнения или логические операторы и:
var vs_source = null,
fs_source = null;
$.ajax({
async: false,
url: './my_shader.vs',
success: function (data) {
vs_source = $(data).html();
},
dataType: 'html'
});
$.ajax({
async: false,
url: './my_shader.fs',
success: function (data) {
fs_source = $(data).html();
},
dataType: 'html'
});