import Workflow, { Feature } from './workflow.js';
import type Context from '../context/context.js';
import type { LineData } from 'workers/worker.spec.js';
import type { TileGL as Tile } from 'source/tile.spec.js';
import type { ColorArray, LayerDefinitionBase, LineDefinition, LineStyle, LineWorkflowLayerGuide } from 'style/style.spec.js';
import type { LineFeature as LineFeatureSpec, LineSource, LineWorkflow as LineWorkflowSpec, LineWorkflowUniforms } from './workflow.spec.js';
/** Line Feature is a standalone line render storage unit that can be drawn to the GPU */
export declare class LineFeature extends Feature implements LineFeatureSpec {
    workflow: LineWorkflowSpec;
    layerGuide: LineWorkflowLayerGuide;
    source: LineSource;
    tile: Tile;
    count: number;
    offset: number;
    featureCode: number[];
    cap: number;
    parent?: Tile | undefined;
    type: "line";
    color?: ColorArray;
    opacity?: number;
    width?: number;
    gapwidth?: number;
    /**
     * @param workflow - the line workflow
     * @param layerGuide - layer guide for this feature
     * @param source - the line source
     * @param tile - the tile that the feature is drawn on
     * @param count - the number of lines
     * @param offset - the offset of the lines
     * @param featureCode - the encoded feature that tells the GPU how to compute it's properties
     * @param cap - the line cap
     * @param parent - the parent tile
     */
    constructor(workflow: LineWorkflowSpec, layerGuide: LineWorkflowLayerGuide, source: LineSource, tile: Tile, count: number, offset: number, featureCode: number[], cap: number, parent?: Tile | undefined);
    /**
     * Draw the feature to the GPU
     * @param interactive - whether or not the feature is interactive
     */
    draw(interactive?: boolean): void;
    /**
     * Duplicate this feature
     * @param tile - the tile that the feature is drawn on
     * @param parent - the parent tile if applicable
     * @returns the duplicated feature
     */
    duplicate(tile: Tile, parent?: Tile): LineFeature;
    /**
     * Set the attributes of the feature if the context is webgl1
     * @param color - the color
     * @param opacity - the opacity
     * @param width - the width
     * @param gapwidth - the gapwidth
     */
    setWebGL1Attributes(color?: ColorArray, opacity?: number, width?: number, gapwidth?: number): void;
}
/** Line Workflow */
export default class LineWorkflow extends Workflow implements LineWorkflowSpec {
    #private;
    label: "line";
    curTexture: number;
    typeBuffer?: WebGLBuffer;
    layerGuides: Map<number, LineWorkflowLayerGuide>;
    uniforms: {
        [key in LineWorkflowUniforms]: WebGLUniformLocation;
    };
    /** @param context - the WebGL(1|2) context */
    constructor(context: Context);
    /**
     * Build the layer definition
     * @param layerBase - the common layer attributes
     * @param layer - the user defined layer attributes
     * @returns a built layer definition that's ready to describe how to render a feature
     */
    buildLayerDefinition(layerBase: LayerDefinitionBase, layer: LineStyle): LineDefinition;
    /**
     * Build the line source
     * @param lineData - raw input data from the Tile Worker
     * @param tile - the tile that the feature is drawn on
     */
    buildSource(lineData: LineData, tile: Tile): void;
    /** Use this workflow as the current shaders for the GPU */
    use(): void;
    /**
     * Draw a line feature
     * @param feature - the line feature
     * @param _interactive - whether or not the feature is interactive
     */
    draw(feature: LineFeatureSpec, _interactive?: boolean): void;
}
