@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.
- package/dist/{needle-engine.bundle-C6TN-zhq.js → needle-engine.bundle-BTJDRZkJ.js} +3191 -3170
- package/dist/{needle-engine.bundle-D6OHYyGz.min.js → needle-engine.bundle-CQIq7Zg-.min.js} +81 -81
- package/dist/{needle-engine.bundle-B1l8PaE0.umd.cjs → needle-engine.bundle-CaNItSG7.umd.cjs} +92 -92
- package/dist/needle-engine.js +95 -96
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/lib/engine/api.d.ts +0 -1
- package/lib/engine/api.js +0 -1
- package/lib/engine/api.js.map +1 -1
- package/lib/engine/engine_pmrem.d.ts +0 -6
- package/lib/engine/engine_pmrem.js +40 -9
- package/lib/engine/engine_pmrem.js.map +1 -1
- package/package.json +2 -2
- package/src/engine/api.ts +0 -1
- package/src/engine/engine_pmrem.ts +45 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine_pmrem.js","sourceRoot":"","sources":["../../src/engine/engine_pmrem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAW,aAAa,EAAiB,MAAM,OAAO,CAAC;AACvG,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEnE,MAAM,OAAO,GAAyC,IAAI,GAAG,EAAE,CAAC;AAEhE,cAAc;AAEd
|
|
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
|
|
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;
|