import { WebGLExtensions } from './WebGLExtensions';
import { WebGLAttributes } from './WebGLAttributes';
import { WebGLProgram } from './WebGLProgram';
import { WebGLCapabilities } from './WebGLCapabilities';
import { Object3D } from './../../core/Object3D';
import { BufferGeometry } from './../../core/BufferGeometry';
import { BufferAttribute } from './../../core/BufferAttribute';
import { Material } from './../../materials/Material';

export class WebGLBindingStates {

	constructor( gl: WebGLRenderingContext, extensions: WebGLExtensions, attributes: WebGLAttributes, capabilities: WebGLCapabilities );

	setup( object: Object3D, material: Material, program: WebGLProgram, geometry: BufferGeometry, index: BufferAttribute ): void;
	reset(): void;
	resetDefaultState(): void;
	dispose(): void;
	releaseStatesOfGeometry(): void;
	releaseStatesOfProgram(): void;
	initAttributes(): void;
	enableAttribute( attribute: number ): void;
	disableUnusedAttributes(): void;

}
