@tresjs/core 5.0.0-next.3 → 5.0.0-next.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- import { TresCamera } from '../types/';
1
+ import { TresCamera, TresContextWithClock } from '../types/';
2
2
  import { PointerEvent } from '@pmndrs/pointer-events';
3
- import { RendererOptions, TresContext, TresRenderer } from '../composables';
3
+ import { RendererOptions, TresContext } from '../composables';
4
4
  import * as THREE from 'three';
5
5
  export interface TresCanvasProps extends RendererOptions {
6
6
  /**
@@ -25,7 +25,6 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<Tr
25
25
  context: import('vue').ShallowRef<TresContext | null, TresContext | null>;
26
26
  dispose: () => void;
27
27
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
28
- render: (renderer: TresRenderer) => any;
29
28
  click: (event: PointerEvent<MouseEvent>) => any;
30
29
  contextmenu: (event: PointerEvent<MouseEvent>) => any;
31
30
  pointermove: (event: PointerEvent<MouseEvent>) => any;
@@ -39,10 +38,12 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<Tr
39
38
  pointercancel: (event: PointerEvent<MouseEvent>) => any;
40
39
  lostpointercapture: (event: PointerEvent<MouseEvent>) => any;
41
40
  wheel: (event: PointerEvent<MouseEvent>) => any;
41
+ render: (context: TresContext) => any;
42
+ loop: (context: TresContextWithClock) => any;
42
43
  ready: (context: TresContext) => any;
43
44
  pointermissed: (event: PointerEvent<MouseEvent>) => any;
45
+ beforeLoop: (context: TresContextWithClock) => any;
44
46
  }, string, import('vue').PublicProps, Readonly<TresCanvasProps> & Readonly<{
45
- onRender?: ((renderer: TresRenderer) => any) | undefined;
46
47
  onClick?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
47
48
  onContextmenu?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
48
49
  onPointermove?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
@@ -56,25 +57,28 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<Tr
56
57
  onPointercancel?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
57
58
  onLostpointercapture?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
58
59
  onWheel?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
60
+ onRender?: ((context: TresContext) => any) | undefined;
61
+ onLoop?: ((context: TresContextWithClock) => any) | undefined;
59
62
  onReady?: ((context: TresContext) => any) | undefined;
60
63
  onPointermissed?: ((event: PointerEvent<MouseEvent>) => any) | undefined;
64
+ onBeforeLoop?: ((context: TresContextWithClock) => any) | undefined;
61
65
  }>, {
62
- toneMapping: THREE.ToneMapping;
63
- alpha: boolean;
64
- logarithmicDepthBuffer: boolean;
65
- depth: boolean;
66
- stencil: boolean;
67
- windowSize: boolean;
68
- clearColor: THREE.ColorRepresentation;
69
- shadowMapType: THREE.ShadowMapType;
70
- enableProvideBridge: boolean;
71
66
  antialias: boolean;
67
+ stencil: boolean;
68
+ depth: boolean;
69
+ logarithmicDepthBuffer: boolean;
72
70
  preserveDrawingBuffer: boolean;
71
+ alpha: boolean;
73
72
  failIfMajorPerformanceCaveat: boolean;
73
+ clearColor: THREE.ColorRepresentation;
74
74
  clearAlpha: number;
75
75
  shadows: boolean;
76
+ toneMapping: THREE.ToneMapping;
77
+ shadowMapType: THREE.ShadowMapType;
76
78
  useLegacyLights: boolean;
77
79
  renderMode: "always" | "on-demand" | "manual";
80
+ windowSize: boolean;
81
+ enableProvideBridge: boolean;
78
82
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
79
83
  canvasRef: HTMLCanvasElement;
80
84
  }, HTMLCanvasElement>, Readonly<{
@@ -4,7 +4,6 @@ export * from './useGraph';
4
4
  export * from './useLoader';
5
5
  export * from './useLoop';
6
6
  export * from './useRenderer/useRendererManager';
7
- export * from './useRenderLoop';
8
7
  export * from './useTres';
9
8
  export * from './useTresContextProvider';
10
9
  export { UseLoader };
@@ -0,0 +1,18 @@
1
+ export interface RafLoopContext {
2
+ delta: number;
3
+ elapsed: number;
4
+ }
5
+ type LoopFunction = (notifySuccess: () => void) => void;
6
+ /**
7
+ * @param defaultFunction the default function that is called before after the after event hook is triggered and after the before is triggered.
8
+ * @param notifySuccess a callback that should be called to indicate a successfull cycle.
9
+ */
10
+ export declare const useCreateRafLoop: (defaultFunction: LoopFunction, notifySuccess: () => void) => {
11
+ start: () => void;
12
+ stop: () => void;
13
+ isActive: Readonly<import('vue').ShallowRef<boolean>>;
14
+ onBeforeLoop: import('@vueuse/core').EventHookOn<RafLoopContext>;
15
+ onLoop: import('@vueuse/core').EventHookOn<RafLoopContext>;
16
+ replaceLoopFunction: (fn: LoopFunction) => void;
17
+ };
18
+ export {};
@@ -2,9 +2,9 @@ import { PointerEvent, PointerEventsMap } from '@pmndrs/pointer-events';
2
2
  import { Event, Object3D, Object3DEventMap } from 'three';
3
3
  import { MaybeRef } from 'vue';
4
4
  import { TresContext } from '../useTresContextProvider';
5
- export declare function useEventManager({ canvas, contextParts: { scene, camera, loop }, }: {
5
+ export declare function useEventManager({ canvas, contextParts: { scene, camera, renderer }, }: {
6
6
  canvas: MaybeRef<HTMLCanvasElement>;
7
- contextParts: Pick<TresContext, 'scene' | 'camera' | 'loop'>;
7
+ contextParts: Pick<TresContext, 'scene' | 'camera' | 'renderer'>;
8
8
  }): {
9
9
  onPointerMissed: import('@vueuse/core').EventHookOn<PointerEvent<MouseEvent> & Event<"click", Object3D<Object3DEventMap & PointerEventsMap>>>;
10
10
  };
@@ -1,4 +1,3 @@
1
- import { Object3D } from 'three';
2
1
  import { MaybeRef } from '@vueuse/core';
3
2
  import { TresObject } from '../../types';
4
- export declare function useGraph(object: MaybeRef<Object3D | TresObject>): import('vue').ComputedRef<import('../..').TresObjectMap>;
3
+ export declare function useGraph(object: MaybeRef<TresObject>): import('vue').ComputedRef<import('../..').TresObjectMap>;
@@ -1,17 +1,14 @@
1
- import { LoopCallbackFn } from './../../core/loop';
2
- export declare function useLoop(): {
3
- pause: import('@vueuse/core').Fn;
4
- resume: import('@vueuse/core').Fn;
5
- pauseRender: import('@vueuse/core').Fn;
6
- resumeRender: import('@vueuse/core').Fn;
7
- isActive: import('vue').Ref<boolean, boolean>;
8
- onBeforeRender: (cb: LoopCallbackFn, index?: number) => {
9
- off: import('@vueuse/core').Fn;
10
- };
11
- render: (cb: LoopCallbackFn) => {
12
- off: import('@vueuse/core').Fn;
13
- };
14
- onAfterRender: (cb: LoopCallbackFn, index?: number) => {
15
- off: import('@vueuse/core').Fn;
16
- };
1
+ import { RafLoopContext } from '../useCreateRafLoop';
2
+ import { TresPartialContext } from '../useTres';
3
+ export type LoopContext = RafLoopContext & TresPartialContext;
4
+ /**
5
+ * Composable that provides control over the render loop and animation lifecycle.
6
+ */
7
+ export declare const useLoop: () => {
8
+ stop: () => void;
9
+ start: () => void;
10
+ isActive: Readonly<import('vue').ShallowRef<boolean>>;
11
+ onBeforeRender: import('../../utils/createPriorityEventHook').PriorityEventHookOn<LoopContext>;
12
+ onRender: import('../../utils/createPriorityEventHook').PriorityEventHookOn<LoopContext>;
13
+ render: (fn: (notifySuccess: () => void) => void) => void;
17
14
  };
@@ -1,7 +1,6 @@
1
- import { RendererLoop } from './../../core/loop';
2
1
  import { ColorRepresentation, ColorSpace, ShadowMapType, ToneMapping, WebGLRenderer } from 'three';
3
2
  import { TresContext } from '../useTresContextProvider';
4
- import { MaybeRef, ShallowRef } from 'vue';
3
+ import { MaybeRef, Reactive, ShallowRef } from 'vue';
5
4
  import { Renderer } from 'three/webgpu';
6
5
  import { SizesType } from '../useSizes';
7
6
  import { UseCameraReturn } from '../useCamera';
@@ -166,23 +165,29 @@ export interface TresRendererSetupContext {
166
165
  sizes: SizesType;
167
166
  scene: ShallowRef<TresScene>;
168
167
  camera: UseCameraReturn;
169
- loop: RendererLoop;
170
168
  canvas: MaybeRef<HTMLCanvasElement>;
171
169
  }
172
170
  export interface UseRendererOptions {
173
171
  scene: ShallowRef<TresScene>;
174
172
  canvas: MaybeRef<HTMLCanvasElement>;
175
- options: RendererOptions;
176
- contextParts: Pick<TresContext, 'sizes' | 'camera' | 'loop'>;
173
+ options: Reactive<RendererOptions>;
174
+ contextParts: Pick<TresContext, 'sizes' | 'camera'>;
177
175
  }
178
- export declare function useRendererManager({ scene, canvas, options, contextParts: { sizes, loop, camera }, }: UseRendererOptions): {
176
+ export declare function useRendererManager({ scene, canvas, options, contextParts: { sizes, camera }, }: UseRendererOptions): {
177
+ loop: {
178
+ start: () => void;
179
+ stop: () => void;
180
+ isActive: Readonly<ShallowRef<boolean>>;
181
+ onBeforeLoop: import('@vueuse/core').EventHookOn<import('../useCreateRafLoop').RafLoopContext>;
182
+ onLoop: import('@vueuse/core').EventHookOn<import('../useCreateRafLoop').RafLoopContext>;
183
+ replaceLoopFunction: (fn: (notifySuccess: () => void) => void) => void;
184
+ };
179
185
  instance: TresRenderer;
180
186
  advance: () => void;
181
- onRender: import('@vueuse/core').EventHookOn<TresRenderer>;
182
187
  onReady: import('@vueuse/core').EventHookOn<TresRenderer>;
188
+ onRender: import('@vueuse/core').EventHookOn<TresRenderer>;
183
189
  invalidate: (amountOfFramesToInvalidate?: number) => void;
184
190
  canBeInvalidated: import('vue').ComputedRef<boolean>;
185
- frames: import('vue').Ref<number, number>;
186
191
  mode: "always" | "on-demand" | "manual" | undefined;
187
192
  };
188
193
  export type UseRendererManagerReturn = ReturnType<typeof useRendererManager>;
@@ -1,5 +1,4 @@
1
1
  import { MaybeRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue';
2
- import { RendererLoop } from '../../core/loop';
3
2
  import { TresControl, TresScene } from '../../types';
4
3
  import { RendererOptions, UseRendererManagerReturn } from '../useRenderer/useRendererManager';
5
4
  import { UseCameraReturn } from '../useCamera/';
@@ -12,7 +11,6 @@ export interface TresContext {
12
11
  camera: UseCameraReturn;
13
12
  controls: Ref<TresControl | null>;
14
13
  renderer: UseRendererManagerReturn;
15
- loop: RendererLoop;
16
14
  events: ReturnType<typeof useEventManager>;
17
15
  }
18
16
  export declare function useTresContextProvider({ scene, canvas, windowSize, rendererOptions, }: {
@@ -5,7 +5,6 @@ import { default as templateCompilerOptions } from './utils/template-compiler-op
5
5
  export * from './components';
6
6
  export * from './composables';
7
7
  export * from './core/catalogue';
8
- export * from './core/loop';
9
8
  export * from './directives';
10
9
  export * from './types';
11
10
  export * from './utils/graph';
@@ -57,6 +57,12 @@ export interface TresObject3D extends THREE.Object3D<THREE.Object3DEventMap> {
57
57
  export type TresObject = TresBaseObject & (TresObject3D | THREE.BufferGeometry | THREE.Material | THREE.Fog) & {
58
58
  __tres?: LocalState;
59
59
  };
60
+ /**
61
+ * Union type covering all common Three.js material types
62
+ * This provides better TypeScript intellisense and type checking
63
+ * when accessing specific material properties
64
+ */
65
+ export type TresMaterial = THREE.MeshBasicMaterial | THREE.MeshStandardMaterial | THREE.MeshPhysicalMaterial | THREE.MeshLambertMaterial | THREE.MeshPhongMaterial | THREE.MeshToonMaterial | THREE.MeshNormalMaterial | THREE.MeshMatcapMaterial | THREE.MeshDepthMaterial | THREE.MeshDistanceMaterial | THREE.LineBasicMaterial | THREE.LineDashedMaterial | THREE.PointsMaterial | THREE.SpriteMaterial | THREE.ShaderMaterial | THREE.RawShaderMaterial | THREE.ShadowMaterial | THREE.Material;
60
66
  export type TresInstance = TresObject & {
61
67
  __tres: LocalState;
62
68
  };
@@ -93,6 +99,10 @@ export type TresEuler = THREE.Euler;
93
99
  export type TresControl = THREE.EventDispatcher & {
94
100
  enabled: boolean;
95
101
  };
102
+ export type TresContextWithClock = TresContext & {
103
+ delta: number;
104
+ elapsed: number;
105
+ };
96
106
  export type WithMathProps<P> = {
97
107
  [K in keyof P]: P[K] extends MathRepresentation | THREE.Euler ? MathType<P[K]> : P[K];
98
108
  };
@@ -1,12 +1,10 @@
1
- import { EventHookOff, IsAny } from '@vueuse/core';
2
- export type Callback<T> = IsAny<T> extends true ? (param: any) => void : ([
3
- T
4
- ] extends [void] ? () => void : (param: T) => void);
1
+ import { EventHookOff, EventHookTrigger } from '@vueuse/core';
2
+ export type Callback<T> = Parameters<EventHookOff<T>>[0];
5
3
  export type PriorityEventHookOn<T> = (fn: Callback<T>, priority?: number) => {
6
4
  off: () => void;
7
5
  };
8
6
  export type PriorityEventHookOff<T> = EventHookOff<T>;
9
- export type PriorityEventHookTrigger<T = any> = (param?: T) => void;
7
+ export type PriorityEventHookTrigger<T> = EventHookTrigger<T>;
10
8
  export interface PriorityEventHook<T = any> {
11
9
  on: PriorityEventHookOn<T>;
12
10
  off: (fn: Callback<T>) => void;
@@ -1,14 +1,15 @@
1
- import { Material, Mesh, Object3D, Scene } from 'three';
1
+ import { Mesh, Scene } from 'three';
2
+ import { TresMaterial, TresObject } from '../types';
2
3
  export interface TresObjectMap {
3
4
  nodes: {
4
- [name: string]: Object3D;
5
+ [name: string]: TresObject;
5
6
  };
6
7
  materials: {
7
- [name: string]: Material;
8
+ [name: string]: TresMaterial;
8
9
  };
9
10
  meshes: {
10
11
  [name: string]: Mesh;
11
12
  };
12
13
  scene?: Scene;
13
14
  }
14
- export declare function buildGraph(object: Object3D): TresObjectMap;
15
+ export declare function buildGraph(object: TresObject): TresObjectMap;