import { useMemo } from 'react'
import type { FrameRenderer } from '../specs/FrameRenderer.nitro'
import type { Frame } from '../specs/instances/Frame.nitro'
import { VisionCamera } from '../VisionCamera'
import type { NativeFrameRendererView } from '../views/NativeFrameRendererView'
/**
* Use a {@linkcode FrameRenderer}.
*
* A {@linkcode FrameRenderer} allows rendering
* {@linkcode Frame}s to a
* {@linkcode NativeFrameRendererView | }.
*
* @example
* ```tsx
* const frameRenderer = useFrameRenderer()
* const frameOutput = useFrameOutput({
* onFrame(frame) {
* 'worklet'
* frameRenderer.renderFrame(frame)
* frame.dispose()
* }
* })
*
* return (
*
* )
* ```
*/
export function useFrameRenderer(): FrameRenderer {
return useMemo(() => VisionCamera.createFrameRenderer(), [])
}