var __decorate=this&&this.__decorate||function(i,e,t,n){if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)return Reflect.decorate(i,e,t,n);switch(arguments.length){case 2:return i.reduceRight(function(i,e){return e&&e(i)||i},e);case 3:return i.reduceRight(function(i,n){return void(n&&n(e,t))},void 0);case 4:return i.reduceRight(function(i,n){return n&&n(e,t,i)||i},n)}},BABYLON;!function(i){var e=function(i){function e(){i.call(this),this.TRANSPARENT=!1,this.FOG=!1,this._keys=Object.keys(this)}return __extends(e,i),e}(i.MaterialDefines),t=function(t){function n(n,o){t.call(this,n,o),this.mainColor=i.Color3.White(),this.lineColor=i.Color3.Black(),this.gridRatio=1,this.majorUnitFrequency=10,this.minorUnitVisibility=.33,this.opacity=1,this._gridControl=new i.Vector4(this.gridRatio,this.majorUnitFrequency,this.minorUnitVisibility,this.opacity),this._defines=new e,this._cachedDefines=new e}return __extends(n,t),n.prototype.needAlphaBlending=function(){return this.opacity<1},n.prototype._checkCache=function(i,e,t){return e?e._materialDefines&&e._materialDefines.isEqual(this._defines)?!0:!1:!0},n.prototype.isReady=function(e,t){if(this.checkReadyOnlyOnce&&this._wasPreviouslyReady)return!0;var n=this.getScene();if(!this.checkReadyOnEveryCall&&this._renderId===n.getRenderId()&&this._checkCache(n,e,t))return!0;n.getEngine();if(this._defines.reset(),this.opacity<1&&(this._defines.TRANSPARENT=!0),n.fogEnabled&&e&&e.applyFog&&n.fogMode!==i.Scene.FOGMODE_NONE&&this.fogEnabled&&(this._defines.FOG=!0),!this._effect||!this._defines.isEqual(this._cachedDefines)){this._defines.cloneTo(this._cachedDefines),n.resetCachedMaterial();var o=[i.VertexBuffer.PositionKind,i.VertexBuffer.NormalKind],r=n.getEngine().getCaps().standardDerivatives?"grid":"legacygrid",a=this._defines.toString();this._effect=n.getEngine().createEffect(r,o,["worldViewProjection","mainColor","lineColor","gridControl","vFogInfos","vFogColor","world","view"],[],a,null,this.onCompiled,this.onError)}return this._effect.isReady()?(this._renderId=n.getRenderId(),this._wasPreviouslyReady=!0,!0):!1},n.prototype.bindOnlyWorldMatrix=function(i){var e=this.getScene();this._effect.setMatrix("worldViewProjection",i.multiply(e.getTransformMatrix())),this._effect.setMatrix("world",i),this._effect.setMatrix("view",e.getViewMatrix())},n.prototype.bind=function(e,n){var o=this.getScene();this.bindOnlyWorldMatrix(e),o.getCachedMaterial()!==this&&(this._effect.setColor3("mainColor",this.mainColor),this._effect.setColor3("lineColor",this.lineColor),this._gridControl.x=this.gridRatio,this._gridControl.y=Math.round(this.majorUnitFrequency),this._gridControl.z=this.minorUnitVisibility,this._gridControl.w=this.opacity,this._effect.setVector4("gridControl",this._gridControl)),o.fogEnabled&&n.applyFog&&o.fogMode!==i.Scene.FOGMODE_NONE&&this._effect.setMatrix("view",o.getViewMatrix()),i.MaterialHelper.BindFogParameters(o,n,this._effect),t.prototype.bind.call(this,e,n)},n.prototype.dispose=function(i){t.prototype.dispose.call(this,i)},n.prototype.clone=function(e){var t=this;return i.SerializationHelper.Clone(function(){return new n(e,t.getScene())},this)},n.prototype.serialize=function(){var e=i.SerializationHelper.Serialize(this);return e.customType="BABYLON.GridMaterial",e},n.Parse=function(e,t,o){return i.SerializationHelper.Parse(function(){return new n(e.name,t)},e,t,o)},__decorate([i.serializeAsColor3()],n.prototype,"mainColor"),__decorate([i.serializeAsColor3()],n.prototype,"lineColor"),__decorate([i.serialize()],n.prototype,"gridRatio"),__decorate([i.serialize()],n.prototype,"majorUnitFrequency"),__decorate([i.serialize()],n.prototype,"minorUnitVisibility"),__decorate([i.serialize()],n.prototype,"opacity"),n}(i.Material);i.GridMaterial=t}(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.gridVertexShader="precision highp float;\n\nattribute vec3 position;\nattribute vec3 normal;\n\nuniform mat4 worldViewProjection;\nuniform mat4 world;\nuniform mat4 view;\n\nvarying vec3 vPosition;\nvarying vec3 vNormal;\n#include\nvoid main(void) {\n#ifdef FOG\nvec4 worldPos=world*vec4(position,1.0);\n#endif\n#include\ngl_Position=worldViewProjection*vec4(position,1.0);\nvPosition=position;\nvNormal=normal;\n}",BABYLON.Effect.ShadersStore.gridPixelShader="#extension GL_OES_standard_derivatives : enable\n#define SQRT2 1.41421356\n#define PI 3.14159\nprecision highp float;\nuniform vec3 mainColor;\nuniform vec3 lineColor;\nuniform vec4 gridControl;\n\nvarying vec3 vPosition;\nvarying vec3 vNormal;\n#include\nfloat getVisibility(float position) {\n\nfloat majorGridFrequency=gridControl.y;\nif (floor(position+0.5) == floor(position/majorGridFrequency+0.5)*majorGridFrequency)\n{\nreturn 1.0;\n} \nreturn gridControl.z;\n}\nfloat getAnisotropicAttenuation(float differentialLength) {\nconst float maxNumberOfLines=10.0;\nreturn clamp(1.0/(differentialLength+1.0)-1.0/maxNumberOfLines,0.0,1.0);\n}\nfloat isPointOnLine(float position,float differentialLength) {\nfloat fractionPartOfPosition=position-floor(position+0.5); \nfractionPartOfPosition/=differentialLength; \nfractionPartOfPosition=clamp(fractionPartOfPosition,-1.,1.);\nfloat result=0.5+0.5*cos(fractionPartOfPosition*PI); \nreturn result; \n}\nfloat contributionOnAxis(float position) {\nfloat differentialLength=length(vec2(dFdx(position),dFdy(position)));\ndifferentialLength*=SQRT2; \n\nfloat result=isPointOnLine(position,differentialLength);\n\nfloat visibility=getVisibility(position);\nresult*=visibility;\n\nfloat anisotropicAttenuation=getAnisotropicAttenuation(differentialLength);\nresult*=anisotropicAttenuation;\nreturn result;\n}\nfloat normalImpactOnAxis(float x) {\nfloat normalImpact=clamp(1.0-2.8*abs(x*x*x),0.0,1.0);\nreturn normalImpact;\n}\nvoid main(void) {\n\nfloat gridRatio=gridControl.x;\nvec3 gridPos=vPosition/gridRatio;\n\nfloat x=contributionOnAxis(gridPos.x);\nfloat y=contributionOnAxis(gridPos.y);\nfloat z=contributionOnAxis(gridPos.z); \n\nvec3 normal=normalize(vNormal);\nx*=normalImpactOnAxis(normal.x);\ny*=normalImpactOnAxis(normal.y);\nz*=normalImpactOnAxis(normal.z);\n\nfloat grid=clamp(x+y+z,0.,1.);\n\nvec3 color=mix(mainColor,lineColor,grid);\n#ifdef FOG\n#include\n#endif\n#ifdef TRANSPARENT\nfloat opacity=clamp(grid,0.08,gridControl.w);\ngl_FragColor=vec4(color.rgb,opacity);\n#else\n\ngl_FragColor=vec4(color.rgb,1.0);\n#endif\n}",BABYLON.Effect.ShadersStore.legacygridVertexShader="precision highp float;\n\nattribute vec3 position;\n\nuniform mat4 worldViewProjection;\nvoid main(void) {\ngl_Position=worldViewProjection*vec4(position,1.0);\n}",BABYLON.Effect.ShadersStore.legacygridPixelShader="uniform vec3 mainColor;\nuniform vec4 gridControl;\nvoid main(void) {\ngl_FragColor=vec4(1,1,1,0.1);\n#ifdef TRANSPARENT\n\ngl_FragColor=vec4(mainColor.rgb,0.08);\n#else\n\ngl_FragColor=vec4(mainColor.rgb,1.0);\n#endif\n}";