Browse Source

fixing a small issue with edge
if the code
```javascript
viewer.onInitDoneObservable.add(() => {
});
```
was added in edge, shadows wouldn't render.
the solution is to make sure a model's shadow rendered at least once.

Raanan Weber 7 năm trước cách đây
mục cha
commit
fe0d56fc82
2 tập tin đã thay đổi với 21 bổ sung1 xóa
  1. 14 0
      Viewer/src/model/viewerModel.ts
  2. 7 1
      Viewer/src/viewer/sceneManager.ts

+ 14 - 0
Viewer/src/model/viewerModel.ts

@@ -102,6 +102,8 @@ export class ViewerModel implements IDisposable {
     private _animatables: Array<Animatable> = [];
     private _frameRate: number = 60;
 
+    private _shadowsRenderedAfterLoad: boolean = false;
+
     constructor(protected _viewer: AbstractViewer, modelConfiguration: IModelConfiguration) {
         this.onLoadedObservable = new Observable();
         this.onLoadErrorObservable = new Observable();
@@ -141,6 +143,18 @@ export class ViewerModel implements IDisposable {
         });
     }
 
+    public get shadowsRenderedAfterLoad() {
+        return this._shadowsRenderedAfterLoad;
+    }
+
+    public set shadowsRenderedAfterLoad(rendered: boolean) {
+        if (!rendered) {
+            throw new Error("can only be enabled");
+        } else {
+            this._shadowsRenderedAfterLoad = rendered;
+        }
+    }
+
     /**
      * Is this model enabled?
      */

+ 7 - 1
Viewer/src/viewer/sceneManager.ts

@@ -140,7 +140,13 @@ export class SceneManager {
                 if (scene.animatables && scene.animatables.length > 0) {
                     // make sure all models are loaded
                     updateShadows();
-                } else if (!(this.models.every((model) => model.state === ModelState.COMPLETE && !model.currentAnimation))) {
+                } else if (!(this.models.every((model) => {
+                    if (!model.shadowsRenderedAfterLoad) {
+                        model.shadowsRenderedAfterLoad = true;
+                        return false;
+                    }
+                    return model.state === ModelState.COMPLETE && !model.currentAnimation
+                }))) {
                     updateShadows();
                 }
             });