forked from BabylonJS/Website
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbabylon.asciiArtPostProcess.min.js
1 lines (1 loc) · 4.12 KB
/
babylon.asciiArtPostProcess.min.js
1
var BABYLON;!(function(t){var e=(function(e){function i(i,r,n,o){var a=e.call(this,o)||this;a.name=i,a._text==n,a._font==r,a.wrapU=t.Texture.CLAMP_ADDRESSMODE,a.wrapV=t.Texture.CLAMP_ADDRESSMODE;var l=a.getFontHeight(r),c=a.getFontWidth(r);a._charSize=Math.max(l.height,c);var f=Math.ceil(a._charSize*n.length),s=a._charSize;a._texture=o.getEngine().createDynamicTexture(f,s,!1,t.Texture.NEAREST_SAMPLINGMODE);var h=a.getSize(),g=document.createElement("canvas");g.width=h.width,g.height=h.height;var x=g.getContext("2d");x.textBaseline="top",x.font=r,x.fillStyle="white",x.imageSmoothingEnabled=!1;for(var u=0;u<n.length;u++)x.fillText(n[u],u*a._charSize,-l.offset);return a.getScene().getEngine().updateDynamicTexture(a._texture,g,!1,!0),a}return __extends(i,e),Object.defineProperty(i.prototype,"charSize",{get:function(){return this._charSize},enumerable:!0,configurable:!0}),i.prototype.getFontWidth=function(t){var e=document.createElement("canvas"),i=e.getContext("2d");return i.fillStyle="white",i.font=t,i.measureText("W").width},i.prototype.getFontHeight=function(t){var e=document.createElement("canvas"),i=e.getContext("2d");i.fillRect(0,0,e.width,e.height),i.textBaseline="top",i.fillStyle="white",i.font=t,i.fillText("jH|",0,0);for(var r=i.getImageData(0,0,e.width,e.height).data,n=-1,o=-1,a=0;a<e.height;a++)for(var l=0;l<e.width;l++){var c=4*(a*e.width+l);{if(0!==r[c]){n===-1&&(n=a);break}if(l===e.width-1&&n!==-1){o=a,a=e.height;break}}}return{height:o-n+1,offset:n-1}},i.prototype.clone=function(){return new i(this.name,this._font,this._text,this.getScene())},i.Parse=function(e,r){var n=t.SerializationHelper.Parse((function(){return new i(e.name,e.font,e.text,r)}),e,r,null);return n},i})(t.BaseTexture);__decorate([t.serialize("font")],e.prototype,"_font",void 0),__decorate([t.serialize("text")],e.prototype,"_text",void 0),t.AsciiArtFontTexture=e;var i=(function(i){function r(r,n,o){var a=i.call(this,r,"asciiart",["asciiArtFontInfos","asciiArtOptions"],["asciiArtFont"],{width:n.getEngine().getRenderWidth(),height:n.getEngine().getRenderHeight()},n,t.Texture.TRILINEAR_SAMPLINGMODE,n.getEngine(),!0)||this;a.mixToTile=0,a.mixToNormal=0;var l="40px Monospace",c=" `-.'_:,\"=^;<+!*?/cL\\zrs7TivJtC{3F)Il(xZfY5S2eajo14[nuyE]P6V9kXpKwGhqAUbOd8#HRDB0$mgMW&Q%N@";o&&("string"==typeof o?l=o:(l=o.font||l,c=o.characterSet||c,a.mixToTile=o.mixToTile||a.mixToTile,a.mixToNormal=o.mixToNormal||a.mixToNormal)),a._asciiArtFontTexture=new e(r,l,c,n.getScene());var f=a._asciiArtFontTexture.getSize();return a.onApply=function(t){t.setTexture("asciiArtFont",a._asciiArtFontTexture),t.setFloat4("asciiArtFontInfos",a._asciiArtFontTexture.charSize,c.length,f.width,f.height),t.setFloat4("asciiArtOptions",a.width,a.height,a.mixToNormal,a.mixToTile)},a}return __extends(r,i),r})(t.PostProcess);t.AsciiArtPostProcess=i})(BABYLON||(BABYLON={})),BABYLON.Effect.ShadersStore.asciiartPixelShader="\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform sampler2D asciiArtFont;\n\nuniform vec4 asciiArtFontInfos;\nuniform vec4 asciiArtOptions;\n\nfloat getLuminance(vec3 color)\n{\nreturn clamp(dot(color,vec3(0.2126,0.7152,0.0722)),0.,1.);\n}\n\nvoid main(void) \n{\nfloat caracterSize=asciiArtFontInfos.x;\nfloat numChar=asciiArtFontInfos.y-1.0;\nfloat fontx=asciiArtFontInfos.z;\nfloat fonty=asciiArtFontInfos.w;\nfloat screenx=asciiArtOptions.x;\nfloat screeny=asciiArtOptions.y;\nfloat tileX=float(floor((gl_FragCoord.x)/caracterSize))*caracterSize/screenx;\nfloat tileY=float(floor((gl_FragCoord.y)/caracterSize))*caracterSize/screeny;\nvec2 tileUV=vec2(tileX,tileY);\nvec4 tileColor=texture2D(textureSampler,tileUV);\nvec4 baseColor=texture2D(textureSampler,vUV);\nfloat tileLuminance=getLuminance(tileColor.rgb);\nfloat offsetx=(float(floor(tileLuminance*numChar)))*caracterSize/fontx;\nfloat offsety=0.0;\nfloat x=float(mod(gl_FragCoord.x,caracterSize))/fontx;\nfloat y=float(mod(gl_FragCoord.y,caracterSize))/fonty;\nvec4 finalColor=texture2D(asciiArtFont,vec2(offsetx+x,offsety+(caracterSize/fonty-y)));\nfinalColor.rgb*=tileColor.rgb;\nfinalColor.a=1.0;\nfinalColor=mix(finalColor,tileColor,asciiArtOptions.w);\nfinalColor=mix(finalColor,baseColor,asciiArtOptions.z);\ngl_FragColor=finalColor;\n}";