@@ -40,18 +40,7 @@ if (!window.__THREE_DEVTOOLS__) {
40
40
}
41
41
42
42
reset ( ) {
43
- console . log ( 'DevTools: Resetting state' ) ;
44
-
45
- // Clear all monitoring intervals
46
- this . objects . forEach ( ( obj , uuid ) => {
47
- if ( obj . isRenderer || obj . isScene ) {
48
- const interval = monitoringIntervals . get ( obj ) ;
49
- if ( interval ) {
50
- clearInterval ( interval ) ;
51
- monitoringIntervals . delete ( obj ) ;
52
- }
53
- }
54
- } ) ;
43
+ // console.log('DevTools: Resetting state');
55
44
56
45
// Clear objects map
57
46
this . objects . clear ( ) ;
@@ -70,17 +59,13 @@ if (!window.__THREE_DEVTOOLS__) {
70
59
71
60
// Create and expose the __THREE_DEVTOOLS__ object
72
61
const devTools = new DevToolsEventTarget ( ) ;
73
- devTools . isVisible = true ; // Initialize visibility state
74
62
Object . defineProperty ( window , '__THREE_DEVTOOLS__' , {
75
63
value : devTools ,
76
64
configurable : false ,
77
65
enumerable : true ,
78
66
writable : false
79
67
} ) ;
80
68
81
- // Store monitoring intervals without polluting objects
82
- const monitoringIntervals = new WeakMap ( ) ;
83
-
84
69
// Declare arrays for tracking observed objects
85
70
const observedScenes = [ ] ;
86
71
const observedRenderers = [ ] ;
@@ -209,7 +194,7 @@ if (!window.__THREE_DEVTOOLS__) {
209
194
210
195
// Listen for Three.js registration
211
196
devTools . addEventListener ( 'register' , ( event ) => {
212
- console . log ( 'DevTools: Three.js registered with revision:' , event . detail . revision ) ;
197
+ // console.log('DevTools: Three.js registered with revision:', event.detail.revision);
213
198
dispatchEvent ( 'register' , event . detail ) ;
214
199
} ) ;
215
200
@@ -221,34 +206,28 @@ if (!window.__THREE_DEVTOOLS__) {
221
206
return ;
222
207
}
223
208
224
- console . log ( 'DevTools: Received object:' , {
225
- type : obj . type || obj . constructor . name ,
226
- isWebGLRenderer : obj . isWebGLRenderer === true ,
227
- hasUUID : ! ! obj . uuid
228
- } ) ;
229
-
230
209
// Generate UUID if needed (especially for WebGLRenderer)
231
210
if ( ! obj . uuid ) {
232
211
obj . uuid = generateUUID ( ) ;
233
- console . log ( 'DevTools: Generated UUID for object:' , obj . uuid ) ;
212
+ // console.log('DevTools: Generated UUID for object:', obj.uuid);
234
213
}
235
214
236
215
// Skip if already registered
237
216
if ( devTools . objects . has ( obj . uuid ) ) {
238
- console . log ( 'DevTools: Object already registered:' , obj . uuid ) ;
217
+ // console.log('DevTools: Object already registered:', obj.uuid);
239
218
return ;
240
219
}
241
220
242
- console . log ( 'DevTools: Found Three.js object:' , obj . type || obj . constructor . name ) ;
221
+ // console.log('DevTools: Found Three.js object:', obj.type || obj.constructor.name);
243
222
244
223
// Get data for this object
245
224
const data = getObjectData ( obj ) ;
246
225
if ( data ) {
247
- console . log ( 'DevTools: Got object data:' , data ) ;
226
+ // console.log('DevTools: Got object data:', data);
248
227
249
228
// If this is a renderer, start periodic updates
250
229
if ( obj . isWebGLRenderer ) {
251
- console . log ( 'DevTools: Starting periodic updates for renderer:' , obj . uuid ) ;
230
+ // console.log('DevTools: Starting periodic updates for renderer:', obj.uuid);
252
231
data . properties = getRendererProperties ( obj ) ;
253
232
observedRenderers . push ( obj ) ;
254
233
startRendererMonitoring ( obj ) ;
@@ -260,7 +239,7 @@ if (!window.__THREE_DEVTOOLS__) {
260
239
261
240
// If this is a scene, store the reference and traverse its children
262
241
if ( obj . isScene ) {
263
- console . log ( 'DevTools: Traversing scene children' ) ;
242
+ // console.log('DevTools: Traversing scene children');
264
243
265
244
// Store the scene reference locally
266
245
observedScenes . push ( obj ) ;
@@ -293,13 +272,15 @@ if (!window.__THREE_DEVTOOLS__) {
293
272
// Function to get renderer properties
294
273
function getRendererProperties ( renderer ) {
295
274
const webglInfo = getWebGLInfo ( renderer ) ;
275
+ const context = renderer . getContext ? renderer . getContext ( ) : null ;
276
+ const contextAttributes = context ? context . getContextAttributes ( ) : null ;
296
277
return {
297
278
width : renderer . domElement ? renderer . domElement . clientWidth : 0 ,
298
279
height : renderer . domElement ? renderer . domElement . clientHeight : 0 ,
299
280
drawingBufferWidth : renderer . domElement ? renderer . domElement . width : 0 ,
300
281
drawingBufferHeight : renderer . domElement ? renderer . domElement . height : 0 ,
301
- alpha : renderer . alpha || false ,
302
- antialias : renderer . antialias || false ,
282
+ alpha : contextAttributes ? contextAttributes . alpha : false ,
283
+ antialias : contextAttributes ? contextAttributes . antialias : false ,
303
284
autoClear : renderer . autoClear ,
304
285
autoClearColor : renderer . autoClearColor ,
305
286
autoClearDepth : renderer . autoClearDepth ,
@@ -343,25 +324,11 @@ if (!window.__THREE_DEVTOOLS__) {
343
324
344
325
// Function to start renderer monitoring
345
326
function startRendererMonitoring ( renderer ) {
346
- // Clear any existing monitoring
347
- const existingInterval = monitoringIntervals . get ( renderer ) ;
348
- if ( existingInterval ) {
349
- clearInterval ( existingInterval ) ;
350
- }
351
-
352
327
// Function to monitor renderer properties
353
328
function monitorRendererProperties ( ) {
354
329
try {
355
- // Skip updates if devtools is not visible
356
- if ( ! devTools . isVisible ) {
357
- // console.log('DevTools: Panel not visible, skipping renderer update'); // Optional debug log
358
- return ;
359
- }
360
-
361
330
const data = devTools . objects . get ( renderer . uuid ) ;
362
331
if ( ! data ) {
363
- clearInterval ( intervalId ) ;
364
- monitoringIntervals . delete ( renderer ) ;
365
332
return ;
366
333
}
367
334
@@ -377,24 +344,18 @@ if (!window.__THREE_DEVTOOLS__) {
377
344
oldProperties . drawingBufferHeight !== newProperties . drawingBufferHeight ||
378
345
JSON . stringify ( oldProperties . info ?. render ) !== JSON . stringify ( newProperties . info ?. render ) || // Compare render stats
379
346
JSON . stringify ( oldProperties . info ?. memory ) !== JSON . stringify ( newProperties . info ?. memory ) // Compare memory stats
380
- // Add other comparisons if needed, or use full stringify as fallback:
381
- // || JSON.stringify(oldProperties) !== JSON.stringify(newProperties)
382
347
) ;
383
348
384
349
if ( changed ) {
385
- console . log ( 'DevTools: Renderer properties changed, dispatching update for' , renderer . uuid ) ; // Log dispatched updates
386
350
data . properties = newProperties ;
387
351
dispatchEvent ( 'update' , data ) ;
388
352
} else {
389
- // console.log('DevTools: Renderer properties unchanged for', renderer.uuid); // Optional: for debugging
390
353
}
391
354
392
355
} catch ( error ) {
393
356
394
357
// If we get an "Extension context invalidated" error, stop monitoring
395
358
if ( error . message . includes ( 'Extension context invalidated' ) ) {
396
- clearInterval ( intervalId ) ;
397
- monitoringIntervals . delete ( renderer ) ;
398
359
devTools . reset ( ) ;
399
360
return ;
400
361
}
@@ -404,12 +365,11 @@ if (!window.__THREE_DEVTOOLS__) {
404
365
}
405
366
}
406
367
407
- const intervalId = setInterval ( monitorRendererProperties , 1000 ) ;
408
- monitoringIntervals . set ( renderer , intervalId ) ;
368
+ // TODO: Trigger monitorRendererProperties some other way, e.g., on demand or via events?
409
369
}
410
370
411
371
// Start periodic renderer checks
412
- console . log ( 'DevTools: Starting periodic renderer checks' ) ;
372
+ // console.log('DevTools: Starting periodic renderer checks');
413
373
414
374
// Function to check if bridge is available
415
375
function checkBridgeAvailability ( ) {
@@ -471,10 +431,14 @@ if (!window.__THREE_DEVTOOLS__) {
471
431
else if ( message . name === 'visibility' && message . uuid !== undefined ) {
472
432
toggleVisibility ( message . uuid , message . visible ) ;
473
433
}
474
- // Handle visibility update from panel (via content script)
475
- else if ( message . name === 'panel-visibility' ) {
476
- devTools . isVisible = message . value ;
477
- // console.log( 'DevTools: Visibility set to', devTools.isVisible ); // Optional debug log
434
+ // Handle request for initial state from panel
435
+ else if ( message . name === 'request-initial-state' ) {
436
+ // console.log('DevTools: Received request-initial-state, resending objects...');
437
+ // Resend all known objects to the panel
438
+ devTools . objects . forEach ( ( objectData ) => {
439
+ dispatchEvent ( 'observe' , objectData ) ;
440
+ } ) ;
441
+ // console.log('DevTools: Finished resending objects.');
478
442
}
479
443
} ) ;
480
444
@@ -569,64 +533,15 @@ if (!window.__THREE_DEVTOOLS__) {
569
533
570
534
// Function to start scene monitoring
571
535
function startSceneMonitoring ( scene ) {
572
- // Clear any existing monitoring
573
- const existingInterval = monitoringIntervals . get ( scene ) ;
574
- if ( existingInterval ) {
575
- clearInterval ( existingInterval ) ;
576
- }
577
-
578
- // Set up monitoring interval
579
- const intervalId = setInterval ( ( ) => {
580
- try {
581
- // Clear existing objects except renderers and the scene itself
582
- devTools . objects . forEach ( ( obj , uuid ) => {
583
- if ( ! obj . isRenderer && uuid !== scene . uuid ) {
584
- devTools . objects . delete ( uuid ) ;
585
- dispatchEvent ( 'remove' , { uuid } ) ;
586
- }
587
- } ) ;
588
-
589
- // Traverse and recreate the entire object list
590
- function traverseScene ( object ) {
591
- const objectData = getObjectData ( object ) ;
592
- if ( objectData ) {
593
- devTools . objects . set ( object . uuid , objectData ) ;
594
- dispatchEvent ( 'observe' , objectData ) ;
595
-
596
- // Traverse children
597
- object . children . forEach ( child => traverseScene ( child ) ) ;
598
- }
599
- }
600
-
601
- // Start traversal from scene root
602
- traverseScene ( scene ) ;
603
- } catch ( error ) {
604
- // If we get an "Extension context invalidated" error, stop monitoring
605
- if ( error . message . includes ( 'Extension context invalidated' ) ) {
606
- clearInterval ( intervalId ) ;
607
- monitoringIntervals . delete ( scene ) ;
608
- devTools . reset ( ) ;
609
- return ;
610
- }
611
- console . warn ( 'DevTools: Error in scene monitoring:' , error ) ;
536
+ // Keep track of known object UUIDs for this scene (excluding renderers)
537
+ const knownObjectUUIDs = new Set ( ) ;
538
+ devTools . objects . forEach ( ( obj , uuid ) => {
539
+ if ( ! obj . isRenderer ) {
540
+ knownObjectUUIDs . add ( uuid ) ;
612
541
}
613
- } , 1000 ) ;
614
-
615
- monitoringIntervals . set ( scene , intervalId ) ;
542
+ } ) ;
616
543
617
- // Clean up monitoring when scene is disposed
618
- const originalDispose = scene . dispose ;
619
- scene . dispose = function ( ) {
620
- const intervalId = monitoringIntervals . get ( this ) ;
621
- if ( intervalId ) {
622
- clearInterval ( intervalId ) ;
623
- monitoringIntervals . delete ( this ) ;
624
- }
625
-
626
- if ( originalDispose ) {
627
- originalDispose . call ( this ) ;
628
- }
629
- } ;
544
+ // TODO: Trigger scene updates some other way?
630
545
}
631
546
632
547
// Function to manually reload scene objects
@@ -675,6 +590,6 @@ if (!window.__THREE_DEVTOOLS__) {
675
590
676
591
} else {
677
592
678
- console . log ( 'DevTools: Bridge already initialized' ) ;
593
+ // console.log('DevTools: Bridge already initialized');
679
594
680
595
}
0 commit comments