import { TgdBuffer } from "../buffer";
import type { TgdDataset } from "../dataset";
import type { TgdProgram } from "../program";
import type { TgdTypeArrayForElements } from "../types";
export declare class TgdVertexArray {
    readonly gl: WebGL2RenderingContext;
    private readonly program?;
    private readonly datasets?;
    private elements?;
    readonly vao: WebGLVertexArrayObject;
    private readonly drawBuffers;
    private readonly elemBuffer;
    private readonly buffersToDelete;
    /**
     * Number of owners that share this VAO.
     */
    private ownersCount;
    constructor(gl: WebGL2RenderingContext, program?: TgdProgram | undefined, datasets?: Readonly<TgdDataset>[] | undefined, elements?: TgdTypeArrayForElements | undefined);
    share(): void;
    /**
     * When you change the data of a dataset,
     * you must call this function to update the VAO.
     * Because datasets do not own any buffer.
     */
    updateDataset(dataset: TgdDataset): boolean;
    updateElements(elements: number[]): void;
    getBuffer(index: number): TgdBuffer | undefined;
    toCode({ indent }?: Partial<{
        indent: string;
    }>): string;
    debug(caption?: string): void;
    bind(): void;
    unbind(): void;
    delete(): void;
}
//# sourceMappingURL=vao.d.ts.map