-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathpatch.diff
More file actions
108 lines (105 loc) · 3.18 KB
/
patch.diff
File metadata and controls
108 lines (105 loc) · 3.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
--- renderer.js
+++ renderer.js
@@ -7387,51 +7387,6 @@
// 1. Implement thumbnail caching system
const thumbnailCache = new Map();
- // 2. Optimize renderer settings and reuse renderer instance
- let sharedRenderer = null;
- let sharedCanvas = null;
- const MAX_CONTEXT_REUSE_COUNT = 100; // Number of renders before recreating context
- let contextUseCount = 0;
-
- function getSharedRenderer() {
- if (!sharedRenderer || contextUseCount >= MAX_CONTEXT_REUSE_COUNT) {
- // Clean up existing resources before creating new ones
- if (sharedRenderer) {
- sharedRenderer.dispose();
- sharedRenderer.forceContextLoss();
- sharedRenderer = null;
- }
- if (sharedCanvas) {
- sharedCanvas.remove();
- sharedCanvas = null;
- }
-
- // Create new canvas and renderer
- sharedCanvas = document.createElement('canvas');
- sharedCanvas.width = 250;
- sharedCanvas.height = 250;
-
- sharedRenderer = new THREE.WebGLRenderer({
- antialias: false,
- alpha: true,
- canvas: sharedCanvas,
- powerPreference: 'low-power',
- preserveDrawingBuffer: true // Add this for better context management
- });
-
- contextUseCount = 0;
-
- // Add context loss handler
- sharedCanvas.addEventListener('webglcontextlost', (event) => {
- event.preventDefault();
- sharedRenderer.dispose();
- sharedRenderer = null;
- sharedCanvas = null;
- }, false);
- }
- contextUseCount++;
- return sharedRenderer;
- }
-
// extract3MFThumbnail moved to top level for generateThumbnail access
async function extract3MFSTL(filePath) {
@@ -12278,6 +12233,52 @@
}
}
+// 2. Optimize renderer settings and reuse renderer instance
+let sharedRenderer = null;
+let sharedCanvas = null;
+const MAX_CONTEXT_REUSE_COUNT = 100; // Number of renders before recreating context
+let contextUseCount = 0;
+
+function getSharedRenderer() {
+ if (!sharedRenderer || contextUseCount >= MAX_CONTEXT_REUSE_COUNT) {
+ // Clean up existing resources before creating new ones
+ if (sharedRenderer) {
+ sharedRenderer.dispose();
+ sharedRenderer.forceContextLoss();
+ sharedRenderer = null;
+ }
+ if (sharedCanvas) {
+ sharedCanvas.remove();
+ sharedCanvas = null;
+ }
+
+ // Create new canvas and renderer
+ sharedCanvas = document.createElement('canvas');
+ sharedCanvas.width = 250;
+ sharedCanvas.height = 250;
+
+ sharedRenderer = new THREE.WebGLRenderer({
+ antialias: false,
+ alpha: true,
+ canvas: sharedCanvas,
+ powerPreference: 'low-power',
+ preserveDrawingBuffer: true // Add this for better context management
+ });
+
+ contextUseCount = 0;
+
+ // Add context loss handler
+ sharedCanvas.addEventListener('webglcontextlost', (event) => {
+ event.preventDefault();
+ sharedRenderer.dispose();
+ sharedRenderer = null;
+ sharedCanvas = null;
+ }, false);
+ }
+ contextUseCount++;
+ return sharedRenderer;
+}
+
async function renderModelToPNG(filePath, container, existingThumbnail) {
const startTime = Date.now();
console.log(`[DEBUG] renderModelToPNG: Start rendering ${filePath}`);