sigma
Version:
A JavaScript library aimed at visualizing graphs of thousands of nodes and edges.
466 lines (445 loc) • 22.8 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var index = require('../../dist/index-88310d0d.cjs.dev.js');
var inherits = require('../../dist/inherits-04acba6b.cjs.dev.js');
var colors = require('../../dist/colors-fe6de9d2.cjs.dev.js');
// language=GLSL
var SHADER_SOURCE$6 = /*glsl*/"\nprecision mediump float;\n\nvarying vec4 v_color;\nvarying float v_border;\n\nconst float radius = 0.5;\nconst vec4 transparent = vec4(0.0, 0.0, 0.0, 0.0);\n\nvoid main(void) {\n vec2 m = gl_PointCoord - vec2(0.5, 0.5);\n float dist = radius - length(m);\n\n // No antialiasing for picking mode:\n #ifdef PICKING_MODE\n if (dist > v_border)\n gl_FragColor = v_color;\n else\n gl_FragColor = transparent;\n\n #else\n float t = 0.0;\n if (dist > v_border)\n t = 1.0;\n else if (dist > 0.0)\n t = dist / v_border;\n\n gl_FragColor = mix(transparent, v_color, t);\n #endif\n}\n";
var FRAGMENT_SHADER_SOURCE$2 = SHADER_SOURCE$6;
// language=GLSL
var SHADER_SOURCE$5 = /*glsl*/"\nattribute vec4 a_id;\nattribute vec4 a_color;\nattribute vec2 a_position;\nattribute float a_size;\n\nuniform float u_sizeRatio;\nuniform float u_pixelRatio;\nuniform mat3 u_matrix;\n\nvarying vec4 v_color;\nvarying float v_border;\n\nconst float bias = 255.0 / 254.0;\n\nvoid main() {\n gl_Position = vec4(\n (u_matrix * vec3(a_position, 1)).xy,\n 0,\n 1\n );\n\n // Multiply the point size twice:\n // - x SCALING_RATIO to correct the canvas scaling\n // - x 2 to correct the formulae\n gl_PointSize = a_size / u_sizeRatio * u_pixelRatio * 2.0;\n\n v_border = (0.5 / a_size) * u_sizeRatio;\n\n #ifdef PICKING_MODE\n // For picking mode, we use the ID as the color:\n v_color = a_id;\n #else\n // For normal mode, we use the color:\n v_color = a_color;\n #endif\n\n v_color.a *= bias;\n}\n";
var VERTEX_SHADER_SOURCE$3 = SHADER_SOURCE$5;
var _WebGLRenderingContex$3 = WebGLRenderingContext,
UNSIGNED_BYTE$3 = _WebGLRenderingContex$3.UNSIGNED_BYTE,
FLOAT$3 = _WebGLRenderingContex$3.FLOAT;
var UNIFORMS$3 = ["u_sizeRatio", "u_pixelRatio", "u_matrix"];
var NodePointProgram = /*#__PURE__*/function (_NodeProgram) {
function NodePointProgram() {
inherits._classCallCheck(this, NodePointProgram);
return inherits._callSuper(this, NodePointProgram, arguments);
}
inherits._inherits(NodePointProgram, _NodeProgram);
return inherits._createClass(NodePointProgram, [{
key: "getDefinition",
value: function getDefinition() {
return {
VERTICES: 1,
VERTEX_SHADER_SOURCE: VERTEX_SHADER_SOURCE$3,
FRAGMENT_SHADER_SOURCE: FRAGMENT_SHADER_SOURCE$2,
METHOD: WebGLRenderingContext.POINTS,
UNIFORMS: UNIFORMS$3,
ATTRIBUTES: [{
name: "a_position",
size: 2,
type: FLOAT$3
}, {
name: "a_size",
size: 1,
type: FLOAT$3
}, {
name: "a_color",
size: 4,
type: UNSIGNED_BYTE$3,
normalized: true
}, {
name: "a_id",
size: 4,
type: UNSIGNED_BYTE$3,
normalized: true
}]
};
}
}, {
key: "processVisibleItem",
value: function processVisibleItem(nodeIndex, startIndex, data) {
var array = this.array;
array[startIndex++] = data.x;
array[startIndex++] = data.y;
array[startIndex++] = data.size;
array[startIndex++] = colors.floatColor(data.color);
array[startIndex++] = nodeIndex;
}
}, {
key: "setUniforms",
value: function setUniforms(_ref, _ref2) {
var sizeRatio = _ref.sizeRatio,
pixelRatio = _ref.pixelRatio,
matrix = _ref.matrix;
var gl = _ref2.gl,
uniformLocations = _ref2.uniformLocations;
var u_sizeRatio = uniformLocations.u_sizeRatio,
u_pixelRatio = uniformLocations.u_pixelRatio,
u_matrix = uniformLocations.u_matrix;
gl.uniform1f(u_pixelRatio, pixelRatio);
gl.uniform1f(u_sizeRatio, sizeRatio);
gl.uniformMatrix3fv(u_matrix, false, matrix);
}
}]);
}(index.NodeProgram);
// language=GLSL
var SHADER_SOURCE$4 = /*glsl*/"\nattribute vec4 a_id;\nattribute vec4 a_color;\nattribute vec2 a_normal;\nattribute float a_normalCoef;\nattribute vec2 a_positionStart;\nattribute vec2 a_positionEnd;\nattribute float a_positionCoef;\nattribute float a_sourceRadius;\nattribute float a_targetRadius;\nattribute float a_sourceRadiusCoef;\nattribute float a_targetRadiusCoef;\n\nuniform mat3 u_matrix;\nuniform float u_zoomRatio;\nuniform float u_sizeRatio;\nuniform float u_pixelRatio;\nuniform float u_correctionRatio;\nuniform float u_minEdgeThickness;\nuniform float u_lengthToThicknessRatio;\nuniform float u_feather;\n\nvarying vec4 v_color;\nvarying vec2 v_normal;\nvarying float v_thickness;\nvarying float v_feather;\n\nconst float bias = 255.0 / 254.0;\n\nvoid main() {\n float minThickness = u_minEdgeThickness;\n\n vec2 normal = a_normal * a_normalCoef;\n vec2 position = a_positionStart * (1.0 - a_positionCoef) + a_positionEnd * a_positionCoef;\n\n float normalLength = length(normal);\n vec2 unitNormal = normal / normalLength;\n\n // These first computations are taken from edge.vert.glsl. Please read it to\n // get better comments on what's happening:\n float pixelsThickness = max(normalLength, minThickness * u_sizeRatio);\n float webGLThickness = pixelsThickness * u_correctionRatio / u_sizeRatio;\n\n // Here, we move the point to leave space for the arrow heads:\n // Source arrow head\n float sourceRadius = a_sourceRadius * a_sourceRadiusCoef;\n float sourceDirection = sign(sourceRadius);\n float webGLSourceRadius = sourceDirection * sourceRadius * 2.0 * u_correctionRatio / u_sizeRatio;\n float webGLSourceArrowHeadLength = webGLThickness * u_lengthToThicknessRatio * 2.0;\n vec2 sourceCompensationVector =\n vec2(-sourceDirection * unitNormal.y, sourceDirection * unitNormal.x)\n * (webGLSourceRadius + webGLSourceArrowHeadLength);\n \n // Target arrow head\n float targetRadius = a_targetRadius * a_targetRadiusCoef;\n float targetDirection = sign(targetRadius);\n float webGLTargetRadius = targetDirection * targetRadius * 2.0 * u_correctionRatio / u_sizeRatio;\n float webGLTargetArrowHeadLength = webGLThickness * u_lengthToThicknessRatio * 2.0;\n vec2 targetCompensationVector =\n vec2(-targetDirection * unitNormal.y, targetDirection * unitNormal.x)\n * (webGLTargetRadius + webGLTargetArrowHeadLength);\n\n // Here is the proper position of the vertex\n gl_Position = vec4((u_matrix * vec3(position + unitNormal * webGLThickness + sourceCompensationVector + targetCompensationVector, 1)).xy, 0, 1);\n\n v_thickness = webGLThickness / u_zoomRatio;\n\n v_normal = unitNormal;\n\n v_feather = u_feather * u_correctionRatio / u_zoomRatio / u_pixelRatio * 2.0;\n\n #ifdef PICKING_MODE\n // For picking mode, we use the ID as the color:\n v_color = a_id;\n #else\n // For normal mode, we use the color:\n v_color = a_color;\n #endif\n\n v_color.a *= bias;\n}\n";
var VERTEX_SHADER_SOURCE$2 = SHADER_SOURCE$4;
var _WebGLRenderingContex$2 = WebGLRenderingContext,
UNSIGNED_BYTE$2 = _WebGLRenderingContex$2.UNSIGNED_BYTE,
FLOAT$2 = _WebGLRenderingContex$2.FLOAT;
var UNIFORMS$2 = ["u_matrix", "u_zoomRatio", "u_sizeRatio", "u_correctionRatio", "u_pixelRatio", "u_feather", "u_minEdgeThickness", "u_lengthToThicknessRatio"];
var DEFAULT_EDGE_DOUBLE_CLAMPED_PROGRAM_OPTIONS = {
lengthToThicknessRatio: index.DEFAULT_EDGE_ARROW_HEAD_PROGRAM_OPTIONS.lengthToThicknessRatio
};
function createEdgeDoubleClampedProgram(inputOptions) {
var options = index._objectSpread2(index._objectSpread2({}, DEFAULT_EDGE_DOUBLE_CLAMPED_PROGRAM_OPTIONS), inputOptions || {});
return /*#__PURE__*/function (_EdgeProgram) {
function EdgeDoubleClampedProgram() {
inherits._classCallCheck(this, EdgeDoubleClampedProgram);
return inherits._callSuper(this, EdgeDoubleClampedProgram, arguments);
}
inherits._inherits(EdgeDoubleClampedProgram, _EdgeProgram);
return inherits._createClass(EdgeDoubleClampedProgram, [{
key: "getDefinition",
value: function getDefinition() {
return {
VERTICES: 6,
VERTEX_SHADER_SOURCE: VERTEX_SHADER_SOURCE$2,
FRAGMENT_SHADER_SOURCE: index.FRAGMENT_SHADER_SOURCE,
METHOD: WebGLRenderingContext.TRIANGLES,
UNIFORMS: UNIFORMS$2,
ATTRIBUTES: [{
name: "a_positionStart",
size: 2,
type: FLOAT$2
}, {
name: "a_positionEnd",
size: 2,
type: FLOAT$2
}, {
name: "a_normal",
size: 2,
type: FLOAT$2
}, {
name: "a_color",
size: 4,
type: UNSIGNED_BYTE$2,
normalized: true
}, {
name: "a_id",
size: 4,
type: UNSIGNED_BYTE$2,
normalized: true
}, {
name: "a_sourceRadius",
size: 1,
type: FLOAT$2
}, {
name: "a_targetRadius",
size: 1,
type: FLOAT$2
}],
CONSTANT_ATTRIBUTES: [
// If 0, then position will be a_positionStart
// If 1, then position will be a_positionEnd
{
name: "a_positionCoef",
size: 1,
type: FLOAT$2
}, {
name: "a_normalCoef",
size: 1,
type: FLOAT$2
}, {
name: "a_sourceRadiusCoef",
size: 1,
type: FLOAT$2
}, {
name: "a_targetRadiusCoef",
size: 1,
type: FLOAT$2
}],
CONSTANT_DATA: [[0, 1, -1, 0], [0, -1, 1, 0], [1, 1, 0, 1], [1, 1, 0, 1], [0, -1, 1, 0], [1, -1, 0, -1]]
};
}
}, {
key: "processVisibleItem",
value: function processVisibleItem(edgeIndex, startIndex, sourceData, targetData, data) {
var thickness = data.size || 1;
var x1 = sourceData.x;
var y1 = sourceData.y;
var x2 = targetData.x;
var y2 = targetData.y;
var color = colors.floatColor(data.color);
// Computing normals
var dx = x2 - x1;
var dy = y2 - y1;
var sourceRadius = sourceData.size || 1;
var targetRadius = targetData.size || 1;
var len = dx * dx + dy * dy;
var n1 = 0;
var n2 = 0;
if (len) {
len = 1 / Math.sqrt(len);
n1 = -dy * len * thickness;
n2 = dx * len * thickness;
}
var array = this.array;
array[startIndex++] = x1;
array[startIndex++] = y1;
array[startIndex++] = x2;
array[startIndex++] = y2;
array[startIndex++] = n1;
array[startIndex++] = n2;
array[startIndex++] = color;
array[startIndex++] = edgeIndex;
array[startIndex++] = sourceRadius;
array[startIndex++] = targetRadius;
}
}, {
key: "setUniforms",
value: function setUniforms(params, _ref) {
var gl = _ref.gl,
uniformLocations = _ref.uniformLocations;
var u_matrix = uniformLocations.u_matrix,
u_zoomRatio = uniformLocations.u_zoomRatio,
u_feather = uniformLocations.u_feather,
u_pixelRatio = uniformLocations.u_pixelRatio,
u_correctionRatio = uniformLocations.u_correctionRatio,
u_sizeRatio = uniformLocations.u_sizeRatio,
u_minEdgeThickness = uniformLocations.u_minEdgeThickness,
u_lengthToThicknessRatio = uniformLocations.u_lengthToThicknessRatio;
gl.uniformMatrix3fv(u_matrix, false, params.matrix);
gl.uniform1f(u_zoomRatio, params.zoomRatio);
gl.uniform1f(u_sizeRatio, params.sizeRatio);
gl.uniform1f(u_correctionRatio, params.correctionRatio);
gl.uniform1f(u_pixelRatio, params.pixelRatio);
gl.uniform1f(u_feather, params.antiAliasingFeather);
gl.uniform1f(u_minEdgeThickness, params.minEdgeThickness);
gl.uniform1f(u_lengthToThicknessRatio, options.lengthToThicknessRatio);
}
}]);
}(index.EdgeProgram);
}
var EdgeDoubleClampedProgram = createEdgeDoubleClampedProgram();
var EdgeDoubleClampedProgram$1 = EdgeDoubleClampedProgram;
function createEdgeDoubleArrowProgram(inputOptions) {
return index.createEdgeCompoundProgram([createEdgeDoubleClampedProgram(inputOptions), index.createEdgeArrowHeadProgram(inputOptions), index.createEdgeArrowHeadProgram(index._objectSpread2(index._objectSpread2({}, inputOptions), {}, {
extremity: "source"
}))]);
}
var EdgeDoubleArrowProgram = createEdgeDoubleArrowProgram();
var EdgeDoubleArrowProgram$1 = EdgeDoubleArrowProgram;
// language=GLSL
var SHADER_SOURCE$3 = /*glsl*/"\nprecision mediump float;\n\nvarying vec4 v_color;\n\nvoid main(void) {\n gl_FragColor = v_color;\n}\n";
var FRAGMENT_SHADER_SOURCE$1 = SHADER_SOURCE$3;
// language=GLSL
var SHADER_SOURCE$2 = /*glsl*/"\nattribute vec4 a_id;\nattribute vec4 a_color;\nattribute vec2 a_position;\n\nuniform mat3 u_matrix;\n\nvarying vec4 v_color;\n\nconst float bias = 255.0 / 254.0;\n\nvoid main() {\n // Scale from [[-1 1] [-1 1]] to the container:\n gl_Position = vec4(\n (u_matrix * vec3(a_position, 1)).xy,\n 0,\n 1\n );\n\n #ifdef PICKING_MODE\n // For picking mode, we use the ID as the color:\n v_color = a_id;\n #else\n // For normal mode, we use the color:\n v_color = a_color;\n #endif\n\n v_color.a *= bias;\n}\n";
var VERTEX_SHADER_SOURCE$1 = SHADER_SOURCE$2;
var _WebGLRenderingContex$1 = WebGLRenderingContext,
UNSIGNED_BYTE$1 = _WebGLRenderingContex$1.UNSIGNED_BYTE,
FLOAT$1 = _WebGLRenderingContex$1.FLOAT;
var UNIFORMS$1 = ["u_matrix"];
var EdgeLineProgram = /*#__PURE__*/function (_EdgeProgram) {
function EdgeLineProgram() {
inherits._classCallCheck(this, EdgeLineProgram);
return inherits._callSuper(this, EdgeLineProgram, arguments);
}
inherits._inherits(EdgeLineProgram, _EdgeProgram);
return inherits._createClass(EdgeLineProgram, [{
key: "getDefinition",
value: function getDefinition() {
return {
VERTICES: 2,
VERTEX_SHADER_SOURCE: VERTEX_SHADER_SOURCE$1,
FRAGMENT_SHADER_SOURCE: FRAGMENT_SHADER_SOURCE$1,
METHOD: WebGLRenderingContext.LINES,
UNIFORMS: UNIFORMS$1,
ATTRIBUTES: [{
name: "a_position",
size: 2,
type: FLOAT$1
}, {
name: "a_color",
size: 4,
type: UNSIGNED_BYTE$1,
normalized: true
}, {
name: "a_id",
size: 4,
type: UNSIGNED_BYTE$1,
normalized: true
}]
};
}
}, {
key: "processVisibleItem",
value: function processVisibleItem(edgeIndex, startIndex, sourceData, targetData, data) {
var array = this.array;
var x1 = sourceData.x;
var y1 = sourceData.y;
var x2 = targetData.x;
var y2 = targetData.y;
var color = colors.floatColor(data.color);
// First point
array[startIndex++] = x1;
array[startIndex++] = y1;
array[startIndex++] = color;
array[startIndex++] = edgeIndex;
// Second point
array[startIndex++] = x2;
array[startIndex++] = y2;
array[startIndex++] = color;
array[startIndex++] = edgeIndex;
}
}, {
key: "setUniforms",
value: function setUniforms(params, _ref) {
var gl = _ref.gl,
uniformLocations = _ref.uniformLocations;
var u_matrix = uniformLocations.u_matrix;
gl.uniformMatrix3fv(u_matrix, false, params.matrix);
}
}]);
}(index.EdgeProgram);
// language=GLSL
var SHADER_SOURCE$1 = /*glsl*/"\nprecision mediump float;\n\nvarying vec4 v_color;\n\nvoid main(void) {\n gl_FragColor = v_color;\n}\n";
var FRAGMENT_SHADER_SOURCE = SHADER_SOURCE$1;
// language=GLSL
var SHADER_SOURCE = /*glsl*/"\nattribute vec4 a_id;\nattribute vec4 a_color;\nattribute vec2 a_normal;\nattribute float a_normalCoef;\nattribute vec2 a_positionStart;\nattribute vec2 a_positionEnd;\nattribute float a_positionCoef;\n\nuniform mat3 u_matrix;\nuniform float u_sizeRatio;\nuniform float u_correctionRatio;\n\nvarying vec4 v_color;\n\nconst float minThickness = 1.7;\nconst float bias = 255.0 / 254.0;\n\nvoid main() {\n vec2 normal = a_normal * a_normalCoef;\n vec2 position = a_positionStart * (1.0 - a_positionCoef) + a_positionEnd * a_positionCoef;\n\n // The only different here with edge.vert.glsl is that we need to handle null\n // input normal vector. Apart from that, you can read edge.vert.glsl more info\n // on how it works:\n float normalLength = length(normal);\n vec2 unitNormal = normal / normalLength;\n if (normalLength <= 0.0) unitNormal = normal;\n float pixelsThickness = max(normalLength, minThickness * u_sizeRatio);\n float webGLThickness = pixelsThickness * u_correctionRatio / u_sizeRatio;\n\n gl_Position = vec4((u_matrix * vec3(position + unitNormal * webGLThickness, 1)).xy, 0, 1);\n\n #ifdef PICKING_MODE\n // For picking mode, we use the ID as the color:\n v_color = a_id;\n #else\n // For normal mode, we use the color:\n v_color = a_color;\n #endif\n\n v_color.a *= bias;\n}\n";
var VERTEX_SHADER_SOURCE = SHADER_SOURCE;
var _WebGLRenderingContex = WebGLRenderingContext,
UNSIGNED_BYTE = _WebGLRenderingContex.UNSIGNED_BYTE,
FLOAT = _WebGLRenderingContex.FLOAT;
var UNIFORMS = ["u_matrix", "u_sizeRatio", "u_correctionRatio", "u_minEdgeThickness"];
var EdgeTriangleProgram = /*#__PURE__*/function (_EdgeProgram) {
function EdgeTriangleProgram() {
inherits._classCallCheck(this, EdgeTriangleProgram);
return inherits._callSuper(this, EdgeTriangleProgram, arguments);
}
inherits._inherits(EdgeTriangleProgram, _EdgeProgram);
return inherits._createClass(EdgeTriangleProgram, [{
key: "getDefinition",
value: function getDefinition() {
return {
VERTICES: 3,
VERTEX_SHADER_SOURCE: VERTEX_SHADER_SOURCE,
FRAGMENT_SHADER_SOURCE: FRAGMENT_SHADER_SOURCE,
METHOD: WebGLRenderingContext.TRIANGLES,
UNIFORMS: UNIFORMS,
ATTRIBUTES: [{
name: "a_positionStart",
size: 2,
type: FLOAT
}, {
name: "a_positionEnd",
size: 2,
type: FLOAT
}, {
name: "a_normal",
size: 2,
type: FLOAT
}, {
name: "a_color",
size: 4,
type: UNSIGNED_BYTE,
normalized: true
}, {
name: "a_id",
size: 4,
type: UNSIGNED_BYTE,
normalized: true
}],
CONSTANT_ATTRIBUTES: [
// If 0, then position will be a_positionStart
// If 1, then position will be a_positionEnd
{
name: "a_positionCoef",
size: 1,
type: FLOAT
}, {
name: "a_normalCoef",
size: 1,
type: FLOAT
}],
CONSTANT_DATA: [[0, 1], [0, -1], [1, 0]]
};
}
}, {
key: "processVisibleItem",
value: function processVisibleItem(edgeIndex, startIndex, sourceData, targetData, data) {
var thickness = data.size || 1;
var x1 = sourceData.x;
var y1 = sourceData.y;
var x2 = targetData.x;
var y2 = targetData.y;
var color = colors.floatColor(data.color);
// Computing normals
var dx = x2 - x1;
var dy = y2 - y1;
var len = dx * dx + dy * dy;
var n1 = 0;
var n2 = 0;
if (len) {
len = 1 / Math.sqrt(len);
n1 = -dy * len * thickness;
n2 = dx * len * thickness;
}
var array = this.array;
// First point
array[startIndex++] = x1;
array[startIndex++] = y1;
array[startIndex++] = x2;
array[startIndex++] = y2;
array[startIndex++] = n1;
array[startIndex++] = n2;
array[startIndex++] = color;
array[startIndex++] = edgeIndex;
}
}, {
key: "setUniforms",
value: function setUniforms(params, _ref) {
var gl = _ref.gl,
uniformLocations = _ref.uniformLocations;
var u_matrix = uniformLocations.u_matrix,
u_sizeRatio = uniformLocations.u_sizeRatio,
u_correctionRatio = uniformLocations.u_correctionRatio,
u_minEdgeThickness = uniformLocations.u_minEdgeThickness;
gl.uniformMatrix3fv(u_matrix, false, params.matrix);
gl.uniform1f(u_sizeRatio, params.sizeRatio);
gl.uniform1f(u_correctionRatio, params.correctionRatio);
gl.uniform1f(u_minEdgeThickness, params.minEdgeThickness);
}
}]);
}(index.EdgeProgram);
exports.AbstractEdgeProgram = index.AbstractEdgeProgram;
exports.AbstractNodeProgram = index.AbstractNodeProgram;
exports.AbstractProgram = index.AbstractProgram;
exports.DEFAULT_EDGE_ARROW_HEAD_PROGRAM_OPTIONS = index.DEFAULT_EDGE_ARROW_HEAD_PROGRAM_OPTIONS;
exports.DEFAULT_EDGE_CLAMPED_PROGRAM_OPTIONS = index.DEFAULT_EDGE_CLAMPED_PROGRAM_OPTIONS;
exports.EdgeArrowHeadProgram = index.EdgeArrowHeadProgram;
exports.EdgeArrowProgram = index.EdgeArrowProgram;
exports.EdgeClampedProgram = index.EdgeClampedProgram;
exports.EdgeProgram = index.EdgeProgram;
exports.EdgeRectangleProgram = index.EdgeRectangleProgram;
exports.NodeCircleProgram = index.NodeCircleProgram;
exports.NodeProgram = index.NodeProgram;
exports.Program = index.Program;
exports.createEdgeArrowHeadProgram = index.createEdgeArrowHeadProgram;
exports.createEdgeArrowProgram = index.createEdgeArrowProgram;
exports.createEdgeClampedProgram = index.createEdgeClampedProgram;
exports.createEdgeCompoundProgram = index.createEdgeCompoundProgram;
exports.createNodeCompoundProgram = index.createNodeCompoundProgram;
exports.drawDiscNodeHover = index.drawDiscNodeHover;
exports.drawDiscNodeLabel = index.drawDiscNodeLabel;
exports.drawStraightEdgeLabel = index.drawStraightEdgeLabel;
exports.getAttributeItemsCount = index.getAttributeItemsCount;
exports.getAttributesItemsCount = index.getAttributesItemsCount;
exports.killProgram = index.killProgram;
exports.loadFragmentShader = index.loadFragmentShader;
exports.loadProgram = index.loadProgram;
exports.loadVertexShader = index.loadVertexShader;
exports.numberToGLSLFloat = index.numberToGLSLFloat;
exports.DEFAULT_EDGE_DOUBLE_CLAMPED_PROGRAM_OPTIONS = DEFAULT_EDGE_DOUBLE_CLAMPED_PROGRAM_OPTIONS;
exports.EdgeDoubleArrowProgram = EdgeDoubleArrowProgram$1;
exports.EdgeDoubleClampedProgram = EdgeDoubleClampedProgram$1;
exports.EdgeLineProgram = EdgeLineProgram;
exports.EdgeTriangleProgram = EdgeTriangleProgram;
exports.NodePointProgram = NodePointProgram;
exports.createEdgeDoubleArrowProgram = createEdgeDoubleArrowProgram;
exports.createEdgeDoubleClampedProgram = createEdgeDoubleClampedProgram;