import { type TgdMat2, type TgdMat3, type TgdMat4, TgdVec2, TgdVec3, TgdVec4 } from "../math";
import { TgdProgram } from "../program";
import { type TgdCodeBloc } from "../shader";
import type { TgdContext } from "./../context/context";
type UniformBufferObjectType = "bool" | "int" | "uint" | "float" | "double" | "vec2" | "bvec2" | "ivec2" | "uvec2" | "dvec2" | "vec3" | "bvec3" | "ivec3" | "uvec3" | "dvec3" | "vec4" | "bvec4" | "ivec4" | "uvec4" | "dvec4" | "mat2" | "mat3" | "mat4";
export interface TgdUniformBufferObjectOptions<S extends string = string, T extends Record<S, UniformBufferObjectType> = Record<S, UniformBufferObjectType>> {
    uniforms: T;
    values?: Partial<{
        [key in keyof T]: Values[T[key]];
    }>;
}
export declare class TgdUniformBufferObject<S extends string = string, T extends Record<S, UniformBufferObjectType> = Record<S, UniformBufferObjectType>> {
    readonly context: TgdContext;
    readonly bindingPoint: number;
    readonly values: { [key in S]: Values[T[key]]; };
    private readonly data;
    private readonly view;
    private readonly uniforms;
    private readonly buffer;
    private dirty;
    constructor(context: TgdContext, { uniforms, values }: TgdUniformBufferObjectOptions<S, T>);
    get names(): string[];
    delete(): void;
    bindToProgram(program: TgdProgram | WebGLProgram, blockName: string): void;
    updateData(): void;
    toShaderCode(blockName: string, instanceName?: string): TgdCodeBloc;
    debug(caption?: string): void;
    private makeAccessor;
}
type Values = {
    bool: number;
    int: number;
    uint: number;
    float: number;
    double: number;
    vec2: Readonly<TgdVec2>;
    bvec2: Readonly<TgdVec2>;
    ivec2: Readonly<TgdVec2>;
    uvec2: Readonly<TgdVec2>;
    dvec2: Readonly<TgdVec2>;
    vec3: Readonly<TgdVec3>;
    bvec3: Readonly<TgdVec3>;
    ivec3: Readonly<TgdVec3>;
    uvec3: Readonly<TgdVec3>;
    dvec3: Readonly<TgdVec3>;
    vec4: Readonly<TgdVec4>;
    bvec4: Readonly<TgdVec4>;
    ivec4: Readonly<TgdVec4>;
    uvec4: Readonly<TgdVec4>;
    dvec4: Readonly<TgdVec4>;
    mat2: Readonly<TgdMat2>;
    mat3: Readonly<TgdMat3>;
    mat4: Readonly<TgdMat4>;
};
export {};
//# sourceMappingURL=uniform-buffer-object.d.ts.map