import type { _NSCopying } from "../Foundation/NSCopying.js";
import type { _NSDictionary } from "../Foundation/NSDictionary.js";
import type { _NSObject } from "../Foundation/NSObject.js";
import type { _NSSecureCoding } from "../Foundation/NSSecureCoding.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { _SCNBufferStream } from "./SCNBufferStream.js";
import type { _SCNNode } from "./SCNNode.js";
import type { _SCNProgramDelegate } from "./SCNProgramDelegate.js";
import type { _SCNRenderer } from "./SCNRenderer.js";
import type { _SCNShadable } from "./SCNShadable.js";
import type { _MTLLibrary } from "../Metal/MTLLibrary.js";
import type { SCNBufferFrequency } from "./SCNBufferFrequency.js";
export declare class _SCNProgram extends _NSObject {
    static alloc(): _SCNProgram;
    static new(): _SCNProgram;
    init(): _SCNProgram;
    /** @method program @abstract Creates and initialize a program instance. */
    static program(): _SCNProgram;
    /**
     * @method handleBindingOfBufferNamed:frequency:usingBlock: @abstract Sets the block to call at render time to bind the buffer of the specified symbol of the receiver's program. @param name The name of the buffer to bind. @param frequency The frequency at which the block has to be invoked. Can be per frame, per node or per geometry or material. See SCNBufferBindingBlock above. @param block The block that binds the buffer. @discussion This method can only be used with Metal based programs.
     */
    handleBindingOfBufferNamed$frequency$usingBlock$(name: _NSString, frequency: SCNBufferFrequency, block: (arg0: _SCNBufferStream, arg1: _SCNNode, arg2: _SCNShadable, arg3: _SCNRenderer) => void): void;
    /**
     * @method setSemantic:forSymbol:options: @abstract Associates a SceneKit semantic to a symbol. @param semantic The SceneKit semantic to associate to the specified symbol. @param symbol A symbol from the program source code. @param options An optional dictionary. See the 'Semantic options' above. @discussion Associates semantics handled by the SceneKit runtime to a symbol from the program. Supported semantics are listed in SCNGeometry.h and SCNNode.h.
     */
    setSemantic$forSymbol$options$(semantic: _NSString | null, symbol_: _NSString, options: _NSDictionary | null): void;
    /**
     * @method semanticForSymbol: @abstract Retrieves the SceneKit semantic associated to a symbol from the program source code. @param symbol A symbol from the program source code.
     */
    semanticForSymbol$(symbol_: _NSString): _NSString | null;
    /** @property vertexShader @abstract Determines the receiver's vertex shader. */
    vertexShader(): _NSString | null;
    setVertexShader$(value: _NSString | null): void;
    /** @property fragmentShader @abstract Determines the receiver's fragment shader. */
    fragmentShader(): _NSString | null;
    setFragmentShader$(value: _NSString | null): void;
    /**
     * @property tessellationControlShader @abstract Determines the receiver's tessellation control shader. Tessellation shaders require OpenGL Core Profile.
     */
    tessellationControlShader(): _NSString;
    setTessellationControlShader$(value: _NSString): void;
    /**
     * @property tessellationEvaluationShader @abstract Determines the receiver's tessellation evaluation shader. Tessellation shaders require OpenGL Core Profile.
     */
    tessellationEvaluationShader(): _NSString;
    setTessellationEvaluationShader$(value: _NSString): void;
    /**
     * @property geometryShader @abstract Determines the receiver's geometry shader. Geometry shaders require OpenGL Core Profile.
     */
    geometryShader(): _NSString;
    setGeometryShader$(value: _NSString): void;
    /**
     * @property vertexFunctionName @abstract Determines the receiver's vertex function name. @discussion The name of the vertex function (for Metal programs).
     */
    vertexFunctionName(): _NSString | null;
    setVertexFunctionName$(value: _NSString | null): void;
    /**
     * @property fragmentFunctionName @abstract Determines the receiver's fragment function name. @discussion The name of the fragment function (for Metal programs).
     */
    fragmentFunctionName(): _NSString | null;
    setFragmentFunctionName$(value: _NSString | null): void;
    /**
     * @property opaque @abstract Determines the receiver's fragment are opaque or not. Defaults to YES.
     */
    opaque(): boolean;
    setOpaque$(value: boolean): void;
    /** @property delegate @abstract Determines the receiver's delegate */
    delegate(): _SCNProgramDelegate | null;
    setDelegate$(value: _SCNProgramDelegate | null): void;
    /**
     * @property library @abstract Specifies the Metal library to use to locate the function names specified above. @discussion If set to nil the default library is used. Defaults to nil.
     */
    library(): _MTLLibrary | null;
    setLibrary$(value: _MTLLibrary | null): void;
}
export interface _SCNProgram extends _NSCopying, _NSSecureCoding {
}
