소스 검색

support test

Benjamin Guignabert 8 년 전
부모
커밋
07fca6b14b

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6180 - 6175
dist/preview release/babylon.d.ts


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 6180 - 6175
dist/preview release/babylon.module.d.ts


+ 9 - 0
src/Materials/Textures/babylon.multiRenderTarget.ts

@@ -38,6 +38,11 @@ module BABYLON {
 
             super(name, size, scene, generateMipMaps, doNotChangeAspectRatio);
 
+            if (!this.isSupported) {
+                this.dispose();
+                return;
+            }
+
             var types = [];
             var samplingModes = [];
 
@@ -114,6 +119,10 @@ module BABYLON {
         }
 
         public releaseInternalTextures(): void {
+            if (!this._webGLTextures) {
+                return;
+            }
+
             for (var i = this._webGLTextures.length - 1; i >= 0; i--) {
                 if (this._webGLTextures[i] !== undefined) {
                     this.getScene().getEngine().releaseInternalTexture(this._webGLTextures[i]);

+ 14 - 0
src/PostProcess/babylon.ssao2RenderingPipeline.ts

@@ -120,6 +120,15 @@
         @serialize()
         public base: number = 0.5;
 
+        /**
+        *  Support test.
+        * @type {boolean}
+        */
+        public get isSupported(): boolean {
+            var engine = this._scene.getEngine();
+            return engine.webGLVersion > 1;
+        }
+
         private _scene: Scene;
         private _depthTexture: Texture;
         private _normalTexture: Texture;
@@ -148,6 +157,11 @@
 
             this._scene = scene;
 
+            if (!this.isSupported) {
+                Tools.Error("SSAO 2 needs WebGL 2 support.");
+                return;
+            }
+
             var ssaoRatio = ratio.ssaoRatio || ratio;
             var blurRatio = ratio.blurRatio || ratio;
             this._ratio = {

+ 8 - 5
src/Rendering/babylon.geometryBufferRenderer.ts

@@ -15,17 +15,25 @@ module BABYLON {
             this._multiRenderTarget.renderList = meshes;
         }
 
+        public get isSupported(): boolean {
+            return this._multiRenderTarget.isSupported;
+        }
+
         constructor(scene: Scene, ratio: number = 1) {
             this._scene = scene;
             var engine = scene.getEngine();
 
             // Render target
             this._multiRenderTarget = new MultiRenderTarget("gBuffer", { width: engine.getRenderWidth() * ratio, height: engine.getRenderHeight() * ratio }, 2, this._scene, { generateMipMaps : false, generateDepthTexture: true });
+            if (!this.isSupported) {
+                return null;
+            }
             this._multiRenderTarget.wrapU = Texture.CLAMP_ADDRESSMODE;
             this._multiRenderTarget.wrapV = Texture.CLAMP_ADDRESSMODE;
             this._multiRenderTarget.refreshRate = 1;
             this._multiRenderTarget.renderParticles = false;
             this._multiRenderTarget.renderList = null;
+
             
             // set default depth value to 1.0 (far away)
             this._multiRenderTarget.onClearObservable.add((engine: Engine) => {
@@ -92,11 +100,6 @@ module BABYLON {
 
         }
 
-        public get isSupported(): boolean {
-            var engine = this._scene.getEngine();
-            return (engine.webGLVersion > 1) || engine.getCaps().drawBuffersExtension;
-        }
-
         public isReady(subMesh: SubMesh, useInstances: boolean): boolean {
             var material: any = subMesh.getMaterial();
 

+ 3 - 0
src/babylon.scene.ts

@@ -3145,6 +3145,9 @@
             }
 
             this._geometryBufferRenderer = new GeometryBufferRenderer(this, ratio);
+            if (!this._geometryBufferRenderer.isSupported) {
+                this._geometryBufferRenderer = null;
+            }
 
             return this._geometryBufferRenderer;
         }