import React, { useState, useRef, useEffect } from 'react'; import { MatrixEngineWGPU, downloadMeshes } from 'matrix-engine-wgpu'; import { PropsWithChildren } from 'react'; import { MatrixEngineCanvasProps } from "./my-types"; import { injectEngineExternally, MatrixEngineWGPUContext, MatrixEngineProvider } from './MatrixEngineProvider'; export type MatrixEngineCanvasPropsWithChildren=PropsWithChildren; export const MatrixEngineCanvas: React.FC=({ onReady, children, canvasId="canvas1", canvasSize, clearColor, mainCameraParams={ type: 'WASD', responseCoef: 1000 } }) => { const containerRef=useRef(null); const [engine, setEngine]=useState(null); useEffect(() => { if(!engine&&containerRef.current) { const app=new MatrixEngineWGPU({ appendTo: containerRef.current, useSingleRenderPass: true, canvasSize: canvasSize, mainCameraParams: mainCameraParams, clearColor: clearColor, canvasId: canvasId }, () => { setEngine(app); injectEngineExternally(app); app.addLight(); setTimeout(() => { onReady?.(app); }, 1000); }); } }, []); return (
{engine&&( {children} )}
); };