sigma
Version:
A JavaScript library dedicated to graph drawing.
65 lines (64 loc) • 2.1 kB
JavaScript
;
/**
* Sigma.js Shader Utils
* ======================
*
* Code used to load sigma's shaders.
* @module
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadProgram = exports.loadFragmentShader = exports.loadVertexShader = void 0;
/**
* Function used to load a shader.
*/
function loadShader(type, gl, source) {
var glType = type === "VERTEX" ? gl.VERTEX_SHADER : gl.FRAGMENT_SHADER;
// Creating the shader
var shader = gl.createShader(glType);
if (shader === null) {
throw new Error("loadShader: error while creating the shader");
}
// Loading source
gl.shaderSource(shader, source);
// Compiling the shader
gl.compileShader(shader);
// Retrieving compilation status
var successfullyCompiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
// Throwing if something went awry
if (!successfullyCompiled) {
var infoLog = gl.getShaderInfoLog(shader);
gl.deleteShader(shader);
throw new Error("loadShader: error while compiling the shader:\n" + infoLog + "\n" + source);
}
return shader;
}
function loadVertexShader(gl, source) {
return loadShader("VERTEX", gl, source);
}
exports.loadVertexShader = loadVertexShader;
function loadFragmentShader(gl, source) {
return loadShader("FRAGMENT", gl, source);
}
exports.loadFragmentShader = loadFragmentShader;
/**
* Function used to load a program.
*/
function loadProgram(gl, shaders) {
var program = gl.createProgram();
if (program === null) {
throw new Error("loadProgram: error while creating the program.");
}
var i, l;
// Attaching the shaders
for (i = 0, l = shaders.length; i < l; i++)
gl.attachShader(program, shaders[i]);
gl.linkProgram(program);
// Checking status
var successfullyLinked = gl.getProgramParameter(program, gl.LINK_STATUS);
if (!successfullyLinked) {
gl.deleteProgram(program);
throw new Error("loadProgram: error while linking the program.");
}
return program;
}
exports.loadProgram = loadProgram;