import type { _SCNScene } from "./SCNScene.js";
import type { _SCNSceneRenderer } from "./SCNSceneRenderer.js";
export interface _SCNSceneRendererDelegate {
    /**
     * @method renderer:updateAtTime: @abstract Implement this to perform per-frame game logic. Called exactly once per frame before any animation and actions are evaluated and any physics are simulated. @param renderer The renderer that will render the scene. @param time The time at which to update the scene. @discussion All modifications done within this method don't go through the transaction model, they are directly applied on the presentation tree.
     */
    renderer$updateAtTime$?(renderer: _SCNSceneRenderer, time: number): void;
    /**
     * @method renderer:didApplyAnimationsAtTime: @abstract Invoked on the delegate once the scene renderer did apply the animations. @param renderer The renderer that did render the scene. @param time The time at which the animations were applied. @discussion All modifications done within this method don't go through the transaction model, they are directly applied on the presentation tree.
     */
    renderer$didApplyAnimationsAtTime$?(renderer: _SCNSceneRenderer, time: number): void;
    /**
     * @method renderer:didSimulatePhysicsAtTime: @abstract Invoked on the delegate once the scene renderer did simulate the physics. @param renderer The renderer that did render the scene. @param time The time at which the physics were simulated. @discussion All modifications done within this method don't go through the transaction model, they are directly applied on the presentation tree.
     */
    renderer$didSimulatePhysicsAtTime$?(renderer: _SCNSceneRenderer, time: number): void;
    /**
     * @method renderer:didApplyConstraintsAtTime: @abstract Invoked on the delegate once the scene renderer did apply the constraints. @param renderer The renderer that did render the scene. @param time The time at which the constraints were simulated. @discussion All modifications done within this method don't go through the transaction model, they are directly applied on the presentation tree.
     */
    renderer$didApplyConstraintsAtTime$?(renderer: _SCNSceneRenderer, time: number): void;
    /**
     * @method renderer:willRenderScene:atTime: @abstract Invoked on the delegate before the scene renderer renders the scene. At this point the openGL context and the destination framebuffer are bound. @param renderer The renderer that will render the scene. @param scene The scene to be rendered. @param time The time at which the scene is to be rendered. @discussion Starting in 10.10 all modifications done within this method don't go through the transaction model, they are directly applied on the presentation tree.
     */
    renderer$willRenderScene$atTime$?(renderer: _SCNSceneRenderer, scene: _SCNScene, time: number): void;
    /**
     * @method renderer:didRenderScene:atTime: @abstract Invoked on the delegate once the scene renderer did render the scene. @param renderer The renderer that did render the scene. @param scene The rendered scene. @param time The time at which the scene was rendered. @discussion Starting in 10.10 all modifications done within this method don't go through the transaction model, they are directly applied on the presentation tree.
     */
    renderer$didRenderScene$atTime$?(renderer: _SCNSceneRenderer, scene: _SCNScene, time: number): void;
}
