-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathShaderLoader.js
51 lines (40 loc) · 1.07 KB
/
ShaderLoader.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
var ShaderLoader = function()
{
// Shaders
ShaderLoader.get = function( id )
{
return ShaderLoader.shaders[ id ];
};
};
ShaderLoader.prototype =
{
loadShaders : function( shaders, baseUrl, callback )
{
ShaderLoader.shaders = shaders;
this.baseUrl = baseUrl || "./";
this.callback = callback;
this.batchLoad( this, 'onShadersReady' );
},
batchLoad : function( scope, callback )
{
var queue = 0;
for ( var name in ShaderLoader.shaders ) {
queue++;
var req = new XMLHttpRequest();
req.onload = loadHandler( name, req );
req.open( 'get', scope.baseUrl + name + '.glsl', true );
req.send();
}
function loadHandler( name, req ) {
return function()
{
ShaderLoader.shaders[ name ] = req.responseText;
if ( --queue <= 0 ) scope[ callback ]();
};
}
},
onShadersReady : function()
{
if( this.callback ) this.callback();
}
};