index.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import type { ComputedRef } from 'vue'
  2. import type { TresContext } from '../useTresContextProvider'
  3. import { useTresContext } from '../useTresContextProvider'
  4. import type { Camera } from 'three'
  5. import type { TresRenderer } from '..'
  6. export interface TresPartialContext extends Omit<TresContext, 'renderer' | 'camera'> {
  7. /**
  8. * The renderer instance
  9. *
  10. * @type {TresRenderer}
  11. * @memberof TresPartialContext
  12. */
  13. renderer: TresRenderer
  14. /**
  15. * The current active camera
  16. *
  17. * @type {ComputedRef<Camera | undefined>}
  18. * @memberof TresPartialContext
  19. */
  20. camera: ComputedRef<Camera | undefined>
  21. /**
  22. * Marks the scene as needing an update in the next frame.
  23. * This is used in on-demand rendering mode to schedule a render.
  24. *
  25. * @type {() => void}
  26. * @memberof TresPartialContext
  27. */
  28. invalidate: () => void
  29. /**
  30. * Manually advances the render loop by one frame.
  31. * This is particularly useful in manual rendering mode where you want explicit control over when frames are rendered.
  32. *
  33. * @type {() => void}
  34. * @memberof TresPartialContext
  35. */
  36. advance: () => void
  37. }
  38. export function useTres(): TresPartialContext {
  39. const { scene, renderer, camera, sizes, controls, extend, events } = useTresContext()
  40. return {
  41. scene,
  42. renderer: renderer.instance,
  43. camera: camera.activeCamera,
  44. sizes,
  45. controls,
  46. extend,
  47. events,
  48. invalidate: renderer.invalidate,
  49. advance: renderer.advance,
  50. }
  51. }