import type { NobjcObject } from "objc-js";
import type { _MTLBuffer } from "./MTLBuffer.js";
import type { _MTLFunctionHandle } from "./MTLFunctionHandle.js";
import type { _MTLResource } from "./MTLResource.js";
import type { _MTLVisibleFunctionTable } from "./MTLVisibleFunctionTable.js";
import type { MTLResourceID } from "../structs/MTLResourceID.js";
import type { NSRange } from "../structs/NSRange.js";
import type { MTLIntersectionFunctionSignature } from "./MTLIntersectionFunctionSignature.js";
export interface _MTLIntersectionFunctionTable extends _MTLResource {
    setBuffer$offset$atIndex$?(buffer: _MTLBuffer | null, offset: number, index: number): void;
    setBuffers$offsets$withRange$?(buffers: NobjcObject | null, offsets: NobjcObject, range: NSRange): void;
    setFunction$atIndex$?(function_: _MTLFunctionHandle | null, index: number): void;
    setFunctions$withRange$?(functions: NobjcObject | null, range: NSRange): void;
    /**
     * Initialize the function at the given index with a triangle intersection function with the given signature which always accepts ray/triangle intersections. If this method is not called and an intersection function is not otherwise set at the given index, ray/triangle intersections will be ignored if a call to the function at the given index would be required. Ray/triangle intersections are always accepted if an intersection function table is not provided.
     */
    setOpaqueTriangleIntersectionFunctionWithSignature$atIndex$?(signature: MTLIntersectionFunctionSignature, index: number): void;
    /**
     * Initialize the function at the given range with a triangle intersection function with the given signature which always accepts ray/triangle intersections. If this method is not called and an intersection function is not otherwise set at an index in the given range, ray/triangle intersections will be ignored if a call to the function at that index would be required. Ray/triangle intersections are always accepted if an intersection function table is not provided.
     */
    setOpaqueTriangleIntersectionFunctionWithSignature$withRange$?(signature: MTLIntersectionFunctionSignature, range: NSRange): void;
    /**
     * Initialize the function at the given index with a curve intersection function with the given signature which always accepts ray/curve intersections. If this method is not called and an intersection function is not otherwise set at the given index, ray/curve intersections will be ignored if a call to the function at the given index would be required. Ray/curve intersections are always accepted if an intersection function table is not provided.
     */
    setOpaqueCurveIntersectionFunctionWithSignature$atIndex$?(signature: MTLIntersectionFunctionSignature, index: number): void;
    /**
     * Initialize the function at the given range with a curve intersection function with the given signature which always accepts ray/curve intersections. If this method is not called and an intersection function is not otherwise set at an index in the given range, ray/curve intersections will be ignored if a call to the function at that index would be required. Ray/curve intersections are always accepted if an intersection function table is not provided.
     */
    setOpaqueCurveIntersectionFunctionWithSignature$withRange$?(signature: MTLIntersectionFunctionSignature, range: NSRange): void;
    setVisibleFunctionTable$atBufferIndex$?(functionTable: _MTLVisibleFunctionTable | null, bufferIndex: number): void;
    setVisibleFunctionTables$withBufferRange$?(functionTables: NobjcObject | null, bufferRange: NSRange): void;
    /** Handle of the GPU resource suitable for storing in an Argument Buffer */
    gpuResourceID?(): MTLResourceID;
}
