/**
 * Copyright (c) 2021-2026 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Sukolsak Sakshuwong <sukolsak@stanford.edu>
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
import { GraphicsRenderObject } from '../../mol-gl/render-object.js';
import { BaseValues } from '../../mol-gl/renderable/schema.js';
import { TextureImage } from '../../mol-gl/renderable/util.js';
import { WebGLContext } from '../../mol-gl/webgl/context.js';
import { Mesh } from '../../mol-geo/geometry/mesh/mesh.js';
import { RuntimeContext } from '../../mol-task/index.js';
import { Color } from '../../mol-util/color/color.js';
import { RenderObjectExporter, RenderObjectExportData } from './render-object-exporter.js';
import { ValueCell } from '../../mol-util/value-cell.js';
type MeshMode = 'points' | 'lines' | 'triangles';
export interface AddMeshInput {
    mesh: {
        vertices: Float32Array;
        normals: Float32Array | undefined;
        indices: Uint32Array | undefined;
        groups: Float32Array | Uint8Array;
        vertexCount: number;
        drawCount: number;
        vertexMapping?: number[];
    } | undefined;
    meshes: Mesh[] | undefined;
    values: BaseValues & {
        readonly uDoubleSided?: ValueCell<boolean>;
        readonly aGroup?: ValueCell<Float32Array>;
        readonly tPositionGroup?: ValueCell<TextureImage<Float32Array>>;
    };
    isGeoTexture: boolean;
    mode: MeshMode;
    webgl: WebGLContext | undefined;
    ctx: RuntimeContext;
    vertexMapping?: number[];
}
export type MeshGeoData = {
    values: BaseValues & {
        readonly aGroup?: ValueCell<Float32Array>;
        readonly tPositionGroup?: ValueCell<TextureImage<Float32Array>>;
    };
    groups?: Float32Array | Uint8Array;
    vertexCount: number;
    instanceIndex: number;
    isGeoTexture: boolean;
    mode: MeshMode;
    vertexMapping?: number[];
};
export declare abstract class MeshExporter<D extends RenderObjectExportData> implements RenderObjectExporter<D> {
    abstract readonly fileExtension: string;
    private static getSizeFromTexture;
    private static getSize;
    protected static getGroup(groups: Float32Array | Uint8Array, i: number): number;
    protected static getInterpolatedColors(webgl: WebGLContext, input: {
        vertices: Float32Array;
        vertexCount: number;
        values: BaseValues;
        stride: 3 | 4;
        colorType: 'volume' | 'volumeInstance';
    }): Uint8Array<ArrayBufferLike>;
    protected static getInterpolatedOverpaint(webgl: WebGLContext, input: {
        vertices: Float32Array;
        vertexCount: number;
        values: BaseValues;
        stride: 3 | 4;
        colorType: 'volumeInstance';
    }): Uint8Array<ArrayBufferLike>;
    protected static getInterpolatedTransparency(webgl: WebGLContext, input: {
        vertices: Float32Array;
        vertexCount: number;
        values: BaseValues;
        stride: 3 | 4;
        colorType: 'volumeInstance';
    }): Uint8Array<ArrayBufferLike>;
    protected static quantizeColors(colorArray: Uint8Array, vertexCount: number): void;
    protected static getInstance(input: AddMeshInput, instanceIndex: number): {
        vertices: Float32Array;
        normals: Float32Array | undefined;
        indices: Uint32Array | undefined;
        groups: Float32Array | Uint8Array;
        vertexCount: number;
        drawCount: number;
        vertexMapping?: number[];
    };
    protected static getColor(vertexIndex: number, geoData: MeshGeoData, interpolatedColors?: Uint8Array, interpolatedOverpaint?: Uint8Array): Color;
    protected static getTransparency(vertexIndex: number, geoData: MeshGeoData, interpolatedTransparency?: Uint8Array): number;
    protected abstract addMeshWithColors(input: AddMeshInput): Promise<void>;
    private addMesh;
    private addLineStrips;
    private addLineSegments;
    private addLines;
    private addPoints;
    private addSpheres;
    private addCylinders;
    private addTextureMesh;
    add(renderObject: GraphicsRenderObject, webgl: WebGLContext, ctx: RuntimeContext): Promise<void> | undefined;
    protected options: {
        includeHidden: boolean;
        linesAsTriangles: boolean;
        pointsAsTriangles: boolean;
        primitivesQuality: "auto" | "high" | "medium" | "low";
    };
    abstract getData(ctx: RuntimeContext): Promise<D>;
    abstract getBlob(ctx: RuntimeContext): Promise<Blob>;
}
export {};
