import Shader from '../Shader';
var _library = {};
function ShaderLibrary () {
this._pool = {};
}
ShaderLibrary.prototype.get = function(name) {
var key = name;
if (this._pool[key]) {
return this._pool[key];
}
else {
var source = _library[name];
if (!source) {
console.error('Shader "' + name + '"' + ' is not in the library');
return;
}
var shader = new Shader(source.vertex, source.fragment);
this._pool[key] = shader;
return shader;
}
};
ShaderLibrary.prototype.clear = function() {
this._pool = {};
};
function template(name, vertex, fragment) {
_library[name] = {
vertex: vertex,
fragment: fragment
};
}
var defaultLibrary = new ShaderLibrary();
/**
* ### Builin shaders
* + clay.standard
* + clay.basic
* + clay.lambert
* + clay.wireframe
*
* @namespace clay.shader.library
*/
export default {
/**
* Create a new shader library.
*/
createLibrary: function () {
return new ShaderLibrary();
},
/**
* Get shader from default library.
* @param {string} name
* @return {clay.Shader}
* @memberOf clay.shader.library
* @example
* clay.shader.library.get('clay.standard')
*/
get: function () {
return defaultLibrary.get.apply(defaultLibrary, arguments);
},
/**
* @memberOf clay.shader.library
* @param {string} name
* @param {string} vertex - Vertex shader code
* @param {string} fragment - Fragment shader code
*/
template: template,
clear: function () {
return defaultLibrary.clear();
}
};