@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 3.13 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.32/esri/copyright.txt for details.
*/
import"../../../../core/has.js";import{isColorOrColorEmission as e,ShaderOutput as t}from"../core/shaderLibrary/ShaderOutput.js";import{ReloadableShaderModule as i}from"../core/shaderTechnique/ReloadableShaderModule.js";import{ShaderTechnique as r}from"../core/shaderTechnique/ShaderTechnique.js";import{OITPass as l}from"../lib/OITPass.js";import{blending as s,oitDepthTest as n,depthWrite as o,getDrawBuffers as u,OITPolygonOffset as p}from"../lib/OrderIndependentTransparency.js";import{RenderSlot as c}from"../lib/RenderSlot.js";import{stencilWriteMaskOn as a,stencilToolMaskBaseParams as f,stencilBaseAllZerosParams as d,depthCompareAlways as T,stencilToolTransparentOccluderParams as h,stencilWriteMaskOff as O,stencilToolMaskOccluderParams as m,depthCompareLess as E}from"../lib/StencilUtils.js";import{VertexAttribute as P}from"../lib/VertexAttribute.js";import{R}from"../../../../chunks/RibbonLine.glsl.js";import{PrimitiveType as I,SpecialDrawBuffers as b}from"../../../webgl/enums.js";import{makePipelineState as N,defaultColorWrite as S,premultipliedAlphaToPremultipliedAlpha as g}from"../../../webgl/renderState.js";class A extends r{constructor(e,t){super(e,t,new i(R,(()=>import("./RibbonLine.glsl.js"))),W),this.primitiveType=t.wireframe?I.LINES:I.TRIANGLE_STRIP}_makePipelineState(i,r){const{oitPass:c,output:T,hasOccludees:h,hasPolygonOffset:O}=i,m=c===l.NONE,E=c===l.FrontFace;return N({blending:e(T)?s(c):null,depthTest:{func:n(c)},depthWrite:o(i),drawBuffers:T===t.Depth?{buffers:[b.NONE]}:u(c,T),colorWrite:S,stencilWrite:h?a:null,stencilTest:h?r?f:d:null,polygonOffset:m||E?O?_:null:p})}initializePipeline(e){if(e.occluder){const i=e.hasPolygonOffset?_:null;this._occluderPipelineTransparent=N({blending:g,polygonOffset:i,depthTest:T,depthWrite:null,colorWrite:S,stencilWrite:null,stencilTest:h,drawBuffers:e.output===t.Depth?{buffers:[b.NONE]}:null}),this._occluderPipelineOpaque=N({blending:g,polygonOffset:i,depthTest:T,depthWrite:null,colorWrite:S,stencilWrite:O,stencilTest:m,drawBuffers:e.output===t.Depth?{buffers:[b.NONE]}:null}),this._occluderPipelineMaskWrite=N({blending:null,polygonOffset:i,depthTest:E,depthWrite:null,colorWrite:null,stencilWrite:a,stencilTest:f,drawBuffers:e.output===t.Depth?{buffers:[b.NONE]}:null})}return this._occludeePipeline=this._makePipelineState(e,!0),this._makePipelineState(e,!1)}getPipeline(e,t){if(e)return this._occludeePipeline;switch(t){case c.TRANSPARENT_OCCLUDER_MATERIAL:return this._occluderPipelineTransparent??super.getPipeline();case c.OCCLUDER_MATERIAL:return this._occluderPipelineOpaque??super.getPipeline();default:return this._occluderPipelineMaskWrite??super.getPipeline()}}}const _={factor:0,units:-4},W=new Map([[P.POSITION,0],[P.PREVPOSITION,1],[P.NEXTPOSITION,2],[P.SUBDIVISIONFACTOR,3],[P.UV0,4],[P.COLOR,5],[P.COLORFEATUREATTRIBUTE,5],[P.SIZE,6],[P.SIZEFEATUREATTRIBUTE,6],[P.OPACITYFEATUREATTRIBUTE,7],[P.OBJECTANDLAYERIDCOLOR,8]]);export{A as RibbonLineTechnique,W as vertexAttributeLocations};