UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 1.71 kB
import{isArrayLike as e}from"../../../../../core/arrayUtils.js";import{isNone as t,isSome as r}from"../../../../../core/maybe.js";import{WGLDrawPhase as s}from"../enums.js";class a{constructor(e,t){this.brushes=e,this.name=t.name,this.drawPhase=t.drawPhase||s.MAP,this._targetFn=t.target,this.effects=t.effects||[],this.enableDefaultDraw=t.enableDefaultDraw??(()=>!0)}render(e){const{context:t,profiler:r}=e,s=this._targetFn(),a=this.drawPhase&e.drawPhase;if(r.recordPassStart(this.name),a){this.enableDefaultDraw()&&this._doRender(e,s),r.recordPassEnd();for(const r of this.effects){if(!r.enable())continue;const a=r.apply,n=r.args&&r.args(),i=t.getViewport(),o=t.getBoundFramebufferObject(),f=e.passOptions;this._bindEffect(e,a,n),this._doRender(e,s,a.defines),this._drawAndUnbindEffect(e,a,i,o,f,n)}}}_doRender(e,s,a){if(t(s))return;const{profiler:n,context:i}=e;for(const t of this.brushes){if(n.recordBrushStart(t.name),r(t.brushEffect)){const r=i.getViewport(),n=i.getBoundFramebufferObject(),o=e.passOptions;this._bindEffect(e,t.brushEffect),this._drawWithBrush(t,e,s,a),this._drawAndUnbindEffect(e,t.brushEffect,r,n,o)}else this._drawWithBrush(t,e,s,a);n.recordBrushEnd()}}_drawWithBrush(t,r,s,a){e(s)?(t.prepareState(r,a),t.drawMany(r,s,a)):s.visible&&(t.prepareState(r,a),t.draw(r,s,a))}_bindEffect(e,t,r){const{profiler:s}=e;s.recordPassStart(this.name+"."+t.name),t.bind(e,r);const a=t.createOptions(e,r);e.passOptions=a}_drawAndUnbindEffect(e,t,r,s,a,n){const{profiler:i,context:o}=e;e.passOptions=a,i.recordBrushStart(t.name),t.draw(e,n),t.unbind(e,n),o.bindFramebuffer(s);const{x:f,y:d,width:h,height:c}=r;o.setViewport(f,d,h,c),i.recordBrushEnd(),i.recordPassEnd()}}export{a as default};