Skip to content

Commit 9cb9c68

Browse files
committed
A3D: upgrade three, clean up texture, layoutEffect for camera
1 parent c94aae7 commit 9cb9c68

File tree

10 files changed

+177
-196
lines changed

10 files changed

+177
-196
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"prettier": "^2.2.1",
3232
"react": "^19.0.0",
3333
"react-dom": "^19.0.0",
34-
"typescript": "^5.4.5",
34+
"typescript": "^5.8.2",
3535
"vite": "^6.0.3",
3636
"vite-plugin-node-polyfills": "^0.22.0",
3737
"xmldom": "^0.6.0",

packages/abstract-3d/package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,19 @@
1818
"package.json"
1919
],
2020
"dependencies": {
21-
"@react-three/drei": "^10.0.0",
21+
"@react-three/drei": "^10.0.3",
2222
"@react-three/fiber": "^9.0.4",
2323
"suspend-react": "^0.1.3",
24-
"three": "^0.173.0",
24+
"three": "^0.174.0",
2525
"ts-exhaustive-check": "^1.0.0"
2626
},
2727
"peerDependencies": {
2828
"react": "^19.0.0"
2929
},
3030
"devDependencies": {
31-
"@types/react": "^19.0.8",
31+
"@types/react": "^19.0.10",
3232
"@types/react-reconciler": "^0.28.9",
33-
"@types/three": "^0.173.0",
33+
"@types/three": "^0.174.0",
3434
"react": "^19.0.0"
3535
},
3636
"gitHead": "0c3b26e59c7ef854cb8aae96a9f56dd7d82cbc9c"

packages/abstract-3d/src/abstract-3d.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,7 @@ const quaternion2 = new Quaternion();
395395
const euler1 = new Euler();
396396
const euler2 = new Euler();
397397
const vector = new Vector3();
398+
const matrix = new Matrix4();
398399

399400
export function vec3RotCombine(outer: Vec3, inner: Vec3): Vec3 {
400401
euler1.set(outer.x, outer.y, outer.z);
@@ -407,15 +408,11 @@ export function vec3RotCombine(outer: Vec3, inner: Vec3): Vec3 {
407408
}
408409

409410
export function vec3RotNormal(referenceNormal: Vec3, eulerRot: Vec3): Vec3 {
410-
const rotationMatrix = new Matrix4();
411-
const euler = new Euler();
412-
euler.set(eulerRot.x, eulerRot.y, eulerRot.z);
413-
rotationMatrix.makeRotationFromEuler(euler);
414-
415-
const normal = new Vector3();
416-
normal.set(referenceNormal.x, referenceNormal.y, referenceNormal.z);
417-
normal.applyMatrix4(rotationMatrix);
418-
const normalized = normal.normalize();
411+
euler1.set(eulerRot.x, eulerRot.y, eulerRot.z);
412+
matrix.makeRotationFromEuler(euler1);
413+
vector.set(referenceNormal.x, referenceNormal.y, referenceNormal.z);
414+
vector.applyMatrix4(matrix);
415+
const normalized = vector.normalize();
419416
return vec3(normalized.x, normalized.y, normalized.z);
420417
}
421418

packages/abstract-3d/src/renderers/react/react-camera.tsx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
22
/* eslint-disable @typescript-eslint/no-unused-vars */
3-
import React, { useEffect, useRef, useState } from "react";
3+
import React, { useEffect, useLayoutEffect, useRef, useState } from "react";
44
import {
55
GizmoHelperProps,
66
PerspectiveCamera,
@@ -11,7 +11,7 @@ import {
1111
GizmoViewcube,
1212
GizmoViewport,
1313
} from "@react-three/drei";
14-
import { ThreeEvent, useFrame, useThree } from "@react-three/fiber";
14+
import { ThreeEvent, useThree } from "@react-three/fiber";
1515
import { exhaustiveCheck } from "ts-exhaustive-check";
1616
import { Vector3 } from "three/src/math/Vector3.js";
1717
import { View, Scene, Vec3, vec3 } from "../../abstract-3d.js";
@@ -65,7 +65,7 @@ export function ReactCamera({
6565
const orthographicRef = useRef<any | undefined>(undefined);
6666
const viewPortAspect = useThree(({ viewport: { aspect } }) => aspect);
6767

68-
useEffect(() => {
68+
useLayoutEffect(() => {
6969
const [posX, posY, posZ, size, sceneAspect] = (() => {
7070
switch (view) {
7171
case "front":
@@ -136,17 +136,17 @@ export function ReactCamera({
136136
// prevScene.current = scene;
137137
// }, [scene]);
138138

139-
useFrame(() => {
140-
// if (useAnimations && camera && prevScene.current !== scene) {
141-
// const [, , z] = cameraDist(scene);
142-
// vector3.set(camera.position.x, camera.position.y, z);
143-
// camera.position.lerp(vector3, 0.12);
144-
// ref.current.enabled = false;
145-
// invalidate();
146-
// } else {
147-
// ref.current.enabled = true;
148-
// }
149-
});
139+
// useFrame(() => {
140+
// if (useAnimations && camera && prevScene.current !== scene) {
141+
// const [, , z] = cameraDist(scene);
142+
// vector3.set(camera.position.x, camera.position.y, z);
143+
// camera.position.lerp(vector3, 0.12);
144+
// ref.current.enabled = false;
145+
// invalidate();
146+
// } else {
147+
// ref.current.enabled = true;
148+
// }
149+
// });
150150
return (
151151
<>
152152
<PerspectiveCamera

packages/abstract-3d/src/renderers/react/react-material.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from "react";
1+
import React, { useEffect } from "react";
22
import { suspend } from "suspend-react";
33
import { Color, DoubleSide, MaterialParameters, SRGBColorSpace, Texture, TextureLoader } from "three";
44
import { Material } from "../../abstract-3d.js";
@@ -101,6 +101,14 @@ function TextureMaterial({
101101
[url]
102102
) as Texture | null;
103103

104+
useEffect(() => {
105+
return () => {
106+
if (texture) {
107+
texture.dispose();
108+
}
109+
};
110+
}, [texture]);
111+
104112
return (
105113
<meshBasicMaterial
106114
color={color}

packages/abstract-document/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"@types/isomorphic-fetch": "^0.0.34",
4040
"@types/mustache": "^4.2.5",
4141
"@types/pdfkit": "^0.13.4",
42-
"@types/react": "^19.0.8",
42+
"@types/react": "^19.0.10",
4343
"diff-js-xml": "^1.0.8",
4444
"jszip": "^3.10.1",
4545
"pdf2json": "2.0.1",

packages/abstract-image/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
},
2727
"devDependencies": {
2828
"@types/base64-js": "^1.3.2",
29-
"@types/react": "^19.0.8",
29+
"@types/react": "^19.0.10",
3030
"react": "^19.0.0",
3131
"vite": "^6.0.1",
3232
"vitest": "^2.1.6"

packages/abstract-sheet/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"devDependencies": {
3131
"@types/mustache": "^4.2.5",
3232
"@types/node": "^22.10.1",
33-
"@types/react": "^19.0.8",
33+
"@types/react": "^19.0.10",
3434
"@types/xml": "^1.0.11"
3535
},
3636
"gitHead": "0c3b26e59c7ef854cb8aae96a9f56dd7d82cbc9c"

packages/abstract-visuals-example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"devDependencies": {
2323
"@types/base64-js": "^1.3.2",
2424
"@types/file-saver": "^2.0.7",
25-
"@types/react": "^19.0.8",
25+
"@types/react": "^19.0.10",
2626
"@types/react-dom": "^19.0.1",
2727
"@vitejs/plugin-react": "^4.3.4",
2828
"vite": "^6.0.1",

0 commit comments

Comments
 (0)