/* COPYRIGHT Esri - https://js.arcgis.com/5.1.0/LICENSE.txt */
import{copy as t}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{create as e}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{copy as i}from"../../../../core/libs/gl-matrix-2/math/vec4.js";import{fromValues as s}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{newFloatArray as r}from"../../../../geometry/support/FloatArray.js";import{getContinuousIndexArray as o,getZeroIndexArray as a}from"../../../../geometry/support/Indices.js";import{Attribute as n,Vertices as h}from"./Attribute.js";import{intersectTriangles as l}from"./RayIntersections.js";class c{constructor(t){this.builder=t,this.color=s(255,255,255,255),this._size=e(),this.positions=r(3*this.builder.numVerticesTotal),this.normals=new Int16Array(2*this.builder.numVerticesTotal)}bakeVertexColors(t){i(this.color,t)}bake(e){t(this._size,e),this.builder.evaluator.evaluateBakedVertices(this.positions,this.normals,e)}createGeometryData(){const t=this.builder.vertexIndices;return[["position",new n(this.positions,t,3,!0)],["normalCompressed",new n(this.normals,t,2,!0)],["color",new n(this.color,a(t.length),4,!0)]]}onPathChanged(){this.builder.onPathChanged(),this.bake(this.size)}intersect(t,e,i,s){const r=this.builder.vertexIndices,o=new h(this.positions,3),a=r.length/3;l(t,e,0,a,r,o,void 0,i,s)}get size(){return this._size}}class p{constructor(t,e,i,s){this.builder=t,this.sizeAttributeValue=e,this.colorAttributeValue=i,this.opacityAttributeValue=s,this.baked=new c(t),this._vvSize=e,this._vvColor=i,this._vvOpacity=s}createGeometryData(){const t=this.builder,{vertexIndices:e,framePositionIndices:i,numExtrusionFrames:s}=t,r=o(s),h=a(s),l=[["position",new n(t.positions,i,3,!0)],["profileRight",new n(t.profileRightAxes,r,2,!0)],["profileUp",new n(t.profileUpAxes,r,2,!0)],["profileRotation",new n(t.profileRotations,r,1,!0)],["pathMaxStretchDistance",new n(t.pathMaxStretchDistances,r,1,!0)],["sizeFeatureAttribute",new n([this._vvSize],h,1,!0)],["colorFeatureAttribute",new n([this._vvColor],h,1,!0)],["opacityFeatureAttribute",new n([this._vvOpacity],h,1,!0)],["textureElementIndex",new n(t.vertexFrameIndices,e,1,!0)],["pathVertexInfo",new n(t.pathVertexInfos,e,1,!0)]];return t.profileRotationFrameUpAxes&&l.push(["pathRotationUp",new n(t.profileRotationFrameUpAxes,r,2,!0)]),l}onPathChanged(t){this.builder.onPathChanged();const e=t.getMutableAttribute("position");e&&(e.data=this.builder.positions)}}export{p as FastUpdatePathGeometry,c as StaticPathGeometry};
