import Workflow, { Feature } from './workflow.js';
import type Context from '../context/context.js';
import type { FillData } from 'workers/worker.spec.js';
import type { TileGL as Tile } from 'source/tile.spec.js';
import type { VectorPoint } from 'gis-tools/index.js';
import type { FillDefinition, FillStyle, FillWorkflowLayerGuide, LayerDefinitionBase } from 'style/style.spec.js';
import type { FillFeature as FillFeatureSpec, FillSource, FillWorkflow as FillWorkflowSpec, FillWorkflowUniforms, TileMaskSource } from './workflow.spec.js';
/** Fill Feature is a standalone fill render storage unit that can be drawn to the GPU */
export declare class FillFeature extends Feature implements FillFeatureSpec {
    workflow: FillWorkflowSpec;
    layerGuide: FillWorkflowLayerGuide;
    maskLayer: boolean;
    source: FillSource | TileMaskSource;
    mode: number;
    count: number;
    offset: number;
    patternXY: VectorPoint;
    patternWH: [w: number, h: number];
    patternMovement: number;
    featureCode: number[];
    tile: Tile;
    parent?: Tile | undefined;
    type: "fill";
    color?: number[];
    opacity?: number[];
    /**
     * @param workflow - the fill workflow
     * @param layerGuide - layer guide for this feature
     * @param maskLayer - whether or not the layer is a mask or a fill
     * @param source - the fill or mask source
     * @param mode - the draw mode
     * @param count - the number of points
     * @param offset - the offset of the points
     * @param patternXY - the pattern offset
     * @param patternWH - the pattern size
     * @param patternMovement - the pattern movement position
     * @param featureCode - the feature code that tells the GPU how to compute it's properties
     * @param tile - the tile that the feature is drawn on
     * @param parent - the parent tile if applicable
     */
    constructor(workflow: FillWorkflowSpec, layerGuide: FillWorkflowLayerGuide, maskLayer: boolean, source: FillSource | TileMaskSource, mode: number, count: number, offset: number, patternXY: VectorPoint, patternWH: [w: number, h: number], patternMovement: number, featureCode: number[], tile: Tile, 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): FillFeature;
    /**
     * Set the attributes of the feature if the context is webgl1
     * @param color - the color
     * @param opacity - the opacity
     */
    setWebGL1Attributes(color?: number[], opacity?: number[]): void;
}
/** Fill Workflow */
export default class FillWorkflow extends Workflow implements FillWorkflowSpec {
    #private;
    label: "fill";
    uniforms: {
        [key in FillWorkflowUniforms]: WebGLUniformLocation;
    };
    layerGuides: Map<number, FillWorkflowLayerGuide>;
    /** @param context - The WebGL(1|2) context */
    constructor(context: Context);
    /**
     * Build layer definition for the fill feature
     * @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: FillStyle): FillDefinition;
    /**
     * Build a mask feature
     * @param maskFeature - the mask feature guide
     * @param tile - the tile that needs a mask
     */
    buildMaskFeature(maskFeature: FillDefinition, tile: Tile): void;
    /**
     * Build a fill features from source data sent from the Tile Worker
     * @param fillData - the fill data from the Tile Worker
     * @param tile - the tile that the features belong to
     */
    buildSource(fillData: FillData, tile: Tile): void;
    /**
     * Draw the fill feature
     * @param feature - the fill feature
     * @param interactive - whether or not the feature is interactive
     */
    draw(feature: FillFeatureSpec, interactive?: boolean): void;
    /**
     * Draw a mask to the GPU
     * @param mask - the tile mask
     */
    drawMask(mask: TileMaskSource): void;
}
