@mindexec/cli 0.2.478 → 0.2.479
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/README.md +323 -323
- package/codex-model-catalog.js +202 -202
- package/codex-runtime.js +1608 -1608
- package/desktop-workspace-state.cjs +120 -120
- package/electron/main.cjs +517 -517
- package/electron/preload.cjs +17 -17
- package/electron/recurring-update-owner-smoke.mjs +55 -55
- package/electron/recurring-update-owner.cjs +97 -97
- package/electron/source-smoke.mjs +108 -108
- package/electron/update-feed-resolver.cjs +79 -79
- package/electron/update-feed.json +10 -10
- package/electron/update-manager-smoke.mjs +146 -146
- package/electron/update-manager.cjs +297 -297
- package/electron/windows-package-smoke.mjs +156 -156
- package/launch-bridge.cjs +236 -236
- package/lzo1x.js +110 -110
- package/mode4-atlas-worker.js +440 -440
- package/mode4-atlas.js +130 -130
- package/package.json +1 -1
- package/port-guard.cjs +285 -285
- package/remote-fast/osx-arm64/MacScreenCaptureKitH264.swift +339 -339
- package/remote-fast/osx-arm64/MacSystemAudioCapture.swift +214 -214
- package/remote-fast/osx-arm64/UnixRawCaptureHelper.mjs +80 -80
- package/remote-fast/osx-arm64/livedesk-raw-capture-resampler.mjs +73 -73
- package/remote-fast/osx-arm64/mindexec-remote-fast.dll +0 -0
- package/remote-fast/osx-x64/MacScreenCaptureKitH264.swift +339 -339
- package/remote-fast/osx-x64/MacSystemAudioCapture.swift +214 -214
- package/remote-fast/osx-x64/UnixRawCaptureHelper.mjs +80 -80
- package/remote-fast/osx-x64/livedesk-raw-capture-resampler.mjs +73 -73
- package/remote-fast/osx-x64/mindexec-remote-fast.dll +0 -0
- package/remote-fast/win-x64/mindexec-remote-fast.dll +0 -0
- package/remote-hub.js +3698 -3698
- package/scripts/auth-session-smoke.mjs +262 -262
- package/scripts/board-render-ownership-smoke.mjs +85 -85
- package/scripts/codex-model-catalog-smoke.mjs +150 -150
- package/scripts/codex-runtime-home-smoke.mjs +58 -58
- package/scripts/codex-sdk-image-live-smoke.mjs +43 -43
- package/scripts/codex-sdk-image-runtime-smoke.mjs +122 -122
- package/scripts/codex-sdk-runtime-smoke.mjs +89 -89
- package/scripts/desktop-update-publisher-smoke.mjs +89 -89
- package/scripts/desktop-update-worker-smoke.mjs +72 -72
- package/scripts/desktop-workspace-state-smoke.mjs +81 -81
- package/scripts/drive-installed-update-smoke.mjs +67 -67
- package/scripts/npm-fresh-install-smoke.mjs +216 -216
- package/scripts/publish-mindexec-desktop-updates.mjs +224 -224
- package/scripts/remote-agent-managed-smoke.mjs +318 -318
- package/scripts/remote-agent-package-smoke.mjs +64 -64
- package/scripts/remote-agent-ws-smoke.mjs +269 -269
- package/scripts/remote-fast-live-rate-smoke.mjs +343 -343
- package/scripts/remote-fast-mdm-browser-smoke.mjs +453 -453
- package/scripts/remote-fleet-render-smoke.mjs +1350 -1350
- package/scripts/remote-frame-ws-smoke.mjs +234 -234
- package/scripts/remote-http-smoke.mjs +592 -592
- package/scripts/remote-hub-identity-smoke.mjs +146 -146
- package/scripts/remote-hub-scale-smoke.mjs +124 -124
- package/scripts/remote-hub-smoke.mjs +699 -699
- package/scripts/remote-input-ws-smoke.mjs +263 -263
- package/scripts/remote-registry-follower-smoke.mjs +815 -815
- package/scripts/setup-tree-sitter-grammars.mjs +59 -59
- package/server.js +7510 -7510
- package/start-bridge.bat +32 -32
- package/start-bridge.sh +81 -81
- package/tree-sitter-grammars/README.md +18 -0
- package/tree-sitter-grammars/tree-sitter-c_sharp.wasm +0 -0
- package/tree-sitter-grammars/tree-sitter-go.wasm +0 -0
- package/tree-sitter-grammars/tree-sitter-java.wasm +0 -0
- package/tree-sitter-grammars/tree-sitter-javascript.wasm +0 -0
- package/tree-sitter-grammars/tree-sitter-python.wasm +0 -0
- package/tree-sitter-grammars/tree-sitter-rust.wasm +0 -0
- package/tree-sitter-grammars/tree-sitter-tsx.wasm +0 -0
- package/tree-sitter-grammars/tree-sitter-typescript.wasm +0 -0
- package/wwwroot/_content/MindExecution.Plugins.Admin/css/admin-dashboard.css +546 -546
- package/wwwroot/_content/MindExecution.Plugins.Directory/background.png +0 -0
- package/wwwroot/_content/MindExecution.Plugins.YouTube/css/youtube-search.css +251 -251
- package/wwwroot/_content/MindExecution.Shared/css/mind-map-overrides.css +3789 -3789
- package/wwwroot/_content/MindExecution.Shared/fonts/NotoSansKR-Bold.ttf +0 -0
- package/wwwroot/_content/MindExecution.Shared/fonts/NotoSansKR-Regular.ttf +0 -0
- package/wwwroot/_content/MindExecution.Shared/js/agent-visualization.js +27 -27
- package/wwwroot/_content/MindExecution.Shared/js/background-themes.js +1449 -1449
- package/wwwroot/_content/MindExecution.Shared/js/code-master.js +8316 -8316
- package/wwwroot/_content/MindExecution.Shared/js/file-system-helper.js +338 -338
- package/wwwroot/_content/MindExecution.Shared/js/marked.min.js +69 -69
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-animated-image-preview.js +270 -270
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-automation-edge-motion.js +170 -170
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-board-render-ownership.js +81 -81
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js +10506 -10506
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-core.js.backup +1059 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-hotpath.js +902 -902
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-css3d-manager.js +24637 -24637
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-dev-guards.js +325 -325
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-dnd.js +1491 -1491
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-dnd.js.bak +434 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-glow-shader.js +70 -70
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-image-policy.js +218 -218
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-interactions.js +7078 -7078
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-plan-worker.js +160 -160
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-renderer.js +9958 -9958
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-lod-video-placeholder.js +107 -107
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-logic-workers.js +1004 -1004
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-menu-manager.js +1351 -1351
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-multi-select.js +865 -865
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-node-search-worker.js +554 -554
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-nodes.js +4744 -4744
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-normal-boundary-optimizer.js +624 -624
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-object-manager.js +241 -241
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-object-manager.js.backup +372 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-pipeline.js +2290 -2290
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-remote-codecs.js +202 -202
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-render-plan.js +1971 -1971
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-text-lod-system.js +93 -93
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-texture-factory.js +2391 -2391
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-texture-factory.js.backup +1258 -0
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-video-playback-controls.js +95 -95
- package/wwwroot/_content/MindExecution.Shared/js/mind-map-visibility-worker.js +895 -895
- package/wwwroot/_content/MindExecution.Shared/js/mindmap-toolbar.js +636 -636
- package/wwwroot/_content/MindExecution.Shared/js/native-drop-handler.js +45 -45
- package/wwwroot/_content/MindExecution.Shared/js/plan-master.js +117 -117
- package/wwwroot/_content/MindExecution.Shared/js/renderers/CSS3DRenderer.js +114 -114
- package/wwwroot/_content/MindExecution.Shared/js/texture-worker-manager.js +10 -10
- package/wwwroot/_content/MindExecution.Shared/js/three.min.js +6 -6
- package/wwwroot/_content/MindExecution.Shared/js/token-manager.js +7 -7
- package/wwwroot/_content/MindExecution.Shared/js/troika-bundle.js +6 -6
- package/wwwroot/_content/MindExecution.Shared/js/troika-bundle.js.map +2 -2
- package/wwwroot/_content/MindExecution.Shared/lib/font-awesome/css/all.min.css +8 -8
- package/wwwroot/_content/MindExecution.Shared/models/vocab.txt +30522 -30522
- package/wwwroot/_framework/{Google.Protobuf.33g2gb5is0.dll → Google.Protobuf.9h59ukbel7.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Core.z100xo4mg0.dll → MindExecution.Core.xxsj2s456b.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Kernel.i9cldrx8yc.dll → MindExecution.Kernel.5jofnc0wrd.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Admin.48lzqddb0a.dll → MindExecution.Plugins.Admin.t7m4jnqjg3.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Business.7m8u1q142p.dll → MindExecution.Plugins.Business.6yjlhhavap.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Concept.cl5wmr53od.dll → MindExecution.Plugins.Concept.iikqq5zxu0.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.Directory.slipi39041.dll → MindExecution.Plugins.Directory.c5ribyne4m.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.PlanMaster.qfge05l671.dll → MindExecution.Plugins.PlanMaster.365bbuifr9.dll} +0 -0
- package/wwwroot/_framework/{MindExecution.Plugins.YouTube.tn7v29ut77.dll → MindExecution.Plugins.YouTube.ax415cilpk.dll} +0 -0
- package/wwwroot/_framework/MindExecution.Shared.21e2nvf86u.dll +0 -0
- package/wwwroot/_framework/{MindExecution.Web.rwawrxxk38.dll → MindExecution.Web.ppgm8rey59.dll} +0 -0
- package/wwwroot/_framework/{System.Collections.23yxgetbju.dll → System.Collections.zyvbaq6mpd.dll} +0 -0
- package/wwwroot/_framework/blazor.boot.json +25 -25
- package/wwwroot/_headers +40 -40
- package/wwwroot/_redirects +1 -1
- package/wwwroot/index.html +772 -772
- package/wwwroot/js/marketing-tool.js +180 -180
- package/wwwroot/manifest.webmanifest +23 -23
- package/wwwroot/service-worker-assets.js +109 -81
- package/wwwroot/service-worker.js +33 -33
- package/wwwroot/_framework/MindExecution.Shared.rjqlf0umjn.dll +0 -0
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
(function () {
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
// LOD 설정 - 카메라 Z 기반
|
|
7
|
-
const CAMERA_Z_THRESHOLD = 4000; // z < 4000이면 고해상도, 이상이면 저해상도
|
|
8
|
-
const ENABLE_WEBGL_GLOW = false;
|
|
6
|
+
// LOD 설정 - 카메라 Z 기반
|
|
7
|
+
const CAMERA_Z_THRESHOLD = 4000; // z < 4000이면 고해상도, 이상이면 저해상도
|
|
8
|
+
const ENABLE_WEBGL_GLOW = false;
|
|
9
9
|
|
|
10
10
|
const QUALITY_SCALES = {
|
|
11
11
|
HIGH: 1.0,
|
|
@@ -19,21 +19,21 @@
|
|
|
19
19
|
|
|
20
20
|
// 업데이트 큐 (프레임당 여러 개 처리 가능)
|
|
21
21
|
const updateQueue = [];
|
|
22
|
-
let isProcessing = false;
|
|
23
|
-
let module = null;
|
|
24
|
-
let lastCameraZ = null;
|
|
25
|
-
let lastDesiredLevel = null;
|
|
26
|
-
function isDocumentHidden() {
|
|
27
|
-
return typeof document !== 'undefined' && document.visibilityState === 'hidden';
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function scheduleNonVisualFrame(callback, hiddenDelay = 16) {
|
|
31
|
-
if (typeof requestAnimationFrame === 'function' && !isDocumentHidden()) {
|
|
32
|
-
return requestAnimationFrame(callback);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return setTimeout(() => callback(typeof performance !== 'undefined' ? performance.now() : Date.now()), hiddenDelay);
|
|
36
|
-
}
|
|
22
|
+
let isProcessing = false;
|
|
23
|
+
let module = null;
|
|
24
|
+
let lastCameraZ = null;
|
|
25
|
+
let lastDesiredLevel = null;
|
|
26
|
+
function isDocumentHidden() {
|
|
27
|
+
return typeof document !== 'undefined' && document.visibilityState === 'hidden';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function scheduleNonVisualFrame(callback, hiddenDelay = 16) {
|
|
31
|
+
if (typeof requestAnimationFrame === 'function' && !isDocumentHidden()) {
|
|
32
|
+
return requestAnimationFrame(callback);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return setTimeout(() => callback(typeof performance !== 'undefined' ? performance.now() : Date.now()), hiddenDelay);
|
|
36
|
+
}
|
|
37
37
|
|
|
38
38
|
// ▼▼▼ [Perf] Yield heavy work to idle time ▼▼▼
|
|
39
39
|
function yieldToIdle() {
|
|
@@ -46,26 +46,26 @@
|
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
function deferDispose(tex) {
|
|
50
|
-
if (!tex || typeof tex.dispose !== 'function') return;
|
|
51
|
-
if (typeof requestIdleCallback === 'function') {
|
|
52
|
-
requestIdleCallback(() => { try { tex.dispose(); } catch { } });
|
|
53
|
-
} else {
|
|
54
|
-
setTimeout(() => { try { tex.dispose(); } catch { } }, 0);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function removeGlowMesh(group) {
|
|
59
|
-
if (!group?.getObjectByName) return null;
|
|
60
|
-
const glowMesh = group.getObjectByName('glow');
|
|
61
|
-
if (!glowMesh) return null;
|
|
62
|
-
|
|
63
|
-
group.remove(glowMesh);
|
|
64
|
-
deferDispose(glowMesh.geometry);
|
|
65
|
-
deferDispose(glowMesh.material);
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
// ▲▲▲ [Perf] ▲▲▲
|
|
49
|
+
function deferDispose(tex) {
|
|
50
|
+
if (!tex || typeof tex.dispose !== 'function') return;
|
|
51
|
+
if (typeof requestIdleCallback === 'function') {
|
|
52
|
+
requestIdleCallback(() => { try { tex.dispose(); } catch { } });
|
|
53
|
+
} else {
|
|
54
|
+
setTimeout(() => { try { tex.dispose(); } catch { } }, 0);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function removeGlowMesh(group) {
|
|
59
|
+
if (!group?.getObjectByName) return null;
|
|
60
|
+
const glowMesh = group.getObjectByName('glow');
|
|
61
|
+
if (!glowMesh) return null;
|
|
62
|
+
|
|
63
|
+
group.remove(glowMesh);
|
|
64
|
+
deferDispose(glowMesh.geometry);
|
|
65
|
+
deferDispose(glowMesh.material);
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
// ▲▲▲ [Perf] ▲▲▲
|
|
69
69
|
|
|
70
70
|
/**
|
|
71
71
|
* LOD 시스템 초기화
|
|
@@ -137,18 +137,18 @@
|
|
|
137
137
|
lastDesiredLevel = desiredLevel;
|
|
138
138
|
lastCheckTime = now;
|
|
139
139
|
|
|
140
|
-
if (ENABLE_WEBGL_GLOW) {
|
|
141
|
-
// ★ 모든 노드의 glow 가시성을 카메라 거리에 따라 일괄 업데이트
|
|
142
|
-
const showGlow = desiredLevel === 'HIGH';
|
|
143
|
-
module.nodeObjectsById.forEach((nodeEntry) => {
|
|
144
|
-
const glowMesh = nodeEntry.glObject?.getObjectByName('glow');
|
|
145
|
-
if (glowMesh && glowMesh.visible !== showGlow) {
|
|
146
|
-
glowMesh.visible = showGlow;
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
} else {
|
|
150
|
-
module.nodeObjectsById.forEach((nodeEntry) => removeGlowMesh(nodeEntry.glObject));
|
|
151
|
-
}
|
|
140
|
+
if (ENABLE_WEBGL_GLOW) {
|
|
141
|
+
// ★ 모든 노드의 glow 가시성을 카메라 거리에 따라 일괄 업데이트
|
|
142
|
+
const showGlow = desiredLevel === 'HIGH';
|
|
143
|
+
module.nodeObjectsById.forEach((nodeEntry) => {
|
|
144
|
+
const glowMesh = nodeEntry.glObject?.getObjectByName('glow');
|
|
145
|
+
if (glowMesh && glowMesh.visible !== showGlow) {
|
|
146
|
+
glowMesh.visible = showGlow;
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
} else {
|
|
150
|
+
module.nodeObjectsById.forEach((nodeEntry) => removeGlowMesh(nodeEntry.glObject));
|
|
151
|
+
}
|
|
152
152
|
|
|
153
153
|
// ★ [Perf] Frustum 생성 (한 번만 생성해서 재사용)
|
|
154
154
|
const frustum = new THREE.Frustum();
|
|
@@ -160,9 +160,9 @@
|
|
|
160
160
|
module.nodeObjectsById.forEach((nodeEntry, nodeId) => {
|
|
161
161
|
const model = nodeEntry.model;
|
|
162
162
|
// ▼▼▼ [Fix] markdown, image 타입도 포함 ▼▼▼
|
|
163
|
-
if (!model || (model.contentType !== 'text' && model.contentType !== 'note' && model.contentType !== 'memo' && model.contentType !== 'markdown' && model.contentType !== 'image')) {
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
163
|
+
if (!model || (model.contentType !== 'text' && model.contentType !== 'note' && model.contentType !== 'memo' && model.contentType !== 'markdown' && model.contentType !== 'image')) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
166
|
// ▲▲▲ [Fix] ▲▲▲
|
|
167
167
|
|
|
168
168
|
const currentLevel = nodeEntry.glObject?.userData?.lodLevel;
|
|
@@ -178,10 +178,10 @@
|
|
|
178
178
|
// ★ [Fix] HIGH 모드에서 CSS3D 지원 노드는 화면 밖이라도 LOW(WebGL)로 내리지 않고 HIGH(CSS3D) 유지
|
|
179
179
|
// 이렇게 해야 화면 안으로 들어올 때 WebGL -> CSS3D 전환 깜빡임이 없고, 사용자가 원하는 "무조건 CSS3D"가 됨.
|
|
180
180
|
// (성능 주의: DOM 요소가 많아질 수 있음)
|
|
181
|
-
const supportsCss3d = model.contentType === 'text' ||
|
|
182
|
-
model.contentType === 'note' ||
|
|
183
|
-
model.contentType === 'memo' ||
|
|
184
|
-
model.contentType === 'markdown';
|
|
181
|
+
const supportsCss3d = model.contentType === 'text' ||
|
|
182
|
+
model.contentType === 'note' ||
|
|
183
|
+
model.contentType === 'memo' ||
|
|
184
|
+
model.contentType === 'markdown';
|
|
185
185
|
if (desiredLevel === 'HIGH' && supportsCss3d) {
|
|
186
186
|
targetLevel = 'HIGH';
|
|
187
187
|
} else {
|
|
@@ -218,10 +218,10 @@
|
|
|
218
218
|
|
|
219
219
|
// ★ [Safety] CSS3D 모드(HIGH)라면 WebGL Body/Tail 숨김 강제 (외부 간섭 방지)
|
|
220
220
|
// 다른 로직(선택, 인터랙션 등)에서 실수로 body.visible = true로 되돌리는 경우를 방지
|
|
221
|
-
const supportsCss3d = model.contentType === 'text' ||
|
|
222
|
-
model.contentType === 'note' ||
|
|
223
|
-
model.contentType === 'memo' ||
|
|
224
|
-
model.contentType === 'markdown';
|
|
221
|
+
const supportsCss3d = model.contentType === 'text' ||
|
|
222
|
+
model.contentType === 'note' ||
|
|
223
|
+
model.contentType === 'memo' ||
|
|
224
|
+
model.contentType === 'markdown';
|
|
225
225
|
if (supportsCss3d && targetLevel === 'HIGH' && nodeEntry.currentType === 'CSS') {
|
|
226
226
|
const body = nodeEntry.glObject?.getObjectByName('body');
|
|
227
227
|
if (body && body.visible) body.visible = false;
|
|
@@ -265,11 +265,11 @@
|
|
|
265
265
|
|
|
266
266
|
isProcessing = false;
|
|
267
267
|
|
|
268
|
-
// 남은 작업은 다음 프레임에 처리
|
|
269
|
-
if (updateQueue.length > 0) {
|
|
270
|
-
scheduleNonVisualFrame(() => processQueue());
|
|
271
|
-
}
|
|
272
|
-
}
|
|
268
|
+
// 남은 작업은 다음 프레임에 처리
|
|
269
|
+
if (updateQueue.length > 0) {
|
|
270
|
+
scheduleNonVisualFrame(() => processQueue());
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
273
|
|
|
274
274
|
async function applyTextureQuality(nodeEntry, level) {
|
|
275
275
|
if (!nodeEntry?.glObject || !nodeEntry?.model) return;
|
|
@@ -367,23 +367,23 @@
|
|
|
367
367
|
|
|
368
368
|
} else if (level === 'HIGH') {
|
|
369
369
|
// ▼▼▼ [Changed] HIGH 모드: CSS3D 사용 (텍스처 메모리 절약) ▼▼▼
|
|
370
|
-
// text, note, markdown 타입만 CSS3D 전환
|
|
371
|
-
const supportsCss3d = nodeModel.contentType === 'text' ||
|
|
372
|
-
nodeModel.contentType === 'note' ||
|
|
373
|
-
nodeModel.contentType === 'memo' ||
|
|
374
|
-
nodeModel.contentType === 'markdown';
|
|
370
|
+
// text, note, markdown 타입만 CSS3D 전환
|
|
371
|
+
const supportsCss3d = nodeModel.contentType === 'text' ||
|
|
372
|
+
nodeModel.contentType === 'note' ||
|
|
373
|
+
nodeModel.contentType === 'memo' ||
|
|
374
|
+
nodeModel.contentType === 'markdown';
|
|
375
375
|
|
|
376
376
|
// ▼▼▼ [Fix] cssObject가 없으면 동적 생성 시도 ▼▼▼
|
|
377
377
|
if (supportsCss3d && !nodeEntry.cssObject) {
|
|
378
378
|
console.log(`[TextLOD] Creating cssObject for ${nodeId} (contentType=${nodeModel.contentType})`);
|
|
379
379
|
if (window.MindMapCss3DManager) {
|
|
380
|
-
nodeEntry.cssObject = window.MindMapCss3DManager.createCss3dObject(module, nodeModel);
|
|
381
|
-
if (nodeEntry.cssObject) {
|
|
382
|
-
const glPos = nodeEntry.glObject.position;
|
|
383
|
-
nodeEntry.cssObject.position.set(glPos.x, glPos.y, glPos.z);
|
|
384
|
-
(module.cssScene || module.scene).add(nodeEntry.cssObject);
|
|
385
|
-
console.log(`[TextLOD] ✅ cssObject created and added to scene for ${nodeId}`);
|
|
386
|
-
} else {
|
|
380
|
+
nodeEntry.cssObject = window.MindMapCss3DManager.createCss3dObject(module, nodeModel);
|
|
381
|
+
if (nodeEntry.cssObject) {
|
|
382
|
+
const glPos = nodeEntry.glObject.position;
|
|
383
|
+
nodeEntry.cssObject.position.set(glPos.x, glPos.y, glPos.z);
|
|
384
|
+
(module.cssScene || module.scene).add(nodeEntry.cssObject);
|
|
385
|
+
console.log(`[TextLOD] ✅ cssObject created and added to scene for ${nodeId}`);
|
|
386
|
+
} else {
|
|
387
387
|
console.warn(`[TextLOD] ⚠️ Failed to create cssObject for ${nodeId}`);
|
|
388
388
|
}
|
|
389
389
|
}
|
|
@@ -508,15 +508,15 @@
|
|
|
508
508
|
// ▲▲▲ [Changed] ▲▲▲
|
|
509
509
|
}
|
|
510
510
|
|
|
511
|
-
if (ENABLE_WEBGL_GLOW) {
|
|
512
|
-
// ★ glow 가시성은 level에 따라 설정
|
|
513
|
-
const glowMesh = nodeEntry.glObject.getObjectByName('glow');
|
|
514
|
-
if (glowMesh) {
|
|
515
|
-
glowMesh.visible = (level === 'HIGH');
|
|
516
|
-
}
|
|
517
|
-
} else {
|
|
518
|
-
removeGlowMesh(nodeEntry.glObject);
|
|
519
|
-
}
|
|
511
|
+
if (ENABLE_WEBGL_GLOW) {
|
|
512
|
+
// ★ glow 가시성은 level에 따라 설정
|
|
513
|
+
const glowMesh = nodeEntry.glObject.getObjectByName('glow');
|
|
514
|
+
if (glowMesh) {
|
|
515
|
+
glowMesh.visible = (level === 'HIGH');
|
|
516
|
+
}
|
|
517
|
+
} else {
|
|
518
|
+
removeGlowMesh(nodeEntry.glObject);
|
|
519
|
+
}
|
|
520
520
|
|
|
521
521
|
// LOD 레벨 저장
|
|
522
522
|
nodeEntry.glObject.userData.lodLevel = level;
|
|
@@ -540,8 +540,8 @@
|
|
|
540
540
|
if (!module) return;
|
|
541
541
|
|
|
542
542
|
module.nodeObjectsById.forEach((nodeEntry, nodeId) => {
|
|
543
|
-
if (nodeEntry.model?.contentType === 'text' || nodeEntry.model?.contentType === 'note' || nodeEntry.model?.contentType === 'memo') {
|
|
544
|
-
updateQueue.push({
|
|
543
|
+
if (nodeEntry.model?.contentType === 'text' || nodeEntry.model?.contentType === 'note' || nodeEntry.model?.contentType === 'memo') {
|
|
544
|
+
updateQueue.push({
|
|
545
545
|
nodeId: nodeId,
|
|
546
546
|
nodeEntry: nodeEntry,
|
|
547
547
|
level: level
|
|
@@ -570,8 +570,8 @@
|
|
|
570
570
|
// ★ [New] Optionally queue for immediate regeneration
|
|
571
571
|
if (regenerate && module) {
|
|
572
572
|
const nodeEntry = module.nodeObjectsById.get(nodeId);
|
|
573
|
-
if (nodeEntry && (nodeEntry.model?.contentType === 'text' || nodeEntry.model?.contentType === 'note' || nodeEntry.model?.contentType === 'memo')) {
|
|
574
|
-
const cameraZ = module.camera?.position?.z || 0;
|
|
573
|
+
if (nodeEntry && (nodeEntry.model?.contentType === 'text' || nodeEntry.model?.contentType === 'note' || nodeEntry.model?.contentType === 'memo')) {
|
|
574
|
+
const cameraZ = module.camera?.position?.z || 0;
|
|
575
575
|
const desiredLevel = cameraZ < CAMERA_Z_THRESHOLD ? 'HIGH' : 'LOW';
|
|
576
576
|
|
|
577
577
|
// Reset LOD level to force regeneration
|
|
@@ -612,8 +612,8 @@
|
|
|
612
612
|
}
|
|
613
613
|
|
|
614
614
|
const nodeEntry = module.nodeObjectsById.get(nodeId);
|
|
615
|
-
if (nodeEntry && (nodeEntry.model?.contentType === 'text' || nodeEntry.model?.contentType === 'note' || nodeEntry.model?.contentType === 'memo')) {
|
|
616
|
-
if (nodeEntry.glObject) {
|
|
615
|
+
if (nodeEntry && (nodeEntry.model?.contentType === 'text' || nodeEntry.model?.contentType === 'note' || nodeEntry.model?.contentType === 'memo')) {
|
|
616
|
+
if (nodeEntry.glObject) {
|
|
617
617
|
nodeEntry.glObject.userData.lodLevel = null;
|
|
618
618
|
}
|
|
619
619
|
|