UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 4.69 kB
import{_ as e}from"../../../../chunks/tslib.es6.js";import r from"../../../../core/Accessor.js";import{abortMaybe as t,isSome as s,disposeMaybe as i,isNone as a}from"../../../../core/maybe.js";import{throwIfAborted as o,isAborted as h}from"../../../../core/promiseUtils.js";import{property as n}from"../../../../core/accessorSupport/decorators/property.js";import"../../../../core/accessorSupport/ensureType.js";import"../../../../core/arrayUtils.js";import{subclass as l}from"../../../../core/accessorSupport/decorators/subclass.js";import{requestImage as u}from"../../../../support/requestImageUtils.js";import{ShaderTechniqueConfiguration as d}from"../core/shaderTechnique/ShaderTechniqueConfiguration.js";import{BlendWeightsTechnique as c}from"./BlendWeightsTechnique.js";import{BlurTechnique as _}from"./BlurTechnique.js";import{EdgeDetectTechnique as p}from"./EdgeDetectTechnique.js";import{createScreenSizeTriangleVAO as m}from"./glUtil3D.js";import{SMAAPassParameters as T}from"../shaders/SMAAPassParameters.js";import{TextureSamplingMode as b,PixelFormat as g,TargetType as E,DepthStencilTargetType as f,TextureType as q,PixelType as x,TextureWrapMode as R,ClearBufferBit as A,PrimitiveType as P}from"../../../webgl/enums.js";import{FramebufferObject as C}from"../../../webgl/FramebufferObject.js";import{Texture as w}from"../../../webgl/Texture.js";let j=class extends r{constructor(e,r){super({}),this._rctx=e,this._techniqueRep=r,this._passParameters=new T,this._isEnabled=!1}normalizeCtorArgs(){return{}}dispose(){this._abortController=t(this._abortController),this.disable()}_loadResources(e){if(s(this._abortController))return!1;if(s(this._passParameters.searchTexture))return!0;this._abortController=new AbortController;const r=this._abortController.signal;return import("./SmaaRenderPassData.js").then((e=>this._loadTextures(e,r))).then((()=>e())).finally((()=>this._abortController=null)),!1}_loadTextures(e,r){return o(r),Promise.all([this._loadTextureFromBase64(e.areaTexture,b.LINEAR,g.RGB),this._loadTextureFromBase64(e.searchTexure,b.NEAREST,g.LUMINANCE)]).then((([e,t])=>{h(r)?(e.dispose(),t.dispose(),o(r)):(this._passParameters.areaTexture=e,this._passParameters.searchTexture=t)}))}get updating(){return s(this._abortController)}enable(e){if(this._isEnabled)return!0;if(!this._edgeDetectTechnique||!this._blendWeightsTechnique||!this._blurTechnique){const e=new d;this._edgeDetectTechnique=this._techniqueRep.releaseAndAcquire(p,e,this._edgeDetectTechnique),this._blendWeightsTechnique=this._techniqueRep.releaseAndAcquire(c,e,this._blendWeightsTechnique),this._blurTechnique=this._techniqueRep.releaseAndAcquire(_,e,this._blurTechnique)}return!!this._loadResources(e)&&(this._vao=m(this._rctx),this._passParameters.edges=new C(this._rctx,{colorTarget:E.TEXTURE,depthStencilTarget:f.NONE},{target:q.TEXTURE_2D,pixelFormat:g.RGB,dataType:x.UNSIGNED_BYTE,samplingMode:b.LINEAR,wrapMode:R.CLAMP_TO_EDGE,width:4,height:4}),this._passParameters.blend=new C(this._rctx,{colorTarget:E.TEXTURE,depthStencilTarget:f.NONE},{target:q.TEXTURE_2D,pixelFormat:g.RGBA,dataType:x.UNSIGNED_BYTE,samplingMode:b.LINEAR,wrapMode:R.CLAMP_TO_EDGE,width:4,height:4}),this._isEnabled=!0,!0)}disable(){this._isEnabled&&(this._vao=i(this._vao),this._passParameters.areaTexture=i(this._passParameters.areaTexture),this._passParameters.searchTexture=i(this._passParameters.searchTexture),this._passParameters.blend=i(this._passParameters.blend),this._passParameters.edges=i(this._passParameters.edges),this._isEnabled=!1)}get _validPassParameters(){return this._isEnabled?this._passParameters:null}render(e){const r=this._validPassParameters;if(a(r))return;r.colorTexture=e;const t=this._rctx,s=t.getBoundFramebufferObject(),i=e.descriptor.width,o=e.descriptor.height;t.bindVAO(this._vao),t.setViewport(0,0,i,o),r.edges.resize(i,o),t.bindFramebuffer(r.edges),t.setClearColor(0,0,0,1),t.clear(A.COLOR_BUFFER_BIT),t.bindTechnique(this._edgeDetectTechnique,r,null),t.drawArrays(P.TRIANGLES,0,3),r.blend.resize(i,o),t.bindFramebuffer(r.blend),t.setClearColor(0,0,1,1),t.clear(A.COLOR_BUFFER_BIT),t.bindTechnique(this._blendWeightsTechnique,r,null),t.drawArrays(P.TRIANGLES,0,3),t.bindFramebuffer(s),t.setClearColor(0,1,0,1),t.clear(A.COLOR_BUFFER_BIT),t.bindTechnique(this._blurTechnique,r,null),t.drawArrays(P.TRIANGLES,0,3)}_loadTextureFromBase64(e,r,t){return u(e).then((e=>new w(this._rctx,{pixelFormat:t,dataType:x.UNSIGNED_BYTE,wrapMode:R.CLAMP_TO_EDGE,width:e.width,height:e.height,samplingMode:r},e)))}};e([n()],j.prototype,"_abortController",void 0),e([n({readOnly:!0})],j.prototype,"updating",null),j=e([l("esri.views.3d.webgl-engine.lib.SmaaRenderPass")],j);export{j as SmaaRenderPass};