@doegis/core
Version:
DOE GIS API
3 lines (1 loc) • 1.98 kB
JavaScript
import{isSome as r}from"../../../../../core/maybe.js";import{f as e}from"../../../../../chunks/vec4f32.js";import{Pos2b as t}from"../DefaultVertexAttributeLayouts.js";import s from"./WGLBrush.js";import{background as i}from"../shaders/BackgroundPrograms.js";import{BufferObject as o}from"../../../../webgl/BufferObject.js";import{StencilOperation as a,Face as l,CompareFunction as n,PrimitiveType as d,Usage as m}from"../../../../webgl/enums.js";import{createProgram as c}from"../../../../webgl/ProgramTemplate.js";import{VertexArrayObject as _}from"../../../../webgl/VertexArrayObject.js";class h extends s{constructor(){super(...arguments),this._color=e(1,0,0,1),this._initialized=!1}dispose(){this._solidProgram&&(this._solidProgram.dispose(),this._solidProgram=null),this._solidVertexArrayObject&&(this._solidVertexArrayObject.dispose(),this._solidVertexArrayObject=null)}prepareState({context:r}){r.setDepthWriteEnabled(!1),r.setDepthTestEnabled(!1),r.setStencilTestEnabled(!0),r.setBlendingEnabled(!1),r.setColorMask(!1,!1,!1,!1),r.setStencilOp(a.KEEP,a.KEEP,a.REPLACE),r.setStencilWriteMask(255)}draw(e,t){const{context:s,requestRender:i,allowDelayedRender:o}=e;this._initialized||this._initialize(s),o&&r(i)&&!this._solidProgram.compiled?i():(s.setStencilFunctionSeparate(l.FRONT_AND_BACK,n.GREATER,t.stencilRef,255),s.bindVAO(this._solidVertexArrayObject),s.useProgram(this._solidProgram),this._solidProgram.setUniformMatrix3fv("u_dvsMat3",t.transforms.dvs),this._solidProgram.setUniform2fv("u_coord_range",[t.rangeX,t.rangeY]),this._solidProgram.setUniform1f("u_depth",0),this._solidProgram.setUniform4fv("u_color",this._color),s.drawArrays(d.TRIANGLE_STRIP,0,4),s.bindVAO())}_initialize(r){if(this._initialized)return!0;const e=c(r,i);if(!e)return!1;const s=new Int8Array([0,0,1,0,0,1,1,1]),a=o.createVertex(r,m.STATIC_DRAW,s),l=new _(r,i.attributes,t,{geometry:a});return this._solidProgram=e,this._solidVertexArrayObject=l,this._initialized=!0,!0}}export{h as default};