Forráskód Böngészése

fix: aaa考虑进4dkk的页面 iframe

xzw 1 éve
szülő
commit
6735b16588
1 módosított fájl, 32 hozzáadás és 7 törlés
  1. 32 7
      src/sdk/cover/index.js

+ 32 - 7
src/sdk/cover/index.js

@@ -41,7 +41,7 @@ export const enter = (dom, isLocal) => {
     
     
     {
-        
+        let index = 1; 
         //let setDisplay()
         
         if(!Potree.isIframeChild){
@@ -49,19 +49,44 @@ export const enter = (dom, isLocal) => {
             /* viewer.addEventListener('createIframe',(e)=>{//创建了子页面 
             }) */
             window.winIndex = 0;
-            let index = 1; 
-            window.iframeCreated = function(child){
-              
+            
+            window.iframeCreated = function(iframe){
+                let child = iframe.contentWindow
+                child.winIndex = index++
                 //案件里视图提取页面子页面覆盖了父级页面,父级的模型可以隐藏以释放内存
-                child.beforeDestroy = function(){
-                    child.winIndex = index++
-                    
+                child.beforeDestroy = function(){ 
                     console.log('window.beforeDestroy', child.winIndex)
                     
                     child.viewer && child.viewer.setDisplay(false)
                     //如果是四维看看的场景,先不管了,页面被销毁应该就没了吧
                     
                     viewer.setDisplay(true )//恢复主页的模型显示
+                    
+                    
+                    if(!child.viewer){ 
+                        let player = child.__sdk.core.get('Player')
+                        /* let runtime = player.model._3dTilesRuntime 
+                        let tileset = runtime.getTileset() 
+                        tileset._cache.trim(); //使下一次update时dispose所有不可见的tiles
+                        let sceneRenderer = child.__sdk.core.get('SceneRenderer')
+                        player.model.visible = false
+                        runtime.update(16, sceneRenderer.renderer, sceneRenderer.camera, true)  //没用,为何_trimTiles的while无法进入
+                         */
+                        player.model.traverse(e=>{
+                            e.geometry && e.geometry.dispose()
+                            if(e.material){
+                                e.material.map && e.material.map.dispose()
+                                if(e.material.uniforms && e.material.uniforms.map && e.material.uniforms.map.value){
+                                    e.material.uniforms.map.value.dispose()
+                                }
+                            }
+                        }) //效果甚微
+                        
+                        /* let sceneRenderer = child.__sdk.core.get('SceneRenderer')
+                        sceneRenderer.renderer.render(sceneRenderer.scene, sceneRenderer.camera)
+                         */
+                    }
+                    
                 }