2025-09-27 16:07:45 -05:00
|
|
|
import { Canvas, type CanvasProps } from "@react-three/fiber";
|
|
|
|
|
import { forwardRef, useImperativeHandle, useRef } from "react";
|
|
|
|
|
import { useOnScreen } from "../hooks/useOnScreen";
|
2025-08-11 11:25:25 -05:00
|
|
|
|
|
|
|
|
export const SmartCanvas = forwardRef<HTMLCanvasElement, CanvasProps>(
|
|
|
|
|
(props, ref) => {
|
2025-09-27 16:07:45 -05:00
|
|
|
const canvas = useRef<HTMLCanvasElement>(null!);
|
2025-08-11 11:25:25 -05:00
|
|
|
const onScreen = useOnScreen(canvas);
|
|
|
|
|
|
|
|
|
|
useImperativeHandle(ref, () => canvas.current!, []);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Canvas
|
2025-09-27 16:07:45 -05:00
|
|
|
frameloop={onScreen ? "demand" : "never"}
|
2025-08-11 11:25:25 -05:00
|
|
|
ref={canvas}
|
|
|
|
|
{...props}
|
|
|
|
|
/>
|
|
|
|
|
);
|
2025-09-27 16:07:45 -05:00
|
|
|
}
|
2025-08-11 11:25:25 -05:00
|
|
|
);
|