import type { HillshadeData } from 'workers/worker.spec.js';
import type { TileGPU as Tile } from 'source/tile.spec.js';
import type { WebGPUContext } from '../context/index.js';
import type { HillshadeDefinition, HillshadeStyle, HillshadeWorkflowLayerGuideGPU, LayerDefinitionBase } from 'style/style.spec.js';
import type { HillshadeFeature as HillshadeFeatureSpec, HillshadeWorkflow as HillshadeWorkflowSpec, RasterSource } from './workflow.spec.js';
/** Hillshade Feature is a standalone hillshade render storage unit that can be drawn to the GPU */
export declare class HilllshadeFeature implements HillshadeFeatureSpec {
    #private;
    layerGuide: HillshadeWorkflowLayerGuideGPU;
    workflow: HillshadeWorkflowSpec;
    tile: Tile;
    source: RasterSource;
    featureCode: number[];
    hillshadeFadeBuffer: GPUBuffer;
    featureCodeBuffer: GPUBuffer;
    fadeStartTime: number;
    parent?: Tile | undefined;
    type: "hillshade";
    sourceName: string;
    fadeDuration: number;
    bindGroup: GPUBindGroup;
    hillshadeBindGroup: GPUBindGroup;
    /**
     * @param layerGuide - the layer guide for this feature
     * @param workflow - the hillshade workflow
     * @param tile - the tile this feature is drawn on
     * @param source - the hillshade source
     * @param featureCode - the encoded feature code
     * @param hillshadeFadeBuffer - the fade buffer
     * @param featureCodeBuffer - the feature code buffer
     * @param fadeStartTime - the start time of the fade for smooth transitions
     * @param parent - the parent tile if applicable
     */
    constructor(layerGuide: HillshadeWorkflowLayerGuideGPU, workflow: HillshadeWorkflowSpec, tile: Tile, source: RasterSource, featureCode: number[], hillshadeFadeBuffer: GPUBuffer, featureCodeBuffer: GPUBuffer, fadeStartTime?: number, parent?: Tile | undefined);
    /** Draw the feature to the GPU */
    draw(): void;
    /** Destroy the feature */
    destroy(): void;
    /**
     * Duplicate this feature
     * @param tile - the tile this feature is drawn on
     * @param parent - the parent tile if applicable
     * @returns the duplicated feature
     */
    duplicate(tile: Tile, parent?: Tile): HilllshadeFeature;
}
/** Hillshade Workflow */
export default class HillshadeWorkflow implements HillshadeWorkflowSpec {
    #private;
    context: WebGPUContext;
    layerGuides: Map<number, HillshadeWorkflowLayerGuideGPU>;
    pipeline: GPURenderPipeline;
    hillshadeBindGroupLayout: GPUBindGroupLayout;
    /** @param context - The WebGPU context */
    constructor(context: WebGPUContext);
    /** Setup the workflow */
    setup(): Promise<void>;
    /** Destroy and cleanup the workflow */
    destroy(): void;
    /**
     * Build the layer definition for this workflow
     * @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: HillshadeStyle): HillshadeDefinition;
    /**
     * Build the source hillshade data into hillshade features
     * @param hillshadeData - the input hillshade data
     * @param tile - the tile we are building the features for
     */
    buildSource(hillshadeData: HillshadeData, tile: Tile): void;
    /**
     * Draw a screen quad with the hillshade feature's properties
     * @param feature - hillshade feature
     */
    draw(feature: HillshadeFeatureSpec): void;
}
