Browse Source

Fixed renderer parameters not updating.

Mr.doob 10 months ago
parent
commit
09b6fd64c2
2 changed files with 44 additions and 1 deletions
  1. 26 1
      devtools/bridge.js
  2. 18 0
      devtools/content-script.js

+ 26 - 1
devtools/bridge.js

@@ -70,6 +70,7 @@ if (!window.__THREE_DEVTOOLS__) {
 
 	// Create and expose the __THREE_DEVTOOLS__ object
 	const devTools = new DevToolsEventTarget();
+	devTools.isVisible = true; // Initialize visibility state
 	Object.defineProperty(window, '__THREE_DEVTOOLS__', {
 		value: devTools,
 		configurable: false,
@@ -353,6 +354,7 @@ if (!window.__THREE_DEVTOOLS__) {
 			try {
 				// Skip updates if devtools is not visible
 				if ( ! devTools.isVisible ) {
+					// console.log('DevTools: Panel not visible, skipping renderer update'); // Optional debug log
 					return;
 				}
 
@@ -363,10 +365,28 @@ if (!window.__THREE_DEVTOOLS__) {
 					return;
 				}
 
+				const oldProperties = data.properties;
 				const newProperties = getRendererProperties( renderer );
-				if ( JSON.stringify( data.properties ) !== JSON.stringify( newProperties ) ) {
+
+				// Compare relevant properties directly for changes
+				const changed = (
+					!oldProperties || // Update if old properties don't exist yet
+					oldProperties.width !== newProperties.width ||
+					oldProperties.height !== newProperties.height ||
+					oldProperties.drawingBufferWidth !== newProperties.drawingBufferWidth ||
+					oldProperties.drawingBufferHeight !== newProperties.drawingBufferHeight ||
+					JSON.stringify(oldProperties.info?.render) !== JSON.stringify(newProperties.info?.render) || // Compare render stats
+					JSON.stringify(oldProperties.info?.memory) !== JSON.stringify(newProperties.info?.memory) // Compare memory stats
+					// Add other comparisons if needed, or use full stringify as fallback:
+					// || JSON.stringify(oldProperties) !== JSON.stringify(newProperties)
+				);
+
+				if ( changed ) {
+					console.log('DevTools: Renderer properties changed, dispatching update for', renderer.uuid); // Log dispatched updates
 					data.properties = newProperties;
 					dispatchEvent( 'update', data );
+				} else {
+					// console.log('DevTools: Renderer properties unchanged for', renderer.uuid); // Optional: for debugging
 				}
 
 			} catch ( error ) {
@@ -451,6 +471,11 @@ if (!window.__THREE_DEVTOOLS__) {
 		else if (message.name === 'visibility' && message.uuid !== undefined) {
 			toggleVisibility(message.uuid, message.visible);
 		}
+		// Handle visibility update from panel (via content script)
+		else if ( message.name === 'panel-visibility' ) {
+			devTools.isVisible = message.value;
+			// console.log( 'DevTools: Visibility set to', devTools.isVisible ); // Optional debug log
+		}
 	});
 
 	// Helper function to find a Three.js object by UUID

+ 18 - 0
devtools/content-script.js

@@ -14,6 +14,8 @@ function injectBridge( target = document ) {
 
 	( target.head || target.documentElement ).appendChild( script );
 
+	return script;
+
 }
 
 // Also inject into any existing iframes
@@ -207,3 +209,19 @@ function handleDevtoolsMessage( message, sender, sendResponse ) {
 window.addEventListener( 'message', handleMainWindowMessage, false );
 window.addEventListener( 'message', handleIframeMessage, false );
 chrome.runtime.onMessage.addListener( handleDevtoolsMessage );
+
+// Listen for messages from the panel
+chrome.runtime.onMessage.addListener( ( message, sender, sendResponse ) => {
+
+	if ( message.name === 'visibility' ) {
+
+		// Forward visibility state to the injected script
+		window.postMessage( {
+			id: 'three-devtools',
+			name: 'panel-visibility', // Use a distinct name
+			value: message.value
+		}, '*' );
+
+	}
+
+} );

粤ICP备19079148号