/**
 * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
 *
 * @author Alexander Rose <alexander.rose@weirdbyte.de>
 */
import { Program } from './webgl/program';
import { RenderableValues, Values, RenderableSchema, BaseValues } from './renderable/schema';
import { GraphicsRenderItem, ComputeRenderItem, GraphicsRenderVariant } from './webgl/render-item';
import { Textures } from './webgl/texture';
export declare type RenderableState = {
    disposed: boolean;
    visible: boolean;
    alphaFactor: number;
    pickable: boolean;
    colorOnly: boolean;
    opaque: boolean;
    writeDepth: boolean;
    noClip: boolean;
};
export interface Renderable<T extends RenderableValues> {
    readonly id: number;
    readonly materialId: number;
    readonly values: T;
    readonly state: RenderableState;
    render: (variant: GraphicsRenderVariant, sharedTexturesList?: Textures) => void;
    getProgram: (variant: GraphicsRenderVariant) => Program;
    update: () => void;
    dispose: () => void;
}
export declare function createRenderable<T extends Values<RenderableSchema>>(renderItem: GraphicsRenderItem, values: T, state: RenderableState): Renderable<T>;
export declare type GraphicsRenderable = Renderable<RenderableValues & BaseValues>;
export interface ComputeRenderable<T extends RenderableValues> {
    readonly id: number;
    readonly values: T;
    render: () => void;
    update: () => void;
    dispose: () => void;
}
export declare function createComputeRenderable<T extends Values<RenderableSchema>>(renderItem: ComputeRenderItem, values: T): ComputeRenderable<T>;
