@needle-tools/engine 4.8.6-next.7fdd4fa → 4.8.6

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 +1 @@
1
- {"version":3,"file":"engine_pmrem.js","sourceRoot":"","sources":["../../src/engine/engine_pmrem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine_pmrem.js","sourceRoot":"","sources":["../../src/engine/engine_pmrem.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/engine",
3
- "version": "4.8.6-next.7fdd4fa",
3
+ "version": "4.8.6",
4
4
  "description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.",
5
5
  "main": "dist/needle-engine.min.js",
6
6
  "exports": {
@@ -167,4 +167,4 @@
167
167
  "module": "lib/needle-engine.js",
168
168
  "typings": "lib/needle-engine.d.ts",
169
169
  "types": "lib/needle-engine.d.ts"
170
- }
170
+ }
package/src/engine/api.ts CHANGED
@@ -59,7 +59,6 @@ export * from "./engine_physics.js";
59
59
  export * from "./engine_physics.types.js";
60
60
  export * from "./engine_physics_rapier.js";
61
61
  export * from "./engine_playerview.js";
62
- export { loadPMREM } from "./engine_pmrem.js";
63
62
  export * from "./engine_scenelighting.js";
64
63
  export * from "./engine_serialization.js";
65
64
  export { type ISerializable } from "./engine_serialization_core.js";
@@ -4,16 +4,12 @@ import { EXRLoader } from "three/examples/jsm/loaders/EXRLoader";
4
4
  import { KTX2Loader } from "three/examples/jsm/loaders/KTX2Loader";
5
5
  import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader";
6
6
 
7
+ import { disposeObjectResources, setDisposable } from "./engine_assetdatabase.js";
8
+
7
9
  const running: Map<string, Promise<Texture | null>> = new Map();
8
10
 
9
11
  // #region api
10
12
 
11
- /**
12
- * Loads a PMREM texture from the given URL. This also supports the ultra-fast preprocessed environment maps (PMREM) format.
13
- * @param url The URL of the PMREM texture to load.
14
- * @param renderer The WebGLRenderer to use for loading the texture.
15
- * @returns A promise that resolves to the loaded texture or null if loading failed.
16
- */
17
13
  export function loadPMREM(url: string, renderer: WebGLRenderer): Promise<Texture | null> {
18
14
  if (running.has(url)) {
19
15
  return running.get(url)!;
@@ -21,13 +17,47 @@ export function loadPMREM(url: string, renderer: WebGLRenderer): Promise<Texture
21
17
  const actualUrl = new URL(url, window.location.href);
22
18
  const promise = internalLoadPMREM(actualUrl, renderer);
23
19
  running.set(url, promise);
24
- promise.finally(() => {
25
- running.delete(url);
26
- });
27
20
  return promise;
28
21
  }
29
22
 
30
23
 
24
+
25
+ // #region Cache
26
+
27
+ declare type SkyboxCacheEntry = { src: string, texture: Promise<Texture | null> };
28
+ function ensureGlobalCache() {
29
+ if (!globalThis["NEEDLE_ENGINE_SKYBOX_TEXTURES"])
30
+ globalThis["NEEDLE_ENGINE_SKYBOX_TEXTURES"] = new Array<SkyboxCacheEntry>();
31
+ return globalThis["NEEDLE_ENGINE_SKYBOX_TEXTURES"] as Array<SkyboxCacheEntry>;
32
+ }
33
+
34
+ function tryGetPreviouslyLoadedTexture(src: string) {
35
+ const cache = ensureGlobalCache();
36
+ const found = cache.find(x => x.src === src);
37
+ if (found) {
38
+ return found.texture;
39
+ }
40
+ return null;
41
+ }
42
+ async function disposeCachedTexture(tex: Promise<Texture | null>) {
43
+ const texture = await tex;
44
+ if (!texture) return;
45
+ setDisposable(texture, true);
46
+ disposeObjectResources(texture);
47
+ }
48
+ function registerPromise(src: string, texture: Promise<Texture | null>) {
49
+ const cache = ensureGlobalCache();
50
+ // Make sure the cache doesnt get too big
51
+ while (cache.length > 5) {
52
+ const entry = cache.shift();
53
+ if (entry) { disposeCachedTexture(entry.texture); }
54
+ }
55
+ texture.then(t => { return setDisposable(t, false) });
56
+ cache.push({ src, texture });
57
+ }
58
+
59
+
60
+
31
61
  // #region loading
32
62
 
33
63
 
@@ -37,6 +67,11 @@ async function internalLoadPMREM(url: URL, renderer: WebGLRenderer) {
37
67
  const pathname = url.pathname;
38
68
  const isPMREM_URL: boolean = url.toString().toLowerCase().includes("pmrem") || url.searchParams.get("pmrem") != null;
39
69
 
70
+ const cached = tryGetPreviouslyLoadedTexture(pathname);
71
+ if (cached) {
72
+ const res = await cached;
73
+ if (res?.source?.data?.length > 0 || res?.source?.data?.data?.length) return res;
74
+ }
40
75
  const isEXR = pathname.endsWith(".exr");
41
76
  const isHdr = pathname.endsWith(".hdr");
42
77
  const isKtx2 = pathname.endsWith(".ktx2");
@@ -75,6 +110,7 @@ async function internalLoadPMREM(url: URL, renderer: WebGLRenderer) {
75
110
  return tex;
76
111
  });
77
112
 
113
+ registerPromise(str, promise);
78
114
  const texture = await promise.catch(_err => {
79
115
  console.warn("Failed to load texture from url:", url);
80
116
  return null;