var BABYLON;!(function(i){var n=(function(i){function n(){i.call(this),this.TRANSPARENT=!1,this.FOG=!1,this._keys=Object.keys(this)}return __extends(n,i),n})(i.MaterialDefines),t=(function(t){function e(e,o){t.call(this,e,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 n,this._cachedDefines=new n}return __extends(e,t),e.prototype.needAlphaBlending=function(){return this.opacity<1},e.prototype._checkCache=function(i,n,t){return!n||!(!n._materialDefines||!n._materialDefines.isEqual(this._defines))},e.prototype.isReady=function(n,t){if(this.checkReadyOnlyOnce&&this._wasPreviouslyReady)return!0;var e=this.getScene();if(!this.checkReadyOnEveryCall&&this._renderId===e.getRenderId()&&this._checkCache(e,n,t))return!0;e.getEngine();if(this._defines.reset(),this.opacity<1&&(this._defines.TRANSPARENT=!0),e.fogEnabled&&n&&n.applyFog&&e.fogMode!==i.Scene.FOGMODE_NONE&&this.fogEnabled&&(this._defines.FOG=!0),!this._effect||!this._defines.isEqual(this._cachedDefines)){this._defines.cloneTo(this._cachedDefines),e.resetCachedMaterial();var o=[i.VertexBuffer.PositionKind,i.VertexBuffer.NormalKind],r=e.getEngine().getCaps().standardDerivatives?"grid":"legacygrid",a=this._defines.toString();this._effect=e.getEngine().createEffect(r,o,["worldViewProjection","mainColor","lineColor","gridControl","vFogInfos","vFogColor","world","view"],[],a,null,this.onCompiled,this.onError)}return!!this._effect.isReady()&&(this._renderId=e.getRenderId(),this._wasPreviouslyReady=!0,!0)},e.prototype.bindOnlyWorldMatrix=function(i){var n=this.getScene();this._effect.setMatrix("worldViewProjection",i.multiply(n.getTransformMatrix())),this._effect.setMatrix("world",i),this._effect.setMatrix("view",n.getViewMatrix())},e.prototype.bind=function(n,e){var o=this.getScene();this.bindOnlyWorldMatrix(n),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&&e.applyFog&&o.fogMode!==i.Scene.FOGMODE_NONE&&this._effect.setMatrix("view",o.getViewMatrix()),i.MaterialHelper.BindFogParameters(o,e,this._effect),t.prototype.bind.call(this,n,e)},e.prototype.dispose=function(i){t.prototype.dispose.call(this,i)},e.prototype.clone=function(n){var t=this;return i.SerializationHelper.Clone((function(){return new e(n,t.getScene())}),this)},e.prototype.serialize=function(){var n=i.SerializationHelper.Serialize(this);return n.customType="BABYLON.GridMaterial",n},e.Parse=function(n,t,o){return i.SerializationHelper.Parse((function(){return new e(n.name,t)}),n,t,o)},__decorate([i.serializeAsColor3()],e.prototype,"mainColor",void 0),__decorate([i.serializeAsColor3()],e.prototype,"lineColor",void 0),__decorate([i.serialize()],e.prototype,"gridRatio",void 0),__decorate([i.serialize()],e.prototype,"majorUnitFrequency",void 0),__decorate([i.serialize()],e.prototype,"minorUnitVisibility",void 0),__decorate([i.serialize()],e.prototype,"opacity",void 0),e})(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}";