/**
 * Sigma.js WebGL Abstract Edge Program
 * =====================================
 *
 * @module
 */
import Sigma from "../../../../sigma";
import { AbstractProgram, Program } from "./program";
import { NodeDisplayData, EdgeDisplayData, RenderParams } from "../../../../types";
import { EdgeLabelDrawingFunction } from "../../../../utils/edge-labels";
export declare abstract class AbstractEdgeProgram extends AbstractProgram {
    static drawLabel: EdgeLabelDrawingFunction | undefined;
    abstract process(edgeIndex: number, offset: number, sourceData: NodeDisplayData, targetData: NodeDisplayData, data: EdgeDisplayData): void;
}
export declare abstract class EdgeProgram<Uniform extends string = string> extends Program<Uniform> implements AbstractEdgeProgram {
    static drawLabel: EdgeLabelDrawingFunction | undefined;
    process(edgeIndex: number, offset: number, sourceData: NodeDisplayData, targetData: NodeDisplayData, data: EdgeDisplayData): void;
    abstract processVisibleItem(edgeIndex: number, startIndex: number, sourceData: NodeDisplayData, targetData: NodeDisplayData, data: EdgeDisplayData): void;
}
declare class EdgeImageClass implements AbstractEdgeProgram {
    static drawLabel: EdgeLabelDrawingFunction | undefined;
    constructor(_gl: WebGLRenderingContext, _pickingBuffer: WebGLFramebuffer | null, _renderer: Sigma);
    reallocate(_capacity: number): void;
    process(_edgeIndex: number, _offset: number, _sourceData: NodeDisplayData, _targetData: NodeDisplayData, _data: EdgeDisplayData): void;
    render(_params: RenderParams): void;
}
export type EdgeProgramType = typeof EdgeImageClass;
/**
 * Helper function combining two or more programs into a single compound one.
 * Note that this is more a quick & easy way to combine program than a really
 * performant option. More performant programs can be written entirely.
 *
 * @param  {array}    programClasses - Program classes to combine.
 * @param  {function} drawLabel - An optional edge "draw label" function.
 * @return {function}
 */
export declare function createEdgeCompoundProgram(programClasses: Array<EdgeProgramType>, drawLabel?: EdgeLabelDrawingFunction): EdgeProgramType;
export {};
