// Based on sigma.js/src/rendering/webgl/programs/node.fast.ts import { NodeDisplayData } from "sigma/types"; import { floatColor } from "sigma/utils"; import vertexShaderSource from "sigma/rendering/webgl/shaders/node.fast.vert.glsl"; import fragmentShaderSource from "sigma/rendering/webgl/shaders/node.fast.frag.glsl"; import { AbstractNodeProgram } from "sigma/rendering/webgl/programs/common/node"; import { RenderParams } from "sigma/rendering/webgl/programs/common/program"; import CircleNodeProgram from 'sigma/rendering/webgl/programs/node.fast'; const POINTS = 2; const ATTRIBUTES = 4; /* export default class NodeContourFastProgram extends AbstractNodeProgram { //constructor(gl : WebGLRenderingContext) { constructor(gl) { super(gl, vertexShaderSource, fragmentShaderSource, POINTS, ATTRIBUTES); this.bind(); } */ export default class NodeContourFastProgram extends CircleNodeProgram { constructor(gl) { super(gl, vertexShaderSource, fragmentShaderSource, POINTS, ATTRIBUTES); // NOTE super method above will set POINTS = 1 from CircleNodeProgram // We need to overwrite this // https://gitlab.iscpif.fr/gargantext/purescript-gargantext/issues/471 this.points = POINTS; this.bind(); } //process(data: NodeDisplayData, hidden: boolean, offset: number): void { process(data, hidden, offset) { const array = this.array; let i = offset * POINTS * ATTRIBUTES; if (hidden) { // contour array[i++] = 0; array[i++] = 0; array[i++] = 0; array[i++] = 0; // circle array[i++] = 0; array[i++] = 0; array[i++] = 0; array[i++] = 0; return; } const color = floatColor(data.color); //const black = floatColor('black'); const gray = floatColor('#aaa') // contour array[i++] = data.x; array[i++] = data.y; array[i++] = data.size + 1; //array[i++] = black; array[i++] = gray; // circle array[i++] = data.x; array[i++] = data.y; array[i++] = data.size; array[i] = color; } //render(params: RenderParams): void { render(params) { if (this.hasNothingToRender()) return; const gl = this.gl; const program = this.program; gl.useProgram(program); gl.uniform1f(this.ratioLocation, 1 / Math.sqrt(params.ratio)); gl.uniform1f(this.scaleLocation, params.scalingRatio); gl.uniformMatrix3fv(this.matrixLocation, false, params.matrix); gl.drawArrays(gl.POINTS, 0, this.array.length / ATTRIBUTES); } }