import { PickingCollision, _Pick_PickableBase, IEntity, IPickable } from '@awayjs/view';
import { IMaterial, StyleEvent, IRenderable } from '@awayjs/renderer';
import { Rectangle, Matrix3D, Box, Vector3D, Sphere } from '@awayjs/core';
import { Image2D } from '@awayjs/stage';
import { DisplayObjectContainer } from './DisplayObjectContainer';
/**
 * The Billboard class represents display objects that represent bitmap images.
 * These can be images that you load with the <code>flash.Assets</code> or
 * <code>flash.display.Loader</code> classes, or they can be images that you
 * create with the <code>Billboard()</code> constructor.
 *
 * <p>The <code>Billboard()</code> constructor allows you to create a Billboard
 * object that contains a reference to a Image2D object. After you create a
 * Billboard object, use the <code>addChild()</code> or <code>addChildAt()</code>
 * method of the parent DisplayObjectContainer instance to place the bitmap on
 * the display list.</p>
 *
 * <p>A Billboard object can share its Image2D reference among several Billboard
 * objects, independent of translation or rotation properties. Because you can
 * create multiple Billboard objects that reference the same Image2D object,
 * multiple display objects can use the same complex Image2D object without
 * incurring the memory overhead of a Image2D object for each display
 * object instance.</p>
 *
 * <p>A Image2D object can be drawn to the screen by a Billboard object in one
 * of two ways: by using the default hardware renderer with a single hardware surface,
 * or by using the slower software renderer when 3D acceleration is not available.</p>
 *
 * <p>If you would prefer to perform a batch rendering command, rather than using a
 * single surface for each Billboard object, you can also draw to the screen using the
 * <code>drawTiles()</code> or <code>drawTriangles()</code> methods which are
 * available to <code>flash.display.Tilesheet</code> and <code>flash.display.Graphics
 * objects.</code></p>
 *
 * <p><b>Note:</b> The Billboard class is not a subclass of the InteractiveObject
 * class, so it cannot dispatch mouse events. However, you can use the
 * <code>addEventListener()</code> method of the display object container that
 * contains the Billboard object.</p>
 */
/**
* @todo billboard needed to extend on DisplayObjectContainer in order
* for as3web/away3d adapters to compile without errors
* (in away3d Sprite3D extends on ObjectContainer3D)
*/
export declare class Billboard extends DisplayObjectContainer implements IPickable, IRenderable {
    private static _billboards;
    static assetType: string;
    _pickObjects: Record<number, _Pick_PickableBase>;
    private _width;
    private _height;
    private _billboardWidth;
    private _billboardHeight;
    private _billboardRect;
    private _onInvalidateTextureDelegate;
    static getNewBillboard(material: IMaterial, pixelSnapping?: string, smoothing?: boolean): Billboard;
    preserveDimensions: boolean;
    /**
     *
     */
    get assetType(): string;
    /**
     *
     */
    get billboardRect(): Rectangle;
    /**
     *
     */
    get billboardHeight(): number;
    /**
     *
     */
    get billboardWidth(): number;
    /**
     *
     */
    get material(): IMaterial;
    set material(value: IMaterial);
    /**
     *
     */
    get width(): number;
    set width(val: number);
    /**
     *
     */
    get height(): number;
    set height(val: number);
    constructor(material: IMaterial, _pixelSnapping?: string, smoothing?: boolean);
    invalidateElements(): void;
    advanceFrame(): void;
    getEntity(): IEntity;
    /**
     * @inheritDoc
     */
    dispose(): void;
    clone(): Billboard;
    _acceptTraverser(traverser: IEntityTraverser): void;
    get image(): Image2D;
    private _updateDimensions;
    protected _onInvalidateProperties(event?: StyleEvent): void;
    /**
     * @private
     */
    private _onInvalidateTexture;
}
import { _Stage_ElementsBase, _Render_MaterialBase, _Render_RenderableBase, Style } from '@awayjs/renderer';
import { IEntityTraverser } from '@awayjs/view';
/**
 * @class away.pool.RenderableListItem
 */
export declare class _Render_Billboard extends _Render_RenderableBase {
    private static _samplerElements;
    _id: string;
    /**
     * //TODO
     *
     * @returns {away.base.TriangleElements}
     */
    protected _getStageElements(): _Stage_ElementsBase;
    draw(): void;
    protected _getRenderMaterial(): _Render_MaterialBase;
    protected _getStyle(): Style;
}
/**
 * @class away.pool._Render_Shape
 */
export declare class _Pick_Billboard extends _Pick_PickableBase {
    hitTestPoint(x: number, y: number, z: number): boolean;
    getBoxBounds(matrix3D?: Matrix3D, strokeFlag?: boolean, cache?: Box, target?: Box): Box;
    getSphereBounds(center: Vector3D, matrix3D?: Matrix3D, strokeFlag?: boolean, cache?: Sphere, target?: Sphere): Sphere;
    testCollision(collision: PickingCollision, closestFlag: boolean): boolean;
}
//# sourceMappingURL=Billboard.d.ts.map