@threlte/core
Version:
A 3D framework for the web, built on top of Svelte and Three.js
57 lines (56 loc) • 1.83 kB
JavaScript
import { Scene } from 'three';
import { useCamera } from '../fragments/camera.js';
import { useDOM } from '../fragments/dom.js';
import { useRenderer } from '../fragments/renderer.svelte.js';
import { useScene } from '../fragments/scene.js';
import { useScheduler } from '../fragments/scheduler.svelte.js';
/**
* ### `useThrelte`
*
* This hook provides access to the main context of a Threlte application.
*
* ```svelte
* <script>
* import { useThrelte } from 'threlte'
* const { camera } = useThrelte()
*
* // Access the camera
* console.log(camera.current) // => PerspectiveCamera { … }
* </script>
* ```
*/
export const useThrelte = () => {
const schedulerCtx = useScheduler();
const rendererCtx = useRenderer();
const cameraCtx = useCamera();
const sceneCtx = useScene();
const domCtx = useDOM();
const context = {
advance: schedulerCtx.advance,
autoRender: schedulerCtx.autoRender,
autoRenderTask: rendererCtx.autoRenderTask,
camera: cameraCtx.camera,
colorManagementEnabled: rendererCtx.colorManagementEnabled,
colorSpace: rendererCtx.colorSpace,
dpr: rendererCtx.dpr,
invalidate: schedulerCtx.invalidate,
mainStage: schedulerCtx.mainStage,
renderer: rendererCtx.renderer,
renderMode: schedulerCtx.renderMode,
renderStage: schedulerCtx.renderStage,
scheduler: schedulerCtx.scheduler,
shadows: rendererCtx.shadows,
shouldRender: schedulerCtx.shouldRender,
dom: domCtx.dom,
canvas: domCtx.canvas,
size: domCtx.size,
toneMapping: rendererCtx.toneMapping,
get scene() {
return sceneCtx.scene;
},
set scene(scene) {
sceneCtx.scene = scene;
}
};
return context;
};