@tresjs/core 5.6.0 → 5.8.0
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.
- package/dist/template-compiler-options.d.mts +1 -1
- package/dist/template-compiler-options.mjs +1 -1
- package/dist/tres.d.ts +28 -2
- package/dist/tres.js +67 -12
- package/package.json +1 -1
package/dist/tres.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v5.
|
|
3
|
+
* version: v5.8.0
|
|
4
4
|
* (c) 2026
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
@@ -297,12 +297,14 @@ interface UseRendererOptions {
|
|
|
297
297
|
scene: ShallowRef<TresScene>;
|
|
298
298
|
canvas: MaybeRef<HTMLCanvasElement>;
|
|
299
299
|
options: Reactive<RendererOptions>;
|
|
300
|
+
fpsLimit?: MaybeRefOrGetter<number>;
|
|
300
301
|
contextParts: Pick<TresContext, 'sizes' | 'camera'>;
|
|
301
302
|
}
|
|
302
303
|
declare function useRendererManager({
|
|
303
304
|
scene,
|
|
304
305
|
canvas,
|
|
305
306
|
options,
|
|
307
|
+
fpsLimit,
|
|
306
308
|
contextParts: {
|
|
307
309
|
sizes,
|
|
308
310
|
camera
|
|
@@ -357,6 +359,7 @@ interface TresContext {
|
|
|
357
359
|
declare const useTresContextProvider: (args_0: {
|
|
358
360
|
scene: TresScene;
|
|
359
361
|
canvas: MaybeRef<HTMLCanvasElement>;
|
|
362
|
+
fpsLimit?: MaybeRefOrGetter<number>;
|
|
360
363
|
windowSize: MaybeRefOrGetter<boolean>;
|
|
361
364
|
rendererOptions: RendererOptions;
|
|
362
365
|
}) => TresContext;
|
|
@@ -675,6 +678,11 @@ interface ContextProps extends RendererOptions {
|
|
|
675
678
|
* @default false
|
|
676
679
|
*/
|
|
677
680
|
windowSize?: boolean;
|
|
681
|
+
/**
|
|
682
|
+
* The maximum number of frames per second to render
|
|
683
|
+
* @default undefined
|
|
684
|
+
*/
|
|
685
|
+
fpsLimit?: number;
|
|
678
686
|
/**
|
|
679
687
|
* Whether to enable the provide/inject bridge between Vue and TresJS
|
|
680
688
|
* When true, Vue's provide/inject will work across the TresJS boundary
|
|
@@ -911,6 +919,24 @@ declare const vLog: {
|
|
|
911
919
|
}) => void;
|
|
912
920
|
};
|
|
913
921
|
//#endregion
|
|
922
|
+
//#region src/utils/createTimer.d.ts
|
|
923
|
+
interface TresTimer {
|
|
924
|
+
getDelta: () => number;
|
|
925
|
+
getElapsed: () => number;
|
|
926
|
+
update: () => void;
|
|
927
|
+
start: () => void;
|
|
928
|
+
stop: () => void;
|
|
929
|
+
}
|
|
930
|
+
/**
|
|
931
|
+
* Creates a unified timer abstraction that uses `Timer` on Three.js r179+
|
|
932
|
+
* and falls back to `Clock` on older versions.
|
|
933
|
+
*
|
|
934
|
+
* - On r179+: uses `Timer` with its Page Visibility API support (`connect`/`disconnect`).
|
|
935
|
+
* - On older versions: uses `Clock` with `start`/`stop`.
|
|
936
|
+
*
|
|
937
|
+
*/
|
|
938
|
+
declare function createTimer(): TresTimer;
|
|
939
|
+
//#endregion
|
|
914
940
|
//#region src/utils/is/three.d.ts
|
|
915
941
|
/**
|
|
916
942
|
* Type guard to check if a value is a Three.js Object3D
|
|
@@ -1154,4 +1180,4 @@ interface TresPlugin {
|
|
|
1154
1180
|
}
|
|
1155
1181
|
declare const plugin: TresPlugin;
|
|
1156
1182
|
//#endregion
|
|
1157
|
-
export { Args, AssetLoadData, AttachFnType, AttachType, ConstructorRepresentation, DevtoolsMessage, DevtoolsMessageType, DevtoolsMessenger, DevtoolsSubscriber, DisposeType, ElementProps, InstanceProps, LoaderMethods, LoaderProto, LocalState, LoopContext, MathType, Mutable, NonFunctionKeys, Overwrite, Properties, RenderFunction, RenderMode, RendererOptions, ThreeElement, ThreeInstances, TresCamera, _default as TresCanvas, _default$1 as TresCanvasContext, type TresCanvasEmits, type TresCanvasInstance, type TresCanvasProps, TresCatalogue, TresColor, TresColorArray, TresComponents, type TresContext, TresContextWithClock, TresControl, type TresCustomRendererOptions, TresEuler, TresInstance, TresLayers, TresLoader, TresLoaderOptions, TresMaterial, TresObject, TresObject3D, TresObjectMap, TresOptions, TresPartialContext, TresPlugin, type TresPointerEvent, TresPrimitive, TresQuaternion, TresRenderer, TresRendererError, TresRendererErrorCode, TresRendererSetupContext, TresScene, TresVector2, TresVector3, TresVector4, UseCameraReturn, _default$2 as UseLoader, UseLoaderReturn, UseRendererManagerReturn, UseRendererOptions, VectorCoordinates, type VectorFlexibleParams, VueProps, WithMathProps, buildGraph, catalogue, plugin as default, disposeObject3D as dispose, extend, isBufferGeometry, isCamera, isClassInstance, isColor, isColorRepresentation, isCopyable, isFog, isGroup, isLayers, isLight, isMaterial, isMesh, isObject3D, isOrthographicCamera, isPerspectiveCamera, isProd, isScene, isTresCamera, isTresInstance, isTresObject, isTresPrimitive, isVectorLike, logError, logMessage, logWarning, normalizeColor, normalizeVectorFlexibleParam, registerTresDevtools, templateCompilerOptions, useCameraManager, useGraph, useLoader, useLoop, useRendererManager, useTres, useTresContext, useTresContextProvider, vDistanceTo, vLightHelper, vLog };
|
|
1183
|
+
export { Args, AssetLoadData, AttachFnType, AttachType, ConstructorRepresentation, DevtoolsMessage, DevtoolsMessageType, DevtoolsMessenger, DevtoolsSubscriber, DisposeType, ElementProps, InstanceProps, LoaderMethods, LoaderProto, LocalState, LoopContext, MathType, Mutable, NonFunctionKeys, Overwrite, Properties, RenderFunction, RenderMode, RendererOptions, ThreeElement, ThreeInstances, TresCamera, _default as TresCanvas, _default$1 as TresCanvasContext, type TresCanvasEmits, type TresCanvasInstance, type TresCanvasProps, TresCatalogue, TresColor, TresColorArray, TresComponents, type TresContext, TresContextWithClock, TresControl, type TresCustomRendererOptions, TresEuler, TresInstance, TresLayers, TresLoader, TresLoaderOptions, TresMaterial, TresObject, TresObject3D, TresObjectMap, TresOptions, TresPartialContext, TresPlugin, type TresPointerEvent, TresPrimitive, TresQuaternion, TresRenderer, TresRendererError, TresRendererErrorCode, TresRendererSetupContext, TresScene, TresTimer, TresVector2, TresVector3, TresVector4, UseCameraReturn, _default$2 as UseLoader, UseLoaderReturn, UseRendererManagerReturn, UseRendererOptions, VectorCoordinates, type VectorFlexibleParams, VueProps, WithMathProps, buildGraph, catalogue, createTimer, plugin as default, disposeObject3D as dispose, extend, isBufferGeometry, isCamera, isClassInstance, isColor, isColorRepresentation, isCopyable, isFog, isGroup, isLayers, isLight, isMaterial, isMesh, isObject3D, isOrthographicCamera, isPerspectiveCamera, isProd, isScene, isTresCamera, isTresInstance, isTresObject, isTresPrimitive, isVectorLike, logError, logMessage, logWarning, normalizeColor, normalizeVectorFlexibleParam, registerTresDevtools, templateCompilerOptions, useCameraManager, useGraph, useLoader, useLoop, useRendererManager, useTres, useTresContext, useTresContextProvider, vDistanceTo, vLightHelper, vLog };
|
package/dist/tres.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* name: @tresjs/core
|
|
3
|
-
* version: v5.
|
|
3
|
+
* version: v5.8.0
|
|
4
4
|
* (c) 2026
|
|
5
5
|
* description: Declarative ThreeJS using Vue Components
|
|
6
6
|
* author: Alvaro Saburido <hola@alvarosaburido.dev> (https://github.com/alvarosabu/)
|
|
7
7
|
*/
|
|
8
8
|
import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createRenderer, defineComponent, getCurrentInstance, h, isRef, mergeProps, nextTick, normalizeClass, normalizeStyle, onMounted, onUnmounted, openBlock, provide, reactive, readonly, ref, renderSlot, shallowRef, toValue, unref, useSlots, watch, watchEffect, withCtx } from "vue";
|
|
9
9
|
import * as THREE from "three";
|
|
10
|
-
import { ACESFilmicToneMapping, ArrowHelper, BackSide, BufferAttribute, BufferGeometry, Color, DirectionalLightHelper, DoubleSide, Float32BufferAttribute, HemisphereLightHelper, Layers, Line, LineBasicMaterial, Material, MathUtils, Mesh, MeshBasicMaterial, PCFSoftShadowMap, PerspectiveCamera, PointLightHelper, Scene, SpotLightHelper,
|
|
10
|
+
import { ACESFilmicToneMapping, ArrowHelper, BackSide, BufferAttribute, BufferGeometry, Color, DirectionalLightHelper, DoubleSide, Float32BufferAttribute, HemisphereLightHelper, Layers, Line, LineBasicMaterial, Material, MathUtils, Mesh, MeshBasicMaterial, PCFSoftShadowMap, PerspectiveCamera, PointLightHelper, REVISION, Scene, SpotLightHelper, Vector3, WebGLRenderer } from "three";
|
|
11
11
|
import { createEventHook, createInjectionState, promiseTimeout, refDebounced, tryOnScopeDispose, unrefElement, useAsyncState, useDevicePixelRatio, useElementSize, useFps, useMemory, useRafFn, useTimeout, useWindowSize, whenever } from "@vueuse/core";
|
|
12
12
|
import { camel, isEqual, isFunction, isNumber, isObject, isString, isUndefined } from "radashi";
|
|
13
13
|
import { forwardHtmlEvents, getVoidObject } from "@pmndrs/pointer-events";
|
|
14
14
|
import { setupDevtoolsPlugin } from "@vue/devtools-api";
|
|
15
15
|
|
|
16
16
|
//#region package.json
|
|
17
|
-
var version = "5.
|
|
17
|
+
var version = "5.8.0";
|
|
18
18
|
|
|
19
19
|
//#endregion
|
|
20
20
|
//#region src/utils/makeMap.ts
|
|
@@ -716,13 +716,55 @@ const setPixelRatio = (renderer, systemDpr, userDpr) => {
|
|
|
716
716
|
if (newDpr !== renderer.getPixelRatio?.()) renderer.setPixelRatio(newDpr);
|
|
717
717
|
};
|
|
718
718
|
|
|
719
|
+
//#endregion
|
|
720
|
+
//#region src/core/revision.ts
|
|
721
|
+
const revision = Number.parseInt(REVISION.replace("dev", ""));
|
|
722
|
+
|
|
723
|
+
//#endregion
|
|
724
|
+
//#region src/utils/createTimer.ts
|
|
725
|
+
/**
|
|
726
|
+
* Minimum Three.js revision that ships the `Timer` class.
|
|
727
|
+
*/
|
|
728
|
+
const TIMER_MIN_REVISION = 179;
|
|
729
|
+
/**
|
|
730
|
+
* Creates a unified timer abstraction that uses `Timer` on Three.js r179+
|
|
731
|
+
* and falls back to `Clock` on older versions.
|
|
732
|
+
*
|
|
733
|
+
* - On r179+: uses `Timer` with its Page Visibility API support (`connect`/`disconnect`).
|
|
734
|
+
* - On older versions: uses `Clock` with `start`/`stop`.
|
|
735
|
+
*
|
|
736
|
+
*/
|
|
737
|
+
function createTimer() {
|
|
738
|
+
if (revision >= TIMER_MIN_REVISION) {
|
|
739
|
+
const timer = new THREE.Timer();
|
|
740
|
+
return {
|
|
741
|
+
getDelta: () => timer.getDelta(),
|
|
742
|
+
getElapsed: () => timer.getElapsed(),
|
|
743
|
+
update: () => timer.update(),
|
|
744
|
+
start: () => {
|
|
745
|
+
if (typeof document !== "undefined") timer.connect(document);
|
|
746
|
+
},
|
|
747
|
+
stop: () => timer.disconnect()
|
|
748
|
+
};
|
|
749
|
+
} else {
|
|
750
|
+
const clock = new THREE.Clock();
|
|
751
|
+
return {
|
|
752
|
+
getDelta: () => clock.getDelta(),
|
|
753
|
+
getElapsed: () => clock.elapsedTime,
|
|
754
|
+
update: () => {},
|
|
755
|
+
start: () => clock.start(),
|
|
756
|
+
stop: () => clock.stop()
|
|
757
|
+
};
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
|
|
719
761
|
//#endregion
|
|
720
762
|
//#region src/composables/useCreateRafLoop/index.ts
|
|
721
763
|
/**
|
|
722
764
|
* @param cycleFn the function that is called before the after event hook is triggered and after the before event hook is triggered.
|
|
723
765
|
*/
|
|
724
|
-
const useCreateRafLoop = (cycleFn) => {
|
|
725
|
-
const timer =
|
|
766
|
+
const useCreateRafLoop = (cycleFn, { fpsLimit } = {}) => {
|
|
767
|
+
const timer = createTimer();
|
|
726
768
|
const eventHooks = {
|
|
727
769
|
before: createEventHook(),
|
|
728
770
|
after: createEventHook()
|
|
@@ -736,13 +778,16 @@ const useCreateRafLoop = (cycleFn) => {
|
|
|
736
778
|
eventHooks.before.trigger(context);
|
|
737
779
|
cycleFn();
|
|
738
780
|
eventHooks.after.trigger(context);
|
|
739
|
-
}, {
|
|
781
|
+
}, {
|
|
782
|
+
immediate: false,
|
|
783
|
+
fpsLimit
|
|
784
|
+
});
|
|
740
785
|
const start = () => {
|
|
741
|
-
|
|
786
|
+
timer.start();
|
|
742
787
|
resume();
|
|
743
788
|
};
|
|
744
789
|
const stop = () => {
|
|
745
|
-
timer.
|
|
790
|
+
timer.stop();
|
|
746
791
|
pause();
|
|
747
792
|
};
|
|
748
793
|
return {
|
|
@@ -766,7 +811,7 @@ var TresRendererError = class extends Error {
|
|
|
766
811
|
|
|
767
812
|
//#endregion
|
|
768
813
|
//#region src/composables/useRenderer/useRendererManager.ts
|
|
769
|
-
function useRendererManager({ scene, canvas, options, contextParts: { sizes, camera } }) {
|
|
814
|
+
function useRendererManager({ scene, canvas, options, fpsLimit, contextParts: { sizes, camera } }) {
|
|
770
815
|
const getRenderer = () => {
|
|
771
816
|
if (isFunction(options.renderer)) return options.renderer({
|
|
772
817
|
sizes,
|
|
@@ -841,7 +886,7 @@ Error details: ${rendererError.message}`, rendererError);
|
|
|
841
886
|
};
|
|
842
887
|
const loop = useCreateRafLoop(() => {
|
|
843
888
|
if (frames.value) renderFunction(notifyFrameRendered);
|
|
844
|
-
});
|
|
889
|
+
}, { fpsLimit });
|
|
845
890
|
readyEventHook.on(() => {
|
|
846
891
|
if (isInitialized.value) loop.start();
|
|
847
892
|
});
|
|
@@ -967,7 +1012,7 @@ function useEventManager({ canvas, contextParts: { scene, camera, renderer } })
|
|
|
967
1012
|
//#endregion
|
|
968
1013
|
//#region src/composables/useTresContextProvider/index.ts
|
|
969
1014
|
const INJECTION_KEY = "useTres";
|
|
970
|
-
const [useTresContextProvider, _useTresContext] = createInjectionState(({ scene, canvas, windowSize, rendererOptions }) => {
|
|
1015
|
+
const [useTresContextProvider, _useTresContext] = createInjectionState(({ scene, canvas, fpsLimit, windowSize, rendererOptions }) => {
|
|
971
1016
|
const localScene = shallowRef(scene);
|
|
972
1017
|
const sizes = useSizes(windowSize, canvas);
|
|
973
1018
|
const camera = useCameraManager({ sizes });
|
|
@@ -975,6 +1020,7 @@ const [useTresContextProvider, _useTresContext] = createInjectionState(({ scene,
|
|
|
975
1020
|
scene: localScene,
|
|
976
1021
|
canvas,
|
|
977
1022
|
options: rendererOptions,
|
|
1023
|
+
fpsLimit,
|
|
978
1024
|
contextParts: {
|
|
979
1025
|
sizes,
|
|
980
1026
|
camera
|
|
@@ -1892,6 +1938,10 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
|
|
|
1892
1938
|
type: Boolean,
|
|
1893
1939
|
required: false
|
|
1894
1940
|
},
|
|
1941
|
+
fpsLimit: {
|
|
1942
|
+
type: Number,
|
|
1943
|
+
required: false
|
|
1944
|
+
},
|
|
1895
1945
|
enableProvideBridge: {
|
|
1896
1946
|
type: Boolean,
|
|
1897
1947
|
required: false
|
|
@@ -2067,6 +2117,7 @@ var Context_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
|
|
|
2067
2117
|
const context = shallowRef(useTresContextProvider({
|
|
2068
2118
|
scene: scene.value,
|
|
2069
2119
|
canvas: props.canvas,
|
|
2120
|
+
fpsLimit: () => props.fpsLimit ?? Infinity,
|
|
2070
2121
|
windowSize: props.windowSize ?? false,
|
|
2071
2122
|
rendererOptions: props
|
|
2072
2123
|
}));
|
|
@@ -2160,6 +2211,10 @@ var TresCanvas_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
2160
2211
|
required: false,
|
|
2161
2212
|
default: void 0
|
|
2162
2213
|
},
|
|
2214
|
+
fpsLimit: {
|
|
2215
|
+
type: Number,
|
|
2216
|
+
required: false
|
|
2217
|
+
},
|
|
2163
2218
|
enableProvideBridge: {
|
|
2164
2219
|
type: Boolean,
|
|
2165
2220
|
required: false,
|
|
@@ -2561,4 +2616,4 @@ const plugin = { install(app) {
|
|
|
2561
2616
|
var src_default = plugin;
|
|
2562
2617
|
|
|
2563
2618
|
//#endregion
|
|
2564
|
-
export { DevtoolsMessenger, TresCanvas_default as TresCanvas, Context_default as TresCanvasContext, TresRendererError, component_default as UseLoader, buildGraph, catalogue, src_default as default, disposeObject3D as dispose, extend, isBufferGeometry, isCamera, isClassInstance, isColor, isColorRepresentation, isCopyable, isFog, isGroup, isLayers, isLight, isMaterial, isMesh, isObject3D, isOrthographicCamera, isPerspectiveCamera, isProd, isScene, isTresCamera, isTresInstance, isTresObject, isTresPrimitive, isVectorLike, logError, logMessage, logWarning, normalizeColor, normalizeVectorFlexibleParam, registerTresDevtools, template_compiler_options_default as templateCompilerOptions, useCameraManager, useGraph, useLoader, useLoop, useRendererManager, useTres, useTresContext, useTresContextProvider, vDistanceTo, vLightHelper, vLog };
|
|
2619
|
+
export { DevtoolsMessenger, TresCanvas_default as TresCanvas, Context_default as TresCanvasContext, TresRendererError, component_default as UseLoader, buildGraph, catalogue, createTimer, src_default as default, disposeObject3D as dispose, extend, isBufferGeometry, isCamera, isClassInstance, isColor, isColorRepresentation, isCopyable, isFog, isGroup, isLayers, isLight, isMaterial, isMesh, isObject3D, isOrthographicCamera, isPerspectiveCamera, isProd, isScene, isTresCamera, isTresInstance, isTresObject, isTresPrimitive, isVectorLike, logError, logMessage, logWarning, normalizeColor, normalizeVectorFlexibleParam, registerTresDevtools, template_compiler_options_default as templateCompilerOptions, useCameraManager, useGraph, useLoader, useLoop, useRendererManager, useTres, useTresContext, useTresContextProvider, vDistanceTo, vLightHelper, vLog };
|
package/package.json
CHANGED