@@ -71,8 +71,37 @@ export class AScene extends AEntity {
7171 document . documentElement . classList . remove ( 'a-fullscreen' ) ;
7272 }
7373
74- doConnectedCallback ( ) {
74+ /**
75+ * Override connectedCallback to set up renderer and loading screen at 'interactive'.
76+ * This allows the loading screen to appear before a-assets starts loading,
77+ * while systems initialization still waits for 'complete' (via aframeready) to handle deferred scripts.
78+ */
79+ connectedCallback ( ) {
7580 var self = this ;
81+ var readyState = document . readyState ;
82+
83+ // Set up renderer and loading screen at 'interactive' so they're visible during asset loading.
84+ if ( readyState === 'interactive' || readyState === 'complete' ) {
85+ this . setupRendererAndLoadingScreen ( ) ;
86+ } else {
87+ document . addEventListener ( 'readystatechange' , function onReadyStateChange ( ) {
88+ if ( document . readyState !== 'interactive' && document . readyState !== 'complete' ) { return ; }
89+ document . removeEventListener ( 'readystatechange' , onReadyStateChange ) ;
90+ self . setupRendererAndLoadingScreen ( ) ;
91+ } ) ;
92+ }
93+
94+ // Wait for 'complete' (aframeready) before initializing systems.
95+ super . connectedCallback ( ) ;
96+ }
97+
98+ /**
99+ * Set up renderer and loading screen early so they're visible during asset loading.
100+ */
101+ setupRendererAndLoadingScreen ( ) {
102+ if ( this . rendererSetup ) { return ; }
103+ this . rendererSetup = true ;
104+
76105 var embedded = this . hasAttribute ( 'embedded' ) ;
77106
78107 // Default components.
@@ -81,7 +110,6 @@ export class AScene extends AEntity {
81110 this . setAttribute ( 'screenshot' , '' ) ;
82111 this . setAttribute ( 'xr-mode-ui' , '' ) ;
83112 this . setAttribute ( 'device-orientation-permission-ui' , '' ) ;
84- super . doConnectedCallback ( ) ;
85113
86114 // Renderer initialization
87115 setupCanvas ( this ) ;
@@ -90,6 +118,16 @@ export class AScene extends AEntity {
90118
91119 this . resize ( ) ;
92120 if ( ! embedded ) { this . addFullScreenStyles ( ) ; }
121+ }
122+
123+ doConnectedCallback ( ) {
124+ var self = this ;
125+
126+ // Renderer may already be set up from connectedCallback at 'interactive'.
127+ // If not, set it up now.
128+ this . setupRendererAndLoadingScreen ( ) ;
129+
130+ super . doConnectedCallback ( ) ;
93131 initPostMessageAPI ( this ) ;
94132
95133 initMetaTags ( this ) ;
0 commit comments