vislite
Version:
灵活、快速、简单的数据可视化交互式跨端前端库
42 lines (40 loc) • 1.66 kB
JavaScript
/*!
* Shader of VISLite JavaScript Library v1.3.0
* git+https://github.com/oi-contrib/VISLite.git
*/
var loadShader = function (painter, type, source) {
var shader = painter.createShader(type);
if (shader == null)
throw new Error('Unable to create shader!');
painter.shaderSource(shader, source);
painter.compileShader(shader);
if (!painter.getShaderParameter(shader, painter.COMPILE_STATUS))
throw new Error('Failed to compile shader:' + painter.getShaderInfoLog(shader));
return shader;
};
var useShader = function (painter, vshaderSource, fshaderSource) {
var vertexShader = loadShader(painter, painter.VERTEX_SHADER, vshaderSource);
var fragmentShader = loadShader(painter, painter.FRAGMENT_SHADER, fshaderSource);
var glProgram = painter.createProgram();
painter.attachShader(glProgram, vertexShader);
painter.attachShader(glProgram, fragmentShader);
painter.linkProgram(glProgram);
if (!painter.getProgramParameter(glProgram, painter.LINK_STATUS))
throw new Error('Failed to link program: ' + painter.getProgramInfoLog(glProgram));
return glProgram;
};
var ShaderObject = (function () {
function ShaderObject(painter) {
this.__painter = painter;
}
ShaderObject.prototype.use = function () {
this.__painter.useProgram(this.program);
return this;
};
ShaderObject.prototype.compile = function (vshaderSource, fshaderSource) {
this.program = useShader(this.__painter, vshaderSource, fshaderSource);
return this;
};
return ShaderObject;
}());
export { ShaderObject as default };