import type { _MTL4AccelerationStructureGeometryDescriptor } from "./MTL4AccelerationStructureGeometryDescriptor.js";
import type { MTL4BufferRange } from "../structs/MTL4BufferRange.js";
import type { MTLAttributeFormat } from "./MTLAttributeFormat.js";
import type { MTLCurveBasis } from "./MTLCurveBasis.js";
import type { MTLCurveEndCaps } from "./MTLCurveEndCaps.js";
import type { MTLCurveType } from "./MTLCurveType.js";
import type { MTLIndexType } from "./MTLIndexType.js";
export declare class _MTL4AccelerationStructureCurveGeometryDescriptor extends _MTL4AccelerationStructureGeometryDescriptor {
    static alloc(): _MTL4AccelerationStructureCurveGeometryDescriptor;
    static new(): _MTL4AccelerationStructureCurveGeometryDescriptor;
    init(): _MTL4AccelerationStructureCurveGeometryDescriptor;
    /**
     * References a buffer containing curve control points. Control points are interpolated according to the basis function you specify in ``curveBasis``. You are responsible for ensuring each control is in a format matching the control point format ``controlPointFormat`` specifies, as well as ensuring that the buffer address of the range is not zero.
     */
    controlPointBuffer(): MTL4BufferRange;
    setControlPointBuffer$(value: MTL4BufferRange): void;
    /** Declares the number of control points in the control point buffer. */
    controlPointCount(): number;
    setControlPointCount$(value: number): void;
    /**
     * Sets the stride, in bytes, between control points in the control point buffer the control point buffer references. You are responsible for ensuring this stride is a multiple of the control point format's element size, and at a minimum exactly the control point format's size. This property defaults to `0`, indicating that the control points are tightly-packed.
     */
    controlPointStride(): number;
    setControlPointStride$(value: number): void;
    /**
     * Declares the format of the control points the control point buffer references. Defaults to `MTLAttributeFormatFloat3`, representing 3 floating point values tightly packed.
     */
    controlPointFormat(): MTLAttributeFormat;
    setControlPointFormat$(value: MTLAttributeFormat): void;
    /**
     * Assigns a reference to a buffer containing the curve radius for each control point. Metal interpolates curve radii according to the basis function you specify via ``curveBasis``. You are responsible for ensuring the type of each radius matches the type property ``radiusFormat`` specifies, that each radius is at least zero, and that the buffer address of the range is not zero.
     */
    radiusBuffer(): MTL4BufferRange;
    setRadiusBuffer$(value: MTL4BufferRange): void;
    /**
     * Declares the format of the radii in the radius buffer. Defaults to `MTLAttributeFormatFloat`.
     */
    radiusFormat(): MTLAttributeFormat;
    setRadiusFormat$(value: MTLAttributeFormat): void;
    /**
     * Configures the stride, in bytes, between radii in the radius buffer. You are responsible for ensuring this property is set to a multiple of the size corresponding to the ``radiusFormat``. This property defaults to `0` bytes, indicating that the radii are tightly packed.
     */
    radiusStride(): number;
    setRadiusStride$(value: number): void;
    /**
     * Assigns an optional index buffer containing references to control points in the control point buffer. Each index represents the first control point of a curve segment. You are responsible for ensuring the buffer address of the range is not zero.
     */
    indexBuffer(): MTL4BufferRange;
    setIndexBuffer$(value: MTL4BufferRange): void;
    /**
     * Specifies the size of the indices the `indexBuffer` contains, which is typically either 16 or 32-bits for each index.
     */
    indexType(): MTLIndexType;
    setIndexType$(value: MTLIndexType): void;
    /** Declares the number of curve segments. */
    segmentCount(): number;
    setSegmentCount$(value: number): void;
    /**
     * Declares the number of control points per curve segment. Valid values for this property are `2`, `3`, or `4`.
     */
    segmentControlPointCount(): number;
    setSegmentControlPointCount$(value: number): void;
    /** Controls the curve type. Defaults to `MTLCurveTypeRound`. */
    curveType(): MTLCurveType;
    setCurveType$(value: MTLCurveType): void;
    /**
     * Controls the curve basis function, determining how Metal interpolates the control points. Defaults to `MTLCurveBasisBSpline`.
     */
    curveBasis(): MTLCurveBasis;
    setCurveBasis$(value: MTLCurveBasis): void;
    /** Sets the type of curve end caps. Defaults to `MTLCurveEndCapsNone`. */
    curveEndCaps(): MTLCurveEndCaps;
    setCurveEndCaps$(value: MTLCurveEndCaps): void;
}
