Browse Source

Merge pull request #7817 from Popov72/csm-add-issupported

CSM: Add a IsSupported method and log an error instead of…
mergify[bot] 5 years ago
parent
commit
2ffb9181dd
2 changed files with 18 additions and 2 deletions
  1. 1 0
      dist/preview release/what's new.md
  2. 17 2
      src/Lights/Shadows/cascadedShadowGenerator.ts

+ 1 - 0
dist/preview release/what's new.md

@@ -12,6 +12,7 @@
 - Scale on one axis for `BoundingBoxGizmo` ([cedricguillemet](https://github.com/cedricguillemet))
 
 - Simplified code contributions by fully automating the dev setup with gitpod ([nisarhassan12](https://github.com/nisarhassan12))
+- Add a `CascadedShadowMap.IsSupported` method and log an error instead of throwing an exception when CSM is not supported ([Popov72](https://github.com/Popov72))
 
 ### Engine
 

+ 17 - 2
src/Lights/Shadows/cascadedShadowGenerator.ts

@@ -21,6 +21,9 @@ import { BoundingInfo } from '../../Culling/boundingInfo';
 import { DepthRenderer } from '../../Rendering/depthRenderer';
 import { DepthReducer } from '../../Misc/depthReducer';
 
+import { Logger } from "../../Misc/logger";
+import { EngineStore } from '../../Engines/engineStore';
+
 interface ICascade {
     prevBreakDistance: number;
     breakDistance: number;
@@ -684,6 +687,17 @@ export class CascadedShadowGenerator extends ShadowGenerator {
         }
     }
 
+    /**
+    *  Support test.
+    */
+    public static get IsSupported(): boolean {
+        var engine = EngineStore.LastCreatedEngine;
+        if (!engine) {
+            return false;
+        }
+        return engine.webGLVersion != 1;
+    }
+
     /** @hidden */
     public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {
         throw _DevTools.WarnImport("ShadowGeneratorSceneComponent");
@@ -701,8 +715,9 @@ export class CascadedShadowGenerator extends ShadowGenerator {
     constructor(mapSize: number, light: DirectionalLight, usefulFloatFirst?: boolean) {
         super(mapSize, light, usefulFloatFirst);
 
-        if (this._scene.getEngine().webGLVersion == 1) {
-            throw "CSM can only be used in WebGL2";
+        if (!CascadedShadowGenerator.IsSupported) {
+            Logger.Error("CascadedShadowMap needs WebGL 2 support.");
+            return;
         }
 
         this.usePercentageCloserFiltering = true;