abstract-3d 2.3.14 → 2.3.15
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/lib/renderers/react/react-image-material.d.ts.map +1 -1
- package/lib/renderers/react/react-image-material.js +6 -10
- package/lib/renderers/react/react-image-material.js.map +1 -1
- package/package.json +2 -2
- package/src/.DS_Store +0 -0
- package/src/renderers/.DS_Store +0 -0
- package/src/renderers/react/react-image-material.tsx +7 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-image-material.d.ts","sourceRoot":"","sources":["../../../src/renderers/react/react-image-material.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAGzC,OAAO,EAA6B,aAAa,EAA+C,MAAM,OAAO,CAAC;AAC9G,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAA6C,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE/F,eAAO,MAAM,aAAa,eAAsB,CAAC;AAEjD,oBAAY,kBAAkB;IAC5B,OAAO,OAAO;IACd,MAAM,OAAO;IACb,YAAY,OAAO;CACpB;AAED,oBAAY,mBAAmB;IAC7B,OAAO,OAAO;IACd,MAAM,OAAO;CACd;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;CACnC,CAAC;
|
|
1
|
+
{"version":3,"file":"react-image-material.d.ts","sourceRoot":"","sources":["../../../src/renderers/react/react-image-material.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAGzC,OAAO,EAA6B,aAAa,EAA+C,MAAM,OAAO,CAAC;AAC9G,OAAO,EAAE,QAAQ,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAA6C,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE/F,eAAO,MAAM,aAAa,eAAsB,CAAC;AAEjD,oBAAY,kBAAkB;IAC5B,OAAO,OAAO;IACd,MAAM,OAAO;IACb,YAAY,OAAO;CACpB;AAED,oBAAY,mBAAmB;IAC7B,OAAO,OAAO;IACd,MAAM,OAAO;CACd;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,mBAAmB,CAAC;CACnC,CAAC;AAKF,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,mBAAmB,EACnB,QAAQ,EACR,EAAE,EACF,YAAY,EACZ,SAAS,EACT,WAAW,EACX,aAAa,GACd,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;CACnD,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAsBpB"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect } from "react";
|
|
3
2
|
import { suspend } from "suspend-react";
|
|
4
3
|
import { createSVG } from "abstract-image";
|
|
5
4
|
import { CanvasTexture, DoubleSide, PlaneGeometry, SRGBColorSpace, TextureLoader } from "three";
|
|
@@ -17,6 +16,7 @@ export var MagnificationFilter;
|
|
|
17
16
|
MagnificationFilter[MagnificationFilter["Linear"] = 1006] = "Linear";
|
|
18
17
|
})(MagnificationFilter || (MagnificationFilter = {}));
|
|
19
18
|
const filter = { min: MinificationFilter.LinearMipmap, mag: MagnificationFilter.Linear };
|
|
19
|
+
const textureCache = new Map();
|
|
20
20
|
export function ImageMaterial({ image, materialStateImages, material, id, useAlphaTest, hoveredId, selectedIds, materialState, }) {
|
|
21
21
|
const url = materialState === "Error" && materialStateImages?.[ERROR_IMG_KEY]
|
|
22
22
|
? materialStateImages[ERROR_IMG_KEY]
|
|
@@ -26,23 +26,18 @@ export function ImageMaterial({ image, materialStateImages, material, id, useAlp
|
|
|
26
26
|
const color = getColor(selectedIds, id, hoveredId, material);
|
|
27
27
|
const texture = suspend(urlIsSvg(url) ? loadSvg(url, filter) : loadNormal(url, filter), [
|
|
28
28
|
url,
|
|
29
|
-
color,
|
|
30
29
|
]);
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
return () => {
|
|
33
|
-
if (texture) {
|
|
34
|
-
texture.dispose();
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
}, [texture]);
|
|
38
30
|
return (_jsx("meshBasicMaterial", { color: color, side: DoubleSide, alphaTest: useAlphaTest ?? true ? 0.8 : undefined, map: texture, ...(material.opacity !== undefined && material.opacity < 1 ? { opacity: material.opacity } : materialDefaults), transparent: true }));
|
|
39
31
|
}
|
|
40
32
|
function urlIsSvg(url) {
|
|
41
33
|
return url.startsWith("data:image/svg+xml") || url.endsWith(".svg") || url.includes(".svg?");
|
|
42
34
|
}
|
|
43
35
|
function loadSvg(url, filter) {
|
|
44
|
-
|
|
36
|
+
if (textureCache.has(url)) {
|
|
37
|
+
return Promise.resolve(textureCache.get(url) ?? null);
|
|
38
|
+
}
|
|
45
39
|
return new Promise((res) => {
|
|
40
|
+
const maxSize = 4096;
|
|
46
41
|
const img = new Image();
|
|
47
42
|
// eslint-disable-next-line consistent-return
|
|
48
43
|
img.onload = () => {
|
|
@@ -69,6 +64,7 @@ function loadSvg(url, filter) {
|
|
|
69
64
|
texture.anisotropy = 4;
|
|
70
65
|
texture.needsUpdate = true;
|
|
71
66
|
res(texture);
|
|
67
|
+
textureCache.set(url, texture);
|
|
72
68
|
};
|
|
73
69
|
img.onerror = () => res(null);
|
|
74
70
|
img.src = url;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-image-material.js","sourceRoot":"","sources":["../../../src/renderers/react/react-image-material.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"react-image-material.js","sourceRoot":"","sources":["../../../src/renderers/react/react-image-material.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "abstract-3d",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.15",
|
|
4
4
|
"description": "Abstract 3D",
|
|
5
5
|
"author": "Divid AB <info@divid.se>",
|
|
6
6
|
"repository": "https://github.com/dividab/abstract-visuals/tree/master/packages/abstract-3d",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"@types/three": "^0.180.0",
|
|
66
66
|
"react": "^19.2.6"
|
|
67
67
|
},
|
|
68
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "bff8e28a301280946608170e21513e025df74be2"
|
|
69
69
|
}
|
package/src/.DS_Store
ADDED
|
Binary file
|
|
Binary file
|
|
@@ -24,6 +24,7 @@ export type TextureFilter = {
|
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
const filter: TextureFilter = { min: MinificationFilter.LinearMipmap, mag: MagnificationFilter.Linear };
|
|
27
|
+
const textureCache: Map<string, Texture | null> = new Map();
|
|
27
28
|
|
|
28
29
|
export function ImageMaterial({
|
|
29
30
|
image,
|
|
@@ -53,15 +54,7 @@ export function ImageMaterial({
|
|
|
53
54
|
const color = getColor(selectedIds, id, hoveredId, material);
|
|
54
55
|
const texture = suspend(urlIsSvg(url) ? loadSvg(url, filter) : loadNormal(url, filter), [
|
|
55
56
|
url,
|
|
56
|
-
color,
|
|
57
57
|
]) as Texture | null;
|
|
58
|
-
useEffect(() => {
|
|
59
|
-
return () => {
|
|
60
|
-
if (texture) {
|
|
61
|
-
texture.dispose();
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
}, [texture]);
|
|
65
58
|
|
|
66
59
|
return (
|
|
67
60
|
<meshBasicMaterial
|
|
@@ -80,9 +73,13 @@ function urlIsSvg(url: string): boolean {
|
|
|
80
73
|
}
|
|
81
74
|
|
|
82
75
|
function loadSvg(url: string, filter: TextureFilter): Promise<Texture | null> {
|
|
83
|
-
|
|
76
|
+
|
|
77
|
+
if (textureCache.has(url)) {
|
|
78
|
+
return Promise.resolve(textureCache.get(url) ?? null);
|
|
79
|
+
}
|
|
84
80
|
|
|
85
81
|
return new Promise((res) => {
|
|
82
|
+
const maxSize = 4096;
|
|
86
83
|
const img = new Image();
|
|
87
84
|
|
|
88
85
|
// eslint-disable-next-line consistent-return
|
|
@@ -115,6 +112,7 @@ function loadSvg(url: string, filter: TextureFilter): Promise<Texture | null> {
|
|
|
115
112
|
texture.needsUpdate = true;
|
|
116
113
|
|
|
117
114
|
res(texture);
|
|
115
|
+
textureCache.set(url, texture);
|
|
118
116
|
};
|
|
119
117
|
|
|
120
118
|
img.onerror = () => res(null);
|