/**
 * Represents a primitive 3d object, a combination of a material and geometry
 * This is roughly equivalent to single draw call, note that his is not a hierarchical data structure, if you want that - you will need to combine multiple entities, each with a `ShadedGeometry` component
 */
export class ShadedGeometry {
    /**
     *
     * @param {THREE.BufferGeometry} geometry
     * @param {THREE.Material} material
     * @param {DrawMode} [draw_mode]
     * @return {ShadedGeometry}
     */
    static from(geometry: THREE.BufferGeometry, material: THREE.Material, draw_mode?: DrawMode): ShadedGeometry;
    /**
     *
     * @type {THREE.BufferGeometry|null}
     */
    geometry: THREE.BufferGeometry | null;
    /**
     *
     * @type {THREE.Material|null}
     */
    material: THREE.Material | null;
    /**
     * Optional extra material used for shadowmaps
     * @type {THREE.Material|null}
     */
    depth_material: THREE.Material | null;
    __bvh_leaf: BvhClient;
    /**
     * Transient, assigned in the system
     * @type {number}
     * @private
     */
    private __entity;
    /**
     * Transient, cached for convenience. Associated transform component from the same entity
     * @type {Transform|null}
     * @private
     */
    private __c_transform;
    /**
     *
     * @type {DrawMode|number}
     */
    mode: DrawMode | number;
    /**
     * Transient property signifying how to render object, such as using INSTANCED draw
     * @type {number}
     */
    draw_method: number;
    /**
     *
     * @type {number}
     */
    flags: number;
    /**
     * @deprecated
     * @private
     */
    private get __cached_object();
    /**
     *
     * @param {number|ShadedGeometryFlags} flag
     * @returns {void}
     */
    setFlag(flag: number | ShadedGeometryFlags): void;
    /**
     *
     * @param {number|ShadedGeometryFlags} flag
     * @returns {void}
     */
    clearFlag(flag: number | ShadedGeometryFlags): void;
    /**
     *
     * @param {number|ShadedGeometryFlags} flag
     * @param {boolean} value
     */
    writeFlag(flag: number | ShadedGeometryFlags, value: boolean): void;
    /**
     *
     * @param {number|ShadedGeometryFlags} flag
     * @returns {boolean}
     */
    getFlag(flag: number | ShadedGeometryFlags): boolean;
    /**
     *
     * @return {number}
     */
    hash(): number;
    /**
     *
     * @param {ShadedGeometry} other
     * @returns {boolean}
     */
    equals(other: ShadedGeometry): boolean;
    /**
     *
     * @param {ShadedGeometry} other
     */
    copy(other: ShadedGeometry): void;
    /**
     *
     * @returns {ShadedGeometry}
     */
    clone(): ShadedGeometry;
    /**
     * Current cached entity that this component is attached to
     * @return {number}
     */
    get entity(): number;
    /**
     * Global transform matrix
     * 4x4 matrix
     * @return {null|number[]}
     */
    get transform(): null | number[];
    /**
     * @deprecated
     */
    get bvh(): void;
    /**
     *
     * @param {AABB3} destination
     */
    getBoundingBox(destination: AABB3): void;
    /**
     *
     * @param {THREE.BufferGeometry} geometry
     * @param {THREE.Material} material
     * @param {DrawMode} [draw_mode]
     */
    from(geometry: THREE.BufferGeometry, material: THREE.Material, draw_mode?: DrawMode): void;
    updateTransform(): void;
    update_bounds(): void;
    /**
     *
     * @param {SurfacePoint3} contact if found, contact is written here
     * @param {ArrayLike<number>|number[]|Float32Array} ray 6-tuple: [origin_x, origin_y, origin_z, direction_x, direction_y, direction_z]
     * @param {ArrayLike<number>|number[]|Float32Array} transform_matrix4 transform applied to the geometry
     * @returns {boolean}
     */
    query_raycast_nearest(contact: SurfacePoint3, ray: ArrayLike<number> | number[] | Float32Array, transform_matrix4: ArrayLike<number> | number[] | Float32Array): boolean;
}
export namespace ShadedGeometry {
    let typeName: string;
    let serializable: boolean;
}
import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
import { DrawMode } from "./DrawMode.js";
import { ShadedGeometryFlags } from "./ShadedGeometryFlags.js";
import { AABB3 } from "../../../../core/geom/3d/aabb/AABB3.js";
//# sourceMappingURL=ShadedGeometry.d.ts.map