import * as THREE from 'three';
import { Uniforms } from './uniform';
export interface ShaderMaterialParameters<U extends Uniforms, D extends Record<string, any>> extends THREE.ShaderMaterialParameters {
    uniforms: U;
    defines: D;
}
export declare class ShaderMaterial<U extends Uniforms, D extends Record<string, any>> extends THREE.ShaderMaterial {
    uniforms: U;
    defines: D;
    constructor(options: ShaderMaterialParameters<U, D>);
    getUniform<K extends keyof Uniforms>(name: K): Uniforms[K]['value'];
    setUniform<K extends keyof Uniforms>(name: K, value: Uniforms[K]['value']): void;
}
export declare class RawShaderMaterial<U extends Uniforms, D extends Record<string, any>> extends THREE.RawShaderMaterial {
    uniforms: U;
    defines: D;
    constructor(options: ShaderMaterialParameters<U, D>);
    getUniform<K extends keyof Uniforms>(name: K): Uniforms[K]['value'];
    setUniform<K extends keyof Uniforms>(name: K, value: Uniforms[K]['value']): void;
}
