import { CoordinateSystem, Point, Rectangle } from '@awayjs/core';
import { BitmapImage2D } from '../image/BitmapImage2D';
import { ContextGLBlendEquation, ContextGLBlendFactor } from '../base/ContextGLBlendFactor';
import { ContextGLDrawMode } from '../base/ContextGLDrawMode';
import { ContextGLClearMask } from '../base/ContextGLClearMask';
import { ContextGLCompareMode } from '../base/ContextGLCompareMode';
import { ContextGLMipFilter } from '../base/ContextGLMipFilter';
import { ContextGLStencilAction } from '../base/ContextGLStencilAction';
import { ContextGLTextureFilter } from '../base/ContextGLTextureFilter';
import { ContextGLTriangleFace } from '../base/ContextGLTriangleFace';
import { ContextGLTextureFormat } from '../base/ContextGLTextureFormat';
import { ContextGLWrapMode } from '../base/ContextGLWrapMode';
import { IContextGL } from '../base/IContextGL';
import { CubeTextureWebGL } from './CubeTextureWebGL';
import { IndexBufferWebGL } from './IndexBufferWebGL';
import { ProgramWebGL } from './ProgramWebGL';
import { TextureBaseWebGL } from './TextureBaseWebGL';
import { TextureWebGL } from './TextureWebGL';
import { VertexBufferWebGL } from './VertexBufferWebGL';
import { TextureContextWebGL } from './TextureContextWebGL';
import { VaoContextWebGL, VaoWebGL } from './VaoWebGL';
import { FenceContextWebGL } from './FenceContextWebGL';
import { StatsWebGL } from './StatsWebGL';
export declare class ContextWebGL implements IContextGL {
    readonly stats: StatsWebGL;
    private _container;
    private _width;
    private _height;
    private _drawing;
    private _standardDerivatives;
    private _viewportState;
    private _blendState;
    private _colorMapState;
    private _clearColorState;
    private _clearSD;
    private _depthState;
    private _stencilState;
    private _cullState;
    _gl: WebGLRenderingContext | WebGL2RenderingContext;
    _currentProgram: ProgramWebGL;
    _texContext: TextureContextWebGL;
    _vaoContext: VaoContextWebGL;
    _fenceContext: FenceContextWebGL;
    private _currentArrayBuffer;
    private _stencilCompareMode;
    private _stencilCompareModeBack;
    private _stencilCompareModeFront;
    private _stencilReferenceValue;
    private _stencilReadMask;
    private _separateStencil;
    private _lastBoundedIndexBuffer;
    private _angleInstanced;
    stateChangeCallback: (name: string) => void;
    hasInstancing(): boolean;
    get hasFence(): boolean;
    private _hasVao;
    get hasVao(): boolean;
    private _glVersion;
    get glVersion(): number;
    private _pixelRatio;
    get pixelRatio(): number;
    set pixelRatio(v: number);
    get container(): HTMLCanvasElement;
    set container(value: HTMLCanvasElement);
    get standardDerivatives(): boolean;
    constructor(canvas: HTMLCanvasElement, alpha?: boolean);
    assertLost(when: string): void;
    private initWebGL;
    gl(): WebGLRenderingContext;
    clear(red?: number, green?: number, blue?: number, alpha?: number, depth?: number, stencil?: number, mask?: ContextGLClearMask): void;
    configureBackBuffer(width: number, height: number, antiAlias: number, enableDepthAndStencil?: boolean): void;
    createCubeTexture(size: number, _format: ContextGLTextureFormat, _optimizeForRenderToTexture: boolean, _streamingLevels?: number): CubeTextureWebGL;
    createIndexBuffer(numIndices: number): IndexBufferWebGL;
    createProgram(): ProgramWebGL;
    createTexture(width: number, height: number, _format: ContextGLTextureFormat, _optimizeForRenderToTexture: boolean, _streamingLevels?: number): TextureWebGL;
    createVertexBuffer(numVertices: number, dataPerVertex: number): VertexBufferWebGL;
    createVao(): VaoWebGL;
    dispose(): void;
    drawToBitmapImage2D(destination: BitmapImage2D, invalidate?: boolean, async?: boolean): undefined | Promise<boolean>;
    private _instancedEnabled;
    private _instancesCount;
    /**
     * Begin instanced rendering, can't be disabled until drawArrays or drawElements will called
     * @param count Count of instances that will be rendered
     */
    beginInstancedRender(count?: number): void;
    drawIndices(mode: ContextGLDrawMode, indexBuffer: IndexBufferWebGL, firstIndex?: number, numIndices?: number): void;
    bindIndexBuffer(indexBuffer: IndexBufferWebGL): void;
    drawVertices(mode: ContextGLDrawMode, firstVertex?: number, numVertices?: number): void;
    present(): void;
    setBlendState(enable: boolean): void;
    setBlendEquation(equationRGB: ContextGLBlendEquation, equationA?: ContextGLBlendEquation): void;
    setBlendFactors(sourceFactor: ContextGLBlendFactor, destinationFactor: ContextGLBlendFactor, sourceAlphaFactor?: ContextGLBlendFactor, destinationAlphaFactor?: ContextGLBlendFactor): void;
    setColorMask(red: boolean, green: boolean, blue: boolean, alpha: boolean): void;
    setCulling(triangleFaceToCull: ContextGLTriangleFace, coordinateSystem?: CoordinateSystem): void;
    setDepthTest(depthMask: boolean, passCompareMode: ContextGLCompareMode): void;
    setViewport(x: number, y: number, width: number, height: number): void;
    enableDepth(): void;
    disableDepth(): void;
    enableStencil(): void;
    disableStencil(): void;
    setStencilActions(triangleFace?: ContextGLTriangleFace, compareMode?: ContextGLCompareMode, actionOnBothPass?: ContextGLStencilAction, actionOnDepthFail?: ContextGLStencilAction, actionOnDepthPassStencilFail?: ContextGLStencilAction, coordinateSystem?: CoordinateSystem): void;
    setStencilReferenceValue(referenceValue: number, readMask?: number, writeMask?: number): void;
    setProgram(program: ProgramWebGL): void;
    setProgramConstantsFromArray(programType: number, data: Float32Array): void;
    setScissorRectangle(rect: Rectangle): void;
    setTextureAt(sampler: number, texture: TextureBaseWebGL): void;
    setSamplerStateAt(sampler: number, wrap: ContextGLWrapMode, filter: ContextGLTextureFilter, mipfilter: ContextGLMipFilter): void;
    setVertexBufferAt(index: number, buffer: VertexBufferWebGL, bufferOffset?: number, format?: number): void;
    setRenderToTexture(target: TextureBaseWebGL, enableDepthAndStencil?: boolean, antiAlias?: number, _surfaceSelector?: number, _mipmapSelector?: number): void;
    setRenderToBackBuffer(): void;
    copyToTexture(target: TextureBaseWebGL, rect: Rectangle, destPoint: Point): void;
    private updateBlendStatus;
    finish(): void;
    private translateTriangleFace;
}
//# sourceMappingURL=ContextWebGL.d.ts.map