=l&&(re=l-1);const G=q-Z;Z*=p,re*=p;for(let k=0;k5&&arguments[5]!==void 0?arguments[5]:!1;if(t.getOpenGLDataType(g,!0),t.getInternalFormat(g,l),t.getFormat(g,l),!e.internalFormat||!e.format||!e.openGLDataType)return qn("Failed to determine texture parameters."),!1;e.target=e.context.TEXTURE_2D,e.components=l,e.width=c,e.height=f,e.depth=1,e.numberOfDimensions=2,e._openGLRenderWindow.activateTexture(t),t.createTexture(),t.bind();const d=n(g,[p]),x=r(d);return e.context.pixelStorei(e.context.UNPACK_FLIP_Y_WEBGL,T),e.context.pixelStorei(e.context.UNPACK_ALIGNMENT,1),a(g)?(e.context.texStorage2D(e.target,1,e.internalFormat,e.width,e.height),x[0]!=null&&e.context.texSubImage2D(e.target,0,0,0,e.width,e.height,e.format,e.openGLDataType,x[0])):e.context.texImage2D(e.target,0,e.internalFormat,e.width,e.height,0,e.format,e.openGLDataType,x[0]),e.generateMipmap&&e.context.generateMipmap(e.target),T&&e.context.pixelStorei(e.context.UNPACK_FLIP_Y_WEBGL,!1),e.allocatedGPUMemoryInBytes=e.width*e.height*e.depth*l*e._openGLRenderWindow.getDefaultTextureByteSize(g,e.oglNorm16Ext,e.useHalfFloat),t.deactivate(),!0},t.createCubeFromRaw=(c,f,l,g,p)=>{if(t.getOpenGLDataType(g),t.getInternalFormat(g,l),t.getFormat(g,l),!e.internalFormat||!e.format||!e.openGLDataType)return qn("Failed to determine texture parameters."),!1;e.target=e.context.TEXTURE_CUBE_MAP,e.components=l,e.width=c,e.height=f,e.depth=1,e.numberOfDimensions=2,e._openGLRenderWindow.activateTexture(t),e.maxLevel=p.length/6-1,t.createTexture(),t.bind();const T=n(g,p),h=r(T),d=[];let x=e.width,C=e.height;for(let y=0;y=1&&S>=1;){let R=null;v<=e.maxLevel&&(R=d[6*v+y]),a(g)?R!=null&&e.context.texSubImage2D(e.context.TEXTURE_CUBE_MAP_POSITIVE_X+y,v,0,0,w,S,e.format,e.openGLDataType,R):e.context.texImage2D(e.context.TEXTURE_CUBE_MAP_POSITIVE_X+y,v,e.internalFormat,w,S,0,e.format,e.openGLDataType,R),v++,w/=2,S/=2}}return e.allocatedGPUMemoryInBytes=e.width*e.height*e.depth*l*e._openGLRenderWindow.getDefaultTextureByteSize(g,e.oglNorm16Ext,e.useHalfFloat),t.deactivate(),!0},t.createDepthFromRaw=(c,f,l,g)=>(t.getOpenGLDataType(l),e.format=e.context.DEPTH_COMPONENT,e._openGLRenderWindow.getWebgl2()?l===pe.FLOAT?e.internalFormat=e.context.DEPTH_COMPONENT32F:e.internalFormat=e.context.DEPTH_COMPONENT16:e.internalFormat=e.context.DEPTH_COMPONENT,!e.internalFormat||!e.format||!e.openGLDataType?(qn("Failed to determine texture parameters."),!1):(e.target=e.context.TEXTURE_2D,e.components=1,e.width=c,e.height=f,e.depth=1,e.numberOfDimensions=2,e._openGLRenderWindow.activateTexture(t),t.createTexture(),t.bind(),e.context.pixelStorei(e.context.UNPACK_ALIGNMENT,1),a(l)?(e.context.texStorage2D(e.target,1,e.internalFormat,e.width,e.height),g!=null&&e.context.texSubImage2D(e.target,0,0,0,e.width,e.height,e.format,e.openGLDataType,g)):e.context.texImage2D(e.target,0,e.internalFormat,e.width,e.height,0,e.format,e.openGLDataType,g),e.generateMipmap&&e.context.generateMipmap(e.target),e.allocatedGPUMemoryInBytes=e.width*e.height*e.depth*e.components*e._openGLRenderWindow.getDefaultTextureByteSize(l,e.oglNorm16Ext,e.useHalfFloat),t.deactivate(),!0)),t.create2DFromImage=c=>{if(t.getOpenGLDataType(pe.UNSIGNED_CHAR),t.getInternalFormat(pe.UNSIGNED_CHAR,4),t.getFormat(pe.UNSIGNED_CHAR,4),!e.internalFormat||!e.format||!e.openGLDataType)return qn("Failed to determine texture parameters."),!1;e.target=e.context.TEXTURE_2D,e.components=4,e.depth=1,e.numberOfDimensions=2,e._openGLRenderWindow.activateTexture(t),t.createTexture(),t.bind(),e.context.pixelStorei(e.context.UNPACK_ALIGNMENT,1);const f=!e._openGLRenderWindow.getWebgl2()&&(!oa(c.width)||!oa(c.height)),l=document.createElement("canvas");l.width=f?Rt(c.width):c.width,l.height=f?Rt(c.height):c.height,e.width=l.width,e.height=l.height;const g=l.getContext("2d");g.translate(0,l.height),g.scale(1,-1),g.drawImage(c,0,0,c.width,c.height,0,0,l.width,l.height);const p=l;return a(pe.UNSIGNED_CHAR)?(e.context.texStorage2D(e.target,1,e.internalFormat,e.width,e.height),p!=null&&e.context.texSubImage2D(e.target,0,0,0,e.width,e.height,e.format,e.openGLDataType,p)):e.context.texImage2D(e.target,0,e.internalFormat,e.width,e.height,0,e.format,e.openGLDataType,p),e.generateMipmap&&e.context.generateMipmap(e.target),e.allocatedGPUMemoryInBytes=e.width*e.height*e.depth*e.components*e._openGLRenderWindow.getDefaultTextureByteSize(pe.UNSIGNED_CHAR,e.oglNorm16Ext,e.useHalfFloat),t.deactivate(),!0};function s(c,f,l){const g=new Array(l),p=new Array(l);for(let T=0;T2048||p<-2048||p>2048)return!1}return!0}function o(c,f,l,g){t.getOpenGLDataType(c);let p=!1;if(e._openGLRenderWindow.getWebgl2())p=e.openGLDataType===e.context.HALF_FLOAT;else{const h=e.context.getExtension("OES_texture_half_float");p=h&&e.openGLDataType===h.HALF_FLOAT_OES}const T=p&&(i(f,l)||g);e.useHalfFloat=T}function u(c,f){const l=c.getNumberOfComponents(),g=c.getDataType(),p=c.getData(),T=new Array(l),h=new Array(l);for(let x=0;x5&&arguments[5]!==void 0?arguments[5]:!1;return t.create2DFilterableFromDataArray(c,f,Se.newInstance({numberOfComponents:l,dataType:g,values:p}),T)},t.create2DFilterableFromDataArray=function(c,f,l){let g=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;const{numComps:p,dataType:T,data:h}=u(l,g);t.create2DFromRaw(c,f,p,T,h)},t.create3DFromRaw=(c,f,l,g,p,T)=>{if(t.getOpenGLDataType(p),t.getInternalFormat(p,g),t.getFormat(p,g),!e.internalFormat||!e.format||!e.openGLDataType)return qn("Failed to determine texture parameters."),!1;e.target=e.context.TEXTURE_3D,e.components=g,e.width=c,e.height=f,e.depth=l,e.numberOfDimensions=3,e._openGLRenderWindow.activateTexture(t),t.createTexture(),t.bind();const x=n(p,[T],!0),C=r(x);return e.context.pixelStorei(e.context.UNPACK_ALIGNMENT,1),a(p)?(e.context.texStorage3D(e.target,1,e.internalFormat,e.width,e.height,e.depth),C[0]!=null&&e.context.texSubImage3D(e.target,0,0,0,0,e.width,e.height,e.depth,e.format,e.openGLDataType,C[0])):e.context.texImage3D(e.target,0,e.internalFormat,e.width,e.height,e.depth,0,e.format,e.openGLDataType,C[0]),e.generateMipmap&&e.context.generateMipmap(e.target),e.allocatedGPUMemoryInBytes=e.width*e.height*e.depth*e.components*e._openGLRenderWindow.getDefaultTextureByteSize(p,e.oglNorm16Ext,e.useHalfFloat),t.deactivate(),!0},t.create3DFilterableFromRaw=function(c,f,l,g,p,T){let h=arguments.length>6&&arguments[6]!==void 0?arguments[6]:!1;return t.create3DFilterableFromDataArray(c,f,l,Se.newInstance({numberOfComponents:g,dataType:p,values:T}),h)},t.create3DFilterableFromDataArray=function(c,f,l,g){let p=arguments.length>4&&arguments[4]!==void 0?arguments[4]:!1;const{numComps:T,dataType:h,data:d,scaleOffsets:x}=u(g,p),C=c*f*l,y=[],v=[];for(let k=0;k1/P);for(let P=0;P{k[j]=K},R=pe.UNSIGNED_CHAR;if(h===pe.UNSIGNED_CHAR)for(let k=0;k{k[j]=(K-P)/A}):(R=pe.UNSIGNED_CHAR,S=(k,j,K,P,A)=>{k[j]=255*(K-P)/A});if(t.getOpenGLDataType(R),t.getInternalFormat(R,T),t.getFormat(R,T),!e.internalFormat||!e.format||!e.openGLDataType)return qn("Failed to determine texture parameters."),!1;e.target=e.context.TEXTURE_2D,e.components=T,e.depth=1,e.numberOfDimensions=2;let M=e.context.getParameter(e.context.MAX_TEXTURE_SIZE);M>4096&&(R===pe.FLOAT||T>=3)&&(M=4096);let m=1,O=1;C>M*M&&(m=Math.ceil(Math.sqrt(C/(M*M))),O=m);let V=Math.sqrt(C)/m;V=Rt(V);const B=Math.floor(V*m/c),b=Math.ceil(l/B),U=Rt(f*b/O);e.width=V,e.height=U,e._openGLRenderWindow.activateTexture(t),t.createTexture(),t.bind(),e.volumeInfo.xreps=B,e.volumeInfo.yreps=b,e.volumeInfo.xstride=m,e.volumeInfo.ystride=O,e.volumeInfo.offset=w.offset,e.volumeInfo.scale=w.scale;let Y;const q=V*U*T;R===pe.FLOAT?Y=new Float32Array(q):Y=new Uint8Array(q);let Z=0;const re=Math.floor(c/m),G=Math.floor(f/O);for(let k=0;k{e._openGLRenderWindow!==c&&(t.releaseGraphicsResources(),e._openGLRenderWindow=c,e.context=null,c&&(e.context=e._openGLRenderWindow.getContext()))},t.getMaximumTextureSize=c=>c&&c.isCurrent()?c.getIntegerv(c.MAX_TEXTURE_SIZE):-1}const FE={_openGLRenderWindow:null,_forceInternalFormat:!1,context:null,handle:0,sendParametersTime:null,textureBuildTime:null,numberOfDimensions:0,target:0,format:0,openGLDataType:0,components:0,width:0,height:0,depth:0,autoParameters:!0,wrapS:Qt.CLAMP_TO_EDGE,wrapT:Qt.CLAMP_TO_EDGE,wrapR:Qt.CLAMP_TO_EDGE,minificationFilter:Ie.NEAREST,magnificationFilter:Ie.NEAREST,minLOD:-1e3,maxLOD:1e3,baseLevel:0,maxLevel:1e3,generateMipmap:!1,useHalfFloat:!0,oglNorm16Ext:null,allocatedGPUMemoryInBytes:0};function Ql(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,FE,n),Be.extend(t,e,n),e.sendParametersTime={},Pe(e.sendParametersTime,{mtime:0}),e.textureBuildTime={},Pe(e.textureBuildTime,{mtime:0}),Ir(t,e,["format","openGLDataType"]),ze(t,e,["keyMatrixTime","minificationFilter","magnificationFilter","wrapS","wrapT","wrapR","generateMipmap","oglNorm16Ext"]),st(t,e,["width","height","volumeInfo","components","handle","target","allocatedGPUMemoryInBytes"]),Yr(t,e,["openGLRenderWindow"]),kE(t,e)}const Zl=Ee(Ql,"vtkOpenGLTexture");var Wn={newInstance:Zl,extend:Ql,...Yl};Ft("vtkTexture",Zl);var UE=`//VTK::System::Dec
/*=========================================================================
Program: Visualization Toolkit
Module: vtkPolyDataVS.glsl
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
attribute vec4 vertexMC;
// frag position in VC
//VTK::PositionVC::Dec
// optional normal declaration
//VTK::Normal::Dec
// extra lighting parameters
//VTK::Light::Dec
// Texture coordinates
//VTK::TCoord::Dec
// material property values
//VTK::Color::Dec
// clipping plane vars
//VTK::Clip::Dec
// camera and actor matrix values
//VTK::Camera::Dec
// Apple Bug
//VTK::PrimID::Dec
// picking support
//VTK::Picking::Dec
void main()
{
//VTK::Color::Impl
//VTK::Normal::Impl
//VTK::TCoord::Impl
//VTK::Clip::Impl
//VTK::PrimID::Impl
//VTK::PositionVC::Impl
//VTK::Light::Impl
//VTK::Picking::Impl
}
`,NE=`//VTK::System::Dec
/*=========================================================================
Program: Visualization Toolkit
Module: vtkPolyDataFS.glsl
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// Template for the polydata mappers fragment shader
uniform int PrimitiveIDOffset;
// VC position of this fragment
//VTK::PositionVC::Dec
// optional color passed in from the vertex shader, vertexColor
//VTK::Color::Dec
// optional surface normal declaration
//VTK::Normal::Dec
// extra lighting parameters
//VTK::Light::Dec
// define vtkImageLabelOutlineOn
//VTK::ImageLabelOutlineOn
// Texture coordinates
//VTK::TCoord::Dec
// picking support
//VTK::Picking::Dec
// Depth Peeling Support
//VTK::DepthPeeling::Dec
// clipping plane vars
//VTK::Clip::Dec
// label outline
//VTK::LabelOutline::Dec
// the output of this shader
//VTK::Output::Dec
// Apple Bug
//VTK::PrimID::Dec
// handle coincident offsets
//VTK::Coincident::Dec
//VTK::ZBuffer::Dec
//VTK::LabelOutlineHelperFunction
void main()
{
// VC position of this fragment. This should not branch/return/discard.
//VTK::PositionVC::Impl
// Place any calls that require uniform flow (e.g. dFdx) here.
//VTK::UniformFlow::Impl
// Set gl_FragDepth here (gl_FragCoord.z by default)
//VTK::Depth::Impl
// Early depth peeling abort:
//VTK::DepthPeeling::PreColor
// Apple Bug
//VTK::PrimID::Impl
//VTK::Clip::Impl
//VTK::Color::Impl
// Generate the normal if we are not passed in one
//VTK::Normal::Impl
//VTK::TCoord::Impl
//VTK::Light::Impl
if (gl_FragData[0].a <= 0.0)
{
discard;
}
//VTK::DepthPeeling::Impl
//VTK::Picking::Impl
// handle coincident offsets
//VTK::Coincident::Impl
//VTK::ZBuffer::Impl
//VTK::RenderPassFragmentShader::Impl
}
`;function bE(t,e){t.replaceShaderCoincidentOffset=(n,r,a)=>{const s=t.getCoincidentParameters(r,a);if(s&&(s.factor!==0||s.offset!==0)){let i=n.Fragment;i=z.substitute(i,"//VTK::Coincident::Dec",["uniform float cfactor;","uniform float coffset;"]).result,e.context.getExtension("EXT_frag_depth")&&(s.factor!==0?(i=z.substitute(i,"//VTK::UniformFlow::Impl",["float cscale = length(vec2(dFdx(gl_FragCoord.z),dFdy(gl_FragCoord.z)));","//VTK::UniformFlow::Impl"],!1).result,i=z.substitute(i,"//VTK::Depth::Impl","gl_FragDepthEXT = gl_FragCoord.z + cfactor*cscale + 0.000016*coffset;").result):i=z.substitute(i,"//VTK::Depth::Impl","gl_FragDepthEXT = gl_FragCoord.z + 0.000016*coffset;").result),e._openGLRenderWindow.getWebgl2()&&(s.factor!==0?(i=z.substitute(i,"//VTK::UniformFlow::Impl",["float cscale = length(vec2(dFdx(gl_FragCoord.z),dFdy(gl_FragCoord.z)));","//VTK::UniformFlow::Impl"],!1).result,i=z.substitute(i,"//VTK::Depth::Impl","gl_FragDepth = gl_FragCoord.z + cfactor*cscale + 0.000016*coffset;").result):i=z.substitute(i,"//VTK::Depth::Impl","gl_FragDepth = gl_FragCoord.z + 0.000016*coffset;").result),n.Fragment=i}}}function GE(t,e){t.applyShaderReplacements=(n,r,a)=>{let s=null;if(r&&(s=r.ShaderReplacements),s)for(let i=0;i{t.getReplacedShaderTemplate(n,r,a),e.lastRenderPassShaderReplacement=e.currentRenderPass?e.currentRenderPass.getShaderReplacement():null,e.lastRenderPassShaderReplacement&&e.lastRenderPassShaderReplacement(n);const s=e.renderable.getViewSpecificProperties().OpenGL;t.applyShaderReplacements(n,s,!0),t.replaceShaderValues(n,r,a),t.applyShaderReplacements(n,s)},t.getReplacedShaderTemplate=(n,r,a)=>{const s=e.renderable.getViewSpecificProperties().OpenGL;t.getShaderTemplate(n,r,a);let i=n.Vertex;if(s){const c=s.VertexShaderCode;c!==void 0&&c!==""&&(i=c)}n.Vertex=i;let o=n.Fragment;if(s){const c=s.FragmentShaderCode;c!==void 0&&c!==""&&(o=c)}n.Fragment=o;let u=n.Geometry;if(s){const c=s.GeometryShaderCode;c!==void 0&&(u=c)}n.Geometry=u}}var rs={implementReplaceShaderCoincidentOffset:bE,implementBuildShadersWithReplacements:GE};const{FieldAssociations:Gs}=Pn,{primTypes:We}=wr,{Representation:Qn,Shading:Dc}=Cr,{ScalarMode:da}=Cn,{Filter:Mc,Wrap:Vc}=Wn,{vtkErrorMacro:Mn}=Pt,$E={type:"StartEvent"},WE={type:"EndEvent"},{CoordinateSystem:zE}=Qr;function AE(t){const e=t.getSelector();return e?e.getCurrentPass():nt.MIN_KNOWN_PASS-1}function HE(t,e){e.classHierarchy.push("vtkOpenGLPolyDataMapper"),t.buildPass=r=>{r&&(e.currentRenderPass=null,e.openGLActor=t.getFirstAncestorOfType("vtkOpenGLActor"),e._openGLRenderer=e.openGLActor.getFirstAncestorOfType("vtkOpenGLRenderer"),e._openGLRenderWindow=e._openGLRenderer.getParent(),e.openGLCamera=e._openGLRenderer.getViewNodeFor(e._openGLRenderer.getRenderable().getActiveCamera()))},t.translucentPass=(r,a)=>{r&&(e.currentRenderPass=a,t.render())},t.zBufferPass=r=>{r&&(e.haveSeenDepthRequest=!0,e.renderDepth=!0,t.render(),e.renderDepth=!1)},t.opaqueZBufferPass=r=>t.zBufferPass(r),t.opaquePass=r=>{r&&t.render()},t.render=()=>{const r=e._openGLRenderWindow.getContext();if(e.context!==r){e.context=r;for(let i=We.Start;i{r.Vertex=UE,r.Fragment=NE,r.Geometry=""},t.replaceShaderColor=(r,a,s)=>{let i=r.Vertex,o=r.Geometry,u=r.Fragment;const c=e.lastBoundBO.getReferenceByName("lastLightComplexity");let f=["uniform float ambient;","uniform float diffuse;","uniform float specular;","uniform float opacityUniform; // the fragment opacity","uniform vec3 ambientColorUniform;","uniform vec3 diffuseColorUniform;"];c&&(f=f.concat(["uniform vec3 specularColorUniform;","uniform float specularPowerUniform;"]));let l=["vec3 ambientColor;"," vec3 diffuseColor;"," float opacity;"];c&&(l=l.concat([" vec3 specularColor;"," float specularPower;"])),l=l.concat([" ambientColor = ambientColorUniform;"," diffuseColor = diffuseColorUniform;"," opacity = opacityUniform;"]),c&&(l=l.concat([" specularColor = specularColorUniform;"," specularPower = specularPowerUniform;"])),e.lastBoundBO.getCABO().getColorComponents()!==0&&!e.drawingEdges&&(f=f.concat(["varying vec4 vertexColorVSOutput;"]),i=z.substitute(i,"//VTK::Color::Dec",["attribute vec4 scalarColor;","varying vec4 vertexColorVSOutput;"]).result,i=z.substitute(i,"//VTK::Color::Impl",["vertexColorVSOutput = scalarColor;"]).result,o=z.substitute(o,"//VTK::Color::Dec",["in vec4 vertexColorVSOutput[];","out vec4 vertexColorGSOutput;"]).result,o=z.substitute(o,"//VTK::Color::Impl",["vertexColorGSOutput = vertexColorVSOutput[i];"]).result),e.lastBoundBO.getCABO().getColorComponents()!==0&&!e.drawingEdges?u=z.substitute(u,"//VTK::Color::Impl",l.concat([" diffuseColor = vertexColorVSOutput.rgb;"," ambientColor = vertexColorVSOutput.rgb;"," opacity = opacity*vertexColorVSOutput.a;"])).result:e.renderable.getInterpolateScalarsBeforeMapping()&&e.renderable.getColorCoordinates()&&!e.drawingEdges?u=z.substitute(u,"//VTK::Color::Impl",l.concat([" vec4 texColor = texture2D(texture1, tcoordVCVSOutput.st);"," diffuseColor = texColor.rgb;"," ambientColor = texColor.rgb;"," opacity = opacity*texColor.a;"])).result:(s.getBackfaceProperty()&&!e.drawingEdges&&(f=f.concat(["uniform float opacityUniformBF; // the fragment opacity","uniform float ambientIntensityBF; // the material ambient","uniform float diffuseIntensityBF; // the material diffuse","uniform vec3 ambientColorUniformBF; // ambient material color","uniform vec3 diffuseColorUniformBF; // diffuse material color"]),c?(f=f.concat(["uniform float specularIntensityBF; // the material specular intensity","uniform vec3 specularColorUniformBF; // intensity weighted color","uniform float specularPowerUniformBF;"]),l=l.concat(["if (gl_FrontFacing == false) {"," ambientColor = ambientIntensityBF * ambientColorUniformBF;"," diffuseColor = diffuseIntensityBF * diffuseColorUniformBF;"," specularColor = specularIntensityBF * specularColorUniformBF;"," specularPower = specularPowerUniformBF;"," opacity = opacityUniformBF; }"])):l=l.concat(["if (gl_FrontFacing == false) {"," ambientColor = ambientIntensityBF * ambientColorUniformBF;"," diffuseColor = diffuseIntensityBF * diffuseColorUniformBF;"," opacity = opacityUniformBF; }"])),e.haveCellScalars&&!e.drawingEdges&&(f=f.concat(["uniform samplerBuffer texture1;"])),u=z.substitute(u,"//VTK::Color::Impl",l).result),u=z.substitute(u,"//VTK::Color::Dec",f).result,r.Vertex=i,r.Geometry=o,r.Fragment=u},t.replaceShaderLight=(r,a,s)=>{let i=r.Fragment;const o="",u=e.lastBoundBO.getReferenceByName("lastLightComplexity"),c=e.lastBoundBO.getReferenceByName("lastLightCount");let f=[];switch(u){case 0:i=z.substitute(i,"//VTK::Light::Impl",[" gl_FragData[0] = vec4(ambientColor * ambient + diffuseColor * diffuse, opacity);"," //VTK::Light::Impl"],!1).result;break;case 1:i=z.substitute(i,"//VTK::Light::Impl",[" float df = max(0.0, normalVCVSOutput.z);"," float sf = pow(df, specularPower);"," vec3 diffuseL = df * diffuseColor;"," vec3 specularL = sf * specularColor;"," gl_FragData[0] = vec4(ambientColor * ambient + diffuseL * diffuse + specularL * specular, opacity);"," //VTK::Light::Impl"],!1).result;break;case 2:for(let l=0;l= cos(radians(lightConeAngle${l})))`," {",` attenuation = attenuation * pow(coneDot, lightExponent${l});`," }"," else"," {"," attenuation = 0.0;"," }"," }"," }"," df = max(0.0, attenuation*dot(normalVCVSOutput, -vertLightDirectionVC));",` diffuseL += ((df${o}) * lightColor${l});`," if (dot(normalVCVSOutput, vertLightDirectionVC) < 0.0)"," {",` float sf = sign(df)*attenuation*pow(max(1e-5,
dot(reflect(lightDirectionVC${l},
normalVCVSOutput),
normalize(-vertexVC.xyz))),
specularPower);`,` specularL += ((sf${o}) * lightColor${l});`," }"]);f=f.concat([" diffuseL = diffuseL * diffuseColor;"," specularL = specularL * specularColor;"," gl_FragData[0] = vec4(ambientColor * ambient + diffuseL * diffuse + specularL * specular, opacity);"," //VTK::Light::Impl"]),i=z.substitute(i,"//VTK::Light::Impl",f,!1).result;break;default:Mn("bad light complexity")}r.Fragment=i},t.replaceShaderNormal=(r,a,s)=>{if(e.lastBoundBO.getReferenceByName("lastLightComplexity")>0){let o=r.Vertex,u=r.Geometry,c=r.Fragment;e.lastBoundBO.getCABO().getNormalOffset()?(o=z.substitute(o,"//VTK::Normal::Dec",["attribute vec3 normalMC;","uniform mat3 normalMatrix;","varying vec3 normalVCVSOutput;"]).result,o=z.substitute(o,"//VTK::Normal::Impl",["normalVCVSOutput = normalMatrix * normalMC;"]).result,u=z.substitute(u,"//VTK::Normal::Dec",["in vec3 normalVCVSOutput[];","out vec3 normalVCGSOutput;"]).result,u=z.substitute(u,"//VTK::Normal::Impl",["normalVCGSOutput = normalVCVSOutput[i];"]).result,c=z.substitute(c,"//VTK::Normal::Dec",["varying vec3 normalVCVSOutput;"]).result,c=z.substitute(c,"//VTK::Normal::Impl",["vec3 normalVCVSOutput = normalize(normalVCVSOutput);"," if (gl_FrontFacing == false) { normalVCVSOutput = -normalVCVSOutput; }"]).result):e.haveCellNormals?(c=z.substitute(c,"//VTK::Normal::Dec",["uniform mat3 normalMatrix;","uniform samplerBuffer textureN;"]).result,c=z.substitute(c,"//VTK::Normal::Impl",["vec3 normalVCVSOutput = normalize(normalMatrix *"," texelFetchBuffer(textureN, gl_PrimitiveID + PrimitiveIDOffset).xyz);"," if (gl_FrontFacing == false) { normalVCVSOutput = -normalVCVSOutput; }"]).result):e.lastBoundBO.getOpenGLMode(s.getProperty().getRepresentation())===e.context.LINES?(c=z.substitute(c,"//VTK::UniformFlow::Impl",[" vec3 fdx = dFdx(vertexVC.xyz);"," vec3 fdy = dFdy(vertexVC.xyz);"," //VTK::UniformFlow::Impl"]).result,c=z.substitute(c,"//VTK::Normal::Impl",["vec3 normalVCVSOutput;"," if (abs(fdx.x) > 0.0)"," { fdx = normalize(fdx); normalVCVSOutput = normalize(cross(vec3(fdx.y, -fdx.x, 0.0), fdx)); }"," else { fdy = normalize(fdy); normalVCVSOutput = normalize(cross(vec3(fdy.y, -fdy.x, 0.0), fdy));}"]).result):(c=z.substitute(c,"//VTK::Normal::Dec",["uniform int cameraParallel;"]).result,c=z.substitute(c,"//VTK::UniformFlow::Impl",[" vec3 fdx = dFdx(vertexVC.xyz);"," vec3 fdy = dFdy(vertexVC.xyz);"," //VTK::UniformFlow::Impl"]).result,c=z.substitute(c,"//VTK::Normal::Impl",[" fdx = normalize(fdx);"," fdy = normalize(fdy);"," vec3 normalVCVSOutput = normalize(cross(fdx,fdy));"," if (cameraParallel == 1 && normalVCVSOutput.z < 0.0) { normalVCVSOutput = -1.0*normalVCVSOutput; }"," if (cameraParallel == 0 && dot(normalVCVSOutput,vertexVC.xyz) > 0.0) { normalVCVSOutput = -1.0*normalVCVSOutput; }"]).result),r.Vertex=o,r.Geometry=u,r.Fragment=c}},t.replaceShaderPositionVC=(r,a,s)=>{e.lastBoundBO.replaceShaderPositionVC(r,a,s);let i=r.Vertex,o=r.Geometry,u=r.Fragment;e.lastBoundBO.getReferenceByName("lastLightComplexity")>0?(i=z.substitute(i,"//VTK::PositionVC::Dec",["varying vec4 vertexVCVSOutput;"]).result,i=z.substitute(i,"//VTK::PositionVC::Impl",["vertexVCVSOutput = MCVCMatrix * vertexMC;"," gl_Position = MCPCMatrix * vertexMC;"]).result,i=z.substitute(i,"//VTK::Camera::Dec",["uniform mat4 MCPCMatrix;","uniform mat4 MCVCMatrix;"]).result,o=z.substitute(o,"//VTK::PositionVC::Dec",["in vec4 vertexVCVSOutput[];","out vec4 vertexVCGSOutput;"]).result,o=z.substitute(o,"//VTK::PositionVC::Impl",["vertexVCGSOutput = vertexVCVSOutput[i];"]).result,u=z.substitute(u,"//VTK::PositionVC::Dec",["varying vec4 vertexVCVSOutput;"]).result,u=z.substitute(u,"//VTK::PositionVC::Impl",["vec4 vertexVC = vertexVCVSOutput;"]).result):(i=z.substitute(i,"//VTK::Camera::Dec",["uniform mat4 MCPCMatrix;"]).result,i=z.substitute(i,"//VTK::PositionVC::Impl",[" gl_Position = MCPCMatrix * vertexMC;"]).result),r.Vertex=i,r.Geometry=o,r.Fragment=u},t.replaceShaderTCoord=(r,a,s)=>{if(e.lastBoundBO.getCABO().getTCoordOffset()){let i=r.Vertex,o=r.Geometry,u=r.Fragment;if(e.drawingEdges)return;i=z.substitute(i,"//VTK::TCoord::Impl","tcoordVCVSOutput = tcoordMC;").result;const c=e.openGLActor.getActiveTextures();let f=2,l=2;if(c&&c.length>0&&(f=c[0].getComponents(),c[0].getTarget()===e.context.TEXTURE_CUBE_MAP&&(l=3)),e.renderable.getColorTextureMap()&&(f=e.renderable.getColorTextureMap().getPointData().getScalars().getNumberOfComponents(),l=2),l===2){if(i=z.substitute(i,"//VTK::TCoord::Dec","attribute vec2 tcoordMC; varying vec2 tcoordVCVSOutput;").result,o=z.substitute(o,"//VTK::TCoord::Dec",["in vec2 tcoordVCVSOutput[];","out vec2 tcoordVCGSOutput;"]).result,o=z.substitute(o,"//VTK::TCoord::Impl","tcoordVCGSOutput = tcoordVCVSOutput[i];").result,u=z.substitute(u,"//VTK::TCoord::Dec",["varying vec2 tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,c&&c.length>=1)switch(f){case 1:u=z.substitute(u,"//VTK::TCoord::Impl",[" vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"]).result;break;case 2:u=z.substitute(u,"//VTK::TCoord::Impl",[" vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"," opacity = opacity * tcolor.g;"]).result;break;default:u=z.substitute(u,"//VTK::TCoord::Impl",[" vec4 tcolor = texture2D(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.rgb;"," diffuseColor = diffuseColor*tcolor.rgb;"," opacity = opacity * tcolor.a;"]).result}}else switch(i=z.substitute(i,"//VTK::TCoord::Dec","attribute vec3 tcoordMC; varying vec3 tcoordVCVSOutput;").result,o=z.substitute(o,"//VTK::TCoord::Dec",["in vec3 tcoordVCVSOutput[];","out vec3 tcoordVCGSOutput;"]).result,o=z.substitute(o,"//VTK::TCoord::Impl","tcoordVCGSOutput = tcoordVCVSOutput[i];").result,u=z.substitute(u,"//VTK::TCoord::Dec",["varying vec3 tcoordVCVSOutput;","uniform samplerCube texture1;"]).result,f){case 1:u=z.substitute(u,"//VTK::TCoord::Impl",[" vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"]).result;break;case 2:u=z.substitute(u,"//VTK::TCoord::Impl",[" vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.r;"," diffuseColor = diffuseColor*tcolor.r;"," opacity = opacity * tcolor.g;"]).result;break;default:u=z.substitute(u,"//VTK::TCoord::Impl",[" vec4 tcolor = textureCube(texture1, tcoordVCVSOutput);"," ambientColor = ambientColor*tcolor.rgb;"," diffuseColor = diffuseColor*tcolor.rgb;"," opacity = opacity * tcolor.a;"]).result}r.Vertex=i,r.Geometry=o,r.Fragment=u}},t.replaceShaderClip=(r,a,s)=>{let i=r.Vertex,o=r.Fragment;if(e.renderable.getNumberOfClippingPlanes()){const u=e.renderable.getNumberOfClippingPlanes();i=z.substitute(i,"//VTK::Clip::Dec",["uniform int numClipPlanes;",`uniform vec4 clipPlanes[${u}];`,`varying float clipDistancesVSOutput[${u}];`]).result,i=z.substitute(i,"//VTK::Clip::Impl",[`for (int planeNum = 0; planeNum < ${u}; planeNum++)`," {"," if (planeNum >= numClipPlanes)"," {"," break;"," }"," clipDistancesVSOutput[planeNum] = dot(clipPlanes[planeNum], vertexMC);"," }"]).result,o=z.substitute(o,"//VTK::Clip::Dec",["uniform int numClipPlanes;",`varying float clipDistancesVSOutput[${u}];`]).result,o=z.substitute(o,"//VTK::Clip::Impl",[`for (int planeNum = 0; planeNum < ${u}; planeNum++)`," {"," if (planeNum >= numClipPlanes)"," {"," break;"," }"," if (clipDistancesVSOutput[planeNum] < 0.0) discard;"," }"]).result}r.Vertex=i,r.Fragment=o},t.getCoincidentParameters=(r,a)=>{let s={factor:0,offset:0};const i=a.getProperty();if(e.renderable.getResolveCoincidentTopology()||i.getEdgeVisibility()&&i.getRepresentation()===Qn.SURFACE){const u=e.lastBoundBO.getPrimitiveType();u===We.Points||i.getRepresentation()===Qn.POINTS?s=e.renderable.getCoincidentTopologyPointOffsetParameter():u===We.Lines||i.getRepresentation()===Qn.WIREFRAME?s=e.renderable.getCoincidentTopologyLineOffsetParameters():(u===We.Tris||u===We.TriStrips)&&(s=e.renderable.getCoincidentTopologyPolygonOffsetParameters()),(u===We.TrisEdges||u===We.TriStripsEdges)&&(s=e.renderable.getCoincidentTopologyPolygonOffsetParameters(),s.factor/=2,s.offset/=2)}const o=e._openGLRenderer.getSelector();return o&&o.getFieldAssociation()===Gs.FIELD_ASSOCIATION_POINTS&&(s.offset-=2),s},t.replaceShaderPicking=(r,a,s)=>{let i=r.Fragment,o=r.Vertex;if(i=z.substitute(i,"//VTK::Picking::Dec",["uniform int picking;","//VTK::Picking::Dec"]).result,!!e._openGLRenderer.getSelector()){switch((e.lastSelectionState===nt.ID_LOW24||e.lastSelectionState===nt.ID_HIGH24)&&(o=z.substitute(o,"//VTK::Picking::Dec",[`flat out int vertexIDVSOutput;
`,`uniform int VertexIDOffset;
`]).result,o=z.substitute(o,"//VTK::Picking::Impl",` vertexIDVSOutput = gl_VertexID + VertexIDOffset;
`).result,i=z.substitute(i,"//VTK::Picking::Dec",`flat in int vertexIDVSOutput;
`).result,i=z.substitute(i,"//VTK::Picking::Impl",[" int idx = vertexIDVSOutput;","//VTK::Picking::Impl"]).result),e.lastSelectionState){case nt.ID_LOW24:i=z.substitute(i,"//VTK::Picking::Impl"," gl_FragData[0] = vec4(float(idx%256)/255.0, float((idx/256)%256)/255.0, float((idx/65536)%256)/255.0, 1.0);").result;break;case nt.ID_HIGH24:i=z.substitute(i,"//VTK::Picking::Impl"," gl_FragData[0] = vec4(float(idx)/255.0, 0.0, 0.0, 1.0);").result;break;default:i=z.substitute(i,"//VTK::Picking::Dec","uniform vec3 mapperIndex;").result,i=z.substitute(i,"//VTK::Picking::Impl"," gl_FragData[0] = picking != 0 ? vec4(mapperIndex,1.0) : gl_FragData[0];").result}r.Fragment=i,r.Vertex=o}},t.replaceShaderValues=(r,a,s)=>{if(t.replaceShaderColor(r,a,s),t.replaceShaderNormal(r,a,s),t.replaceShaderLight(r,a,s),t.replaceShaderTCoord(r,a,s),t.replaceShaderPicking(r,a,s),t.replaceShaderClip(r,a,s),t.replaceShaderCoincidentOffset(r,a,s),t.replaceShaderPositionVC(r,a,s),e.haveSeenDepthRequest){let i=r.Fragment;i=z.substitute(i,"//VTK::ZBuffer::Dec","uniform int depthRequest;").result,i=z.substitute(i,"//VTK::ZBuffer::Impl",["if (depthRequest == 1) {","float iz = floor(gl_FragCoord.z*65535.0 + 0.1);","float rf = floor(iz/256.0)/255.0;","float gf = mod(iz,256.0)/255.0;","gl_FragData[0] = vec4(rf, gf, 0.0, 1.0); }"]).result,r.Fragment=i}},t.getNeedToRebuildShaders=(r,a,s)=>{let i=0,o=0;const u=r.getPrimitiveType(),c=e.currentInput;let f=!1;const l=c.getPointData().getNormals(),g=c.getCellData().getNormals(),p=s.getProperty().getInterpolation()===Dc.FLAT,T=s.getProperty().getRepresentation(),h=r.getOpenGLMode(T,u);if((h===e.context.TRIANGLES||g&&!l||!p&&l||!p&&h===e.context.LINES)&&(f=!0),s.getProperty().getLighting()&&f){i=0;const y=a.getLightsByReference();for(let v=0;v0&&(o++,i===0&&(i=1)),i===1&&(o>1||w.getIntensity()!==1||!w.lightTypeIsHeadLight())&&(i=2),i<3&&w.getPositional()&&(i=3)}}let d=!1;const x=e.lastBoundBO.getReferenceByName("lastLightComplexity"),C=e.lastBoundBO.getReferenceByName("lastLightCount");return(x!==i||C!==o)&&(e.lastBoundBO.set({lastLightComplexity:i},!0),e.lastBoundBO.set({lastLightCount:o},!0),d=!0),(!e.currentRenderPass&&e.lastRenderPassShaderReplacement||e.currentRenderPass&&e.currentRenderPass.getShaderReplacement()!==e.lastRenderPassShaderReplacement)&&(d=!0),e.lastHaveSeenDepthRequest!==e.haveSeenDepthRequest||r.getShaderSourceTime().getMTime(){const i=e.renderable.getViewSpecificProperties().ShadersCallbacks;i&&i.forEach(o=>{o.callback(o.userData,r,a,s)})},t.setMapperShaderParameters=(r,a,s)=>{if(r.getProgram().isUniformUsed("PrimitiveIDOffset")&&r.getProgram().setUniformi("PrimitiveIDOffset",e.primitiveIDOffset),r.getProgram().isUniformUsed("VertexIDOffset")&&r.getProgram().setUniformi("VertexIDOffset",e.vertexIDOffset),r.getCABO().getElementCount()&&(e.VBOBuildTime.getMTime()>r.getAttributeUpdateTime().getMTime()||r.getShaderSourceTime().getMTime()>r.getAttributeUpdateTime().getMTime())){const u=e.lastBoundBO.getReferenceByName("lastLightComplexity");r.getProgram().isAttributeUsed("vertexMC")&&(r.getVAO().addAttributeArray(r.getProgram(),r.getCABO(),"vertexMC",r.getCABO().getVertexOffset(),r.getCABO().getStride(),e.context.FLOAT,3,!1)||Mn("Error setting vertexMC in shader VAO.")),r.getProgram().isAttributeUsed("normalMC")&&r.getCABO().getNormalOffset()&&u>0?r.getVAO().addAttributeArray(r.getProgram(),r.getCABO(),"normalMC",r.getCABO().getNormalOffset(),r.getCABO().getStride(),e.context.FLOAT,3,!1)||Mn("Error setting normalMC in shader VAO."):r.getVAO().removeAttributeArray("normalMC"),e.renderable.getCustomShaderAttributes().forEach((c,f)=>{r.getProgram().isAttributeUsed(`${c}MC`)&&(r.getVAO().addAttributeArray(r.getProgram(),r.getCABO(),`${c}MC`,r.getCABO().getCustomData()[f].offset,r.getCABO().getStride(),e.context.FLOAT,r.getCABO().getCustomData()[f].components,!1)||Mn(`Error setting ${c}MC in shader VAO.`))}),r.getProgram().isAttributeUsed("tcoordMC")&&r.getCABO().getTCoordOffset()?r.getVAO().addAttributeArray(r.getProgram(),r.getCABO(),"tcoordMC",r.getCABO().getTCoordOffset(),r.getCABO().getStride(),e.context.FLOAT,r.getCABO().getTCoordComponents(),!1)||Mn("Error setting tcoordMC in shader VAO."):r.getVAO().removeAttributeArray("tcoordMC"),r.getProgram().isAttributeUsed("scalarColor")&&r.getCABO().getColorComponents()?r.getVAO().addAttributeArray(r.getProgram(),r.getCABO().getColorBO(),"scalarColor",r.getCABO().getColorOffset(),r.getCABO().getColorBOStride(),e.context.UNSIGNED_BYTE,4,!0)||Mn("Error setting scalarColor in shader VAO."):r.getVAO().removeAttributeArray("scalarColor"),r.getAttributeUpdateTime().modified()}if(e.renderable.getNumberOfClippingPlanes()){const u=e.renderable.getNumberOfClippingPlanes(),c=[],l=r.getCABO().getCoordShiftAndScaleEnabled()?r.getCABO().getInverseShiftAndScaleMatrix():null,g=l?qe(e.tmpMat4,s.getMatrix()):s.getMatrix();l&&(Oe(g,g),at(g,g,l),Oe(g,g));for(let p=0;p{const i=e.lastBoundBO.getReferenceByName("lastLightComplexity");if(i<2)return;const o=r.getProgram();let u=0;const c=a.getLightsByReference();for(let g=0;g0){const h=p.getColorByReference(),d=p.getIntensity();e.lightColor[0]=h[0]*d,e.lightColor[1]=h[1]*d,e.lightColor[2]=h[2]*d;const x=p.getDirection(),C=a.getActiveCamera().getViewMatrix(),y=[...x];p.lightTypeIsSceneLight()&&(y[0]=C[0]*x[0]+C[1]*x[1]+C[2]*x[2],y[1]=C[4]*x[0]+C[5]*x[1]+C[6]*x[2],y[2]=C[8]*x[0]+C[9]*x[1]+C[10]*x[2],jr(y)),e.lightDirection[0]=y[0],e.lightDirection[1]=y[1],e.lightDirection[2]=y[2],jr(e.lightDirection),o.setUniform3fArray(`lightColor${u}`,e.lightColor),o.setUniform3fArray(`lightDirectionVC${u}`,e.lightDirection),u++}}if(i<3)return;const l=a.getActiveCamera().getViewMatrix();Oe(l,l),u=0;for(let g=0;g0){const h=p.getTransformedPosition(),d=new Float64Array(3);xe(d,h,l),o.setUniform3fArray(`lightAttenuation${u}`,p.getAttenuationValuesByReference()),o.setUniformi(`lightPositional${u}`,p.getPositional()),o.setUniformf(`lightExponent${u}`,p.getExponent()),o.setUniformf(`lightConeAngle${u}`,p.getConeAngle()),o.setUniform3fArray(`lightPositionVC${u}`,[d[0],d[1],d[2]]),u++}}};function n(r,a,s){return a.identity(s),r.reduce((i,o,u)=>u===0?o?a.copy(i,o):a.identity(i):o?a.multiply(i,i,o):i,s)}t.setCameraShaderParameters=(r,a,s)=>{const i=r.getProgram(),o=e.openGLCamera.getKeyMatrices(a),u=a.getActiveCamera(),c=e.openGLCamera.getKeyMatrixTime().getMTime(),f=i.getLastCameraMTime(),g=r.getCABO().getCoordShiftAndScaleEnabled()?r.getCABO().getInverseShiftAndScaleMatrix():null,p=s.getIsIdentity(),T=p?{mcwc:null,normalMatrix:null}:e.openGLActor.getKeyMatrices();if(s.getCoordinateSystem()===zE.DISPLAY){const h=e._openGLRenderer.getTiledSizeAndOrigin();le(e.tmpMat4),e.tmpMat4[0]=2/h.usize,e.tmpMat4[12]=-1,e.tmpMat4[5]=2/h.vsize,e.tmpMat4[13]=-1,at(e.tmpMat4,e.tmpMat4,g),i.setUniformMatrix("MCPCMatrix",e.tmpMat4)}else i.setUniformMatrix("MCPCMatrix",n([o.wcpc,T.mcwc,g],ii,e.tmpMat4));i.isUniformUsed("MCVCMatrix")&&i.setUniformMatrix("MCVCMatrix",n([o.wcvc,T.mcwc,g],ii,e.tmpMat4)),i.isUniformUsed("normalMatrix")&&i.setUniformMatrix3x3("normalMatrix",n([o.normalMatrix,T.normalMatrix],wx,e.tmpMat3)),f!==c&&(i.isUniformUsed("cameraParallel")&&i.setUniformi("cameraParallel",u.getParallelProjection()),i.setLastCameraMTime(c)),p||i.setLastCameraMTime(0)},t.setPropertyShaderParameters=(r,a,s)=>{const i=r.getProgram();let o=s.getProperty(),u=o.getOpacity(),c=e.drawingEdges?o.getEdgeColorByReference():o.getAmbientColorByReference(),f=e.drawingEdges?o.getEdgeColorByReference():o.getDiffuseColorByReference(),l=e.drawingEdges?1:o.getAmbient(),g=e.drawingEdges?0:o.getDiffuse(),p=e.drawingEdges?0:o.getSpecular();const T=o.getSpecularPower();i.setUniformf("opacityUniform",u),i.setUniform3fArray("ambientColorUniform",c),i.setUniform3fArray("diffuseColorUniform",f),i.setUniformf("ambient",l),i.setUniformf("diffuse",g);const h=e.lastBoundBO.getReferenceByName("lastLightComplexity");if(h<1)return;let d=o.getSpecularColorByReference();if(i.setUniform3fArray("specularColorUniform",d),i.setUniformf("specularPowerUniform",T),i.setUniformf("specular",p),i.isUniformUsed("ambientIntensityBF")){if(o=s.getBackfaceProperty(),u=o.getOpacity(),c=o.getAmbientColor(),l=o.getAmbient(),f=o.getDiffuseColor(),g=o.getDiffuse(),d=o.getSpecularColor(),p=o.getSpecular(),i.setUniformf("ambientIntensityBF",l),i.setUniformf("diffuseIntensityBF",g),i.setUniformf("opacityUniformBF",u),i.setUniform3fArray("ambientColorUniformBF",c),i.setUniform3fArray("diffuseColorUniformBF",f),h<1)return;i.setUniformf("specularIntensityBF",p),i.setUniform3fArray("specularColorUniformBF",d),i.setUniformf("specularPowerUniformBF",T)}},t.updateMaximumPointCellIds=(r,a)=>{var o,u,c,f;const s=e._openGLRenderer.getSelector();if(!s)return;if((u=(o=e.selectionWebGLIdsToVTKIds)==null?void 0:o.points)!=null&&u.length){const l=e.selectionWebGLIdsToVTKIds.points.length;s.setMaximumPointId(l-1)}if((f=(c=e.selectionWebGLIdsToVTKIds)==null?void 0:c.cells)!=null&&f.length){const l=e.selectionWebGLIdsToVTKIds.cells.length;s.setMaximumCellId(l-1)}s.getFieldAssociation()===Gs.FIELD_ASSOCIATION_POINTS&&(e.pointPicking=!0)},t.renderPieceStart=(r,a)=>{e.primitiveIDOffset=0,e.vertexIDOffset=0;const s=AE(e._openGLRenderer);if(e.lastSelectionState!==s&&(e.selectionStateChanged.modified(),e.lastSelectionState=s),e._openGLRenderer.getSelector())switch(s){default:e._openGLRenderer.getSelector().renderProp(a)}t.updateBufferObjects(r,a),e.renderable.getColorTextureMap()&&e.internalColorTexture.activate(),e.lastBoundBO=null},t.renderPieceDraw=(r,a)=>{const s=a.getProperty().getRepresentation(),i=a.getProperty().getEdgeVisibility()&&s===Qn.SURFACE,o=e._openGLRenderer.getSelector(),u=o&&o.getFieldAssociation()===Gs.FIELD_ASSOCIATION_POINTS&&(e.lastSelectionState===nt.ID_LOW24||e.lastSelectionState===nt.ID_HIGH24);for(let c=We.Start;c=0))&&(e.lastBoundBO=e.primitives[c],e.primitiveIDOffset+=e.primitives[c].drawArrays(r,a,s,t),e.vertexIDOffset+=e.primitives[c].getCABO().getElementCount()))},t.renderPieceFinish=(r,a)=>{e.LastBoundBO&&e.LastBoundBO.getVAO().release(),e.renderable.getColorTextureMap()&&e.internalColorTexture.deactivate()},t.renderPiece=(r,a)=>{if(t.invokeEvent($E),e.renderable.getStatic()||e.renderable.update(),e.currentInput=e.renderable.getInputData(),t.invokeEvent(WE),!e.currentInput){Mn("No input!");return}if(!e.currentInput.getPoints||!e.currentInput.getPoints().getNumberOfValues())return;const s=e.context,i=a.getProperty().getBackfaceCulling(),o=a.getProperty().getFrontfaceCulling();!i&&!o?e._openGLRenderWindow.disableCullFace():o?(e._openGLRenderWindow.enableCullFace(),s.cullFace(s.FRONT)):(e._openGLRenderWindow.enableCullFace(),s.cullFace(s.BACK)),t.renderPieceStart(r,a),t.renderPieceDraw(r,a),t.renderPieceFinish(r,a)},t.computeBounds=(r,a)=>{if(!t.getInput()){Ii(e.bounds);return}e.bounds=t.getInput().getBounds()},t.updateBufferObjects=(r,a)=>{t.getNeedToRebuildBufferObjects(r,a)&&t.buildBufferObjects(r,a)},t.getNeedToRebuildBufferObjects=(r,a)=>{const s=e.VBOBuildTime.getMTime();return s{const s=e.currentInput;if(s===null)return;e.renderable.mapScalars(s,1);const i=e.renderable.getColorMapColors();e.haveCellScalars=!1;const o=e.renderable.getScalarMode();e.renderable.getScalarVisibility()&&(o===da.USE_CELL_DATA||o===da.USE_CELL_FIELD_DATA||o===da.USE_FIELD_DATA||!s.getPointData().getScalars())&&o!==da.USE_POINT_FIELD_DATA&&i&&(e.haveCellScalars=!0);let u=a.getProperty().getInterpolation()!==Dc.FLAT?s.getPointData().getNormals():null;u===null&&s.getCellData().getNormals()&&(e.haveCellNormals=!0,u=s.getCellData().getNormals());const c=a.getProperty().getRepresentation();let f=s.getPointData().getTCoords();if(e.openGLActor.getActiveTextures()||(f=null),e.renderable.getColorCoordinates()){f=e.renderable.getColorCoordinates(),e.internalColorTexture||(e.internalColorTexture=Wn.newInstance({resizable:!0}));const g=e.internalColorTexture;g.setMinificationFilter(Mc.NEAREST),g.setMagnificationFilter(Mc.NEAREST),g.setWrapS(Vc.CLAMP_TO_EDGE),g.setWrapT(Vc.CLAMP_TO_EDGE),g.setOpenGLRenderWindow(e._openGLRenderWindow);const p=e.renderable.getColorTextureMap(),T=p.getExtent(),h=p.getPointData().getScalars();g.create2DFromRaw(T[1]-T[0]+1,T[3]-T[2]+1,h.getNumberOfComponents(),h.getDataType(),h.getData()),g.activate(),g.sendParameters(),g.deactivate()}const l=`${s.getMTime()}A${c}B${s.getMTime()}C${u?u.getMTime():1}D${i?i.getMTime():1}E${a.getProperty().getEdgeVisibility()}F${f?f.getMTime():1}`;if(e.VBOBuildString!==l){const p={points:s.getPoints(),normals:u,tcoords:f,colors:i,cellOffset:0,vertexOffset:0,haveCellScalars:e.haveCellScalars,haveCellNormals:e.haveCellNormals,customAttributes:e.renderable.getCustomShaderAttributes().map(d=>s.getPointData().getArrayByName(d))};e.renderable.getPopulateSelectionSettings()&&(e.selectionWebGLIdsToVTKIds={points:null,cells:null});const T=[{inRep:"verts",cells:s.getVerts()},{inRep:"lines",cells:s.getLines()},{inRep:"polys",cells:s.getPolys()},{inRep:"strips",cells:s.getStrips()},{inRep:"polys",cells:s.getPolys()},{inRep:"strips",cells:s.getStrips()}],h=a.getProperty().getEdgeVisibility()&&c===Qn.SURFACE;for(let d=We.Start;d{let r=0;return e.primitives.forEach(a=>{r+=a.getAllocatedGPUMemoryInBytes()}),r}}const jE={context:null,VBOBuildTime:0,VBOBuildString:null,primitives:null,primTypes:null,shaderRebuildString:null,tmpMat4:null,ambientColor:[],diffuseColor:[],specularColor:[],lightColor:[],lightDirection:[],lastHaveSeenDepthRequest:!1,haveSeenDepthRequest:!1,lastSelectionState:nt.MIN_KNOWN_PASS-1,selectionStateChanged:null,selectionWebGLIdsToVTKIds:null,pointPicking:!1};function KE(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,jE,n),Be.extend(t,e,n),rs.implementReplaceShaderCoincidentOffset(t,e,n),rs.implementBuildShadersWithReplacements(t,e,n),e.primitives=[],e.primTypes=We,e.tmpMat3=Kn(new Float64Array(9)),e.tmpMat4=le(new Float64Array(16));for(let r=We.Start;r{e.lookupTable=Br.newInstance()},t.getColorModeAsString=()=>E.enumToString(XE,e.colorMode),t.setColorModeToDefault=()=>t.setColorMode(0),t.setColorModeToMapScalars=()=>t.setColorMode(1),t.setColorModeToDirectScalars=()=>t.setColorMode(2),t.getScalarModeAsString=()=>E.enumToString(Vn,e.scalarMode),t.setScalarModeToDefault=()=>t.setScalarMode(0),t.setScalarModeToUsePointData=()=>t.setScalarMode(1),t.setScalarModeToUseCellData=()=>t.setScalarMode(2),t.setScalarModeToUsePointFieldData=()=>t.setScalarMode(3),t.setScalarModeToUseCellFieldData=()=>t.setScalarMode(4),t.setScalarModeToUseFieldData=()=>t.setScalarMode(5),t.getAbstractScalars=(n,r,a,s,i)=>{if(!n||!e.scalarVisibility)return{scalars:null,cellFLag:!1};let o=null,u=!1;if(r===Vn.DEFAULT)o=n.getPointData().getScalars(),o||(o=n.getCellData().getScalars(),u=!0);else if(r===Vn.USE_POINT_DATA)o=n.getPointData().getScalars();else if(r===Vn.USE_CELL_DATA)o=n.getCellData().getScalars(),u=!0;else if(r===Vn.USE_POINT_FIELD_DATA){const c=n.getPointData();a===$s.BY_ID?o=c.getArrayByIndex(s):o=c.getArrayByName(i)}else if(r===Vn.USE_CELL_FIELD_DATA){const c=n.getCellData();u=!0,a===$s.BY_ID?o=c.getArrayByIndex(s):o=c.getArrayByName(i)}else if(r===Vn.USE_FIELD_DATA){const c=n.getFieldData();a===$s.BY_ID?o=c.getArrayByIndex(s):o=c.getArrayByName(i)}return{scalars:o,cellFlag:u}},t.getLookupTable=()=>(e.lookupTable||t.createDefaultLookupTable(),e.lookupTable),t.getMTime=()=>{let n=e.mtime;if(e.lookupTable!==null){const r=e.lookupTable.getMTime();n=r>n?r:n}return n},t.mapScalars=(n,r)=>{const a=t.getAbstractScalars(n,e.scalarMode,e.arrayAccessMode,e.arrayId,e.colorByArrayName).scalars;if(!a){e.colorMapColors=null;return}const s=`${t.getMTime()}${a.getMTime()}${r}`;if(e.colorBuildString===s)return;e.useLookupTableScalarRange||t.getLookupTable().setRange(e.scalarRange[0],e.scalarRange[1]);const i=t.getLookupTable();i&&(i.build(),e.colorMapColors=i.mapScalars(a,e.colorMode,e.fieldDataTupleId)),e.colorBuildString=`${t.getMTime()}${a.getMTime()}${r}`},t.getPrimitiveCount=()=>{const n=t.getInputData();return{points:n.getPoints().getNumberOfValues()/3,verts:n.getVerts().getNumberOfValues()-n.getVerts().getNumberOfCells(),lines:n.getLines().getNumberOfValues()-2*n.getLines().getNumberOfCells(),triangles:n.getPolys().getNumberOfValues()-3*n.getPolys().getNumberOfCells()}}}const YE={static:!1,lookupTable:null,scalarVisibility:!1,scalarRange:[0,1],useLookupTableScalarRange:!1,colorMode:0,scalarMode:0,arrayAccessMode:1,renderTime:0,colorByArrayName:null,transformCoordinate:null,viewSpecificProperties:null,customShaderAttributes:[]};function Jl(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,YE,n),ul.extend(t,e,n),E.get(t,e,["colorMapColors"]),E.setGet(t,e,["arrayAccessMode","colorByArrayName","colorMode","lookupTable","renderTime","scalarMode","scalarVisibility","static","transformCoordinate","useLookupTableScalarRange","viewSpecificProperties","customShaderAttributes"]),E.setGetArray(t,e,["scalarRange"],2),e.viewSpecificProperties||(e.viewSpecificProperties={}),IE(t,e)}const qE=E.newInstance(Jl,"vtkMapper2D");var QE={newInstance:qE,extend:Jl},ZE=`//VTK::System::Dec
/*=========================================================================
Program: Visualization Toolkit
Module: vtkPolyData2DFS.glsl
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
uniform int PrimitiveIDOffset;
// Texture coordinates
//VTK::TCoord::Dec
// Scalar coloring
//VTK::Color::Dec
// Depth Peeling
//VTK::DepthPeeling::Dec
// picking support
//VTK::Picking::Dec
// the output of this shader
//VTK::Output::Dec
// Apple Bug
//VTK::PrimID::Dec
void main()
{
// Apple Bug
//VTK::PrimID::Impl
//VTK::Color::Impl
//VTK::TCoord::Impl
//VTK::DepthPeeling::Impl
//VTK::Picking::Impl
if (gl_FragData[0].a <= 0.0)
{
discard;
}
}
`,JE=`//VTK::System::Dec
/*=========================================================================
Program: Visualization Toolkit
Module: vtkPolyData2DVS.glsl
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// all variables that represent positions or directions have a suffix
// indicating the coordinate system they are in. The possible values are
// MC - Model Coordinates
// WC - WC world coordinates
// VC - View Coordinates
// DC - Display Coordinates
in vec4 vertexWC;
// frag position in VC
//VTK::PositionVC::Dec
// material property values
//VTK::Color::Dec
// Texture coordinates
//VTK::TCoord::Dec
// Apple Bug
//VTK::PrimID::Dec
uniform mat4 WCVCMatrix; // World to view matrix
void main()
{
// Apple Bug
//VTK::PrimID::Impl
gl_Position = WCVCMatrix*vertexWC;
//VTK::TCoord::Impl
//VTK::Color::Impl
//VTK::PositionVC::Impl
}
`;const eg={BACKGROUND:0,FOREGROUND:1};var tg={DisplayLocation:eg};const{primTypes:Et}=wr,{ScalarMode:va}=QE,{vtkErrorMacro:ya}=Pt,e_={type:"StartEvent"},t_={type:"EndEvent"};function n_(t,e){e.classHierarchy.push("vtkOpenGLPolyDataMapper2D"),t.buildPass=r=>{r&&(e.openGLActor2D=t.getFirstAncestorOfType("vtkOpenGLActor2D"),e._openGLRenderer=e.openGLActor2D.getFirstAncestorOfType("vtkOpenGLRenderer"),e._openGLRenderWindow=e._openGLRenderer.getParent(),e.openGLCamera=e._openGLRenderer.getViewNodeFor(e._openGLRenderer.getRenderable().getActiveCamera()))},t.overlayPass=r=>{r&&t.render()},t.getShaderTemplate=(r,a,s)=>{r.Vertex=JE,r.Fragment=ZE,r.Geometry=""},t.render=()=>{const r=e._openGLRenderWindow.getContext();if(e.context!==r){e.context=r;for(let i=Et.Start;i{if(t.invokeEvent(e_),e.renderable.getStatic()||e.renderable.update(),e.currentInput=e.renderable.getInputData(),t.invokeEvent(t_),!e.currentInput){ya("No input!");return}!e.currentInput.getPoints||!e.currentInput.getPoints().getNumberOfValues()||(t.renderPieceStart(r,a),t.renderPieceDraw(r,a),t.renderPieceFinish(r,a))},t.renderPieceStart=(r,a)=>{if(e.primitiveIDOffset=0,e._openGLRenderer.getSelector())switch(e._openGLRenderer.getSelector().getCurrentPass()){default:e._openGLRenderer.getSelector().renderProp(a)}t.updateBufferObjects(r,a),e.lastBoundBO=null},t.getNeedToRebuildShaders=(r,a,s)=>r.getShaderSourceTime().getMTime(){t.getNeedToRebuildBufferObjects(r,a)&&t.buildBufferObjects(r,a)},t.getNeedToRebuildBufferObjects=(r,a)=>{const s=e.VBOBuildTime.getMTime();return!!(s{const s=e.currentInput;if(s===null)return;e.renderable.mapScalars(s,a.getProperty().getOpacity());const i=e.renderable.getColorMapColors();e.haveCellScalars=!1;const o=e.renderable.getScalarMode();e.renderable.getScalarVisibility()&&(o===va.USE_CELL_DATA||o===va.USE_CELL_FIELD_DATA||o===va.USE_FIELD_DATA||!s.getPointData().getScalars())&&o!==va.USE_POINT_FIELD_DATA&&i&&(e.haveCellScalars=!0);const u=a.getProperty().getRepresentation();let c=s.getPointData().getTCoords();e.openGLActor2D.getActiveTextures()||(c=null);const f=e.renderable.getTransformCoordinate(),g=r.getRenderWindow().getViews()[0].getViewportSize(r),p=`${s.getMTime()}A${u}B${s.getMTime()}C${i?i.getMTime():1}D${c?c.getMTime():1}E${f?r.getMTime():1}F${g}`;if(e.VBOBuildString!==p){let T=s.getPoints();if(f){const d=es.newInstance(),x=T.getNumberOfPoints();d.setNumberOfPoints(x);const C=[];for(let y=0;ys.getPointData().getArrayByName(d))};h.cellOffset+=e.primitives[Et.Points].getCABO().createVBO(s.getVerts(),"verts",u,h),h.cellOffset+=e.primitives[Et.Lines].getCABO().createVBO(s.getLines(),"lines",u,h),h.cellOffset+=e.primitives[Et.Tris].getCABO().createVBO(s.getPolys(),"polys",u,h),h.cellOffset+=e.primitives[Et.TriStrips].getCABO().createVBO(s.getStrips(),"strips",u,h),e.VBOBuildTime.modified(),e.VBOBuildString=p}},t.renderPieceDraw=(r,a)=>{const s=a.getProperty().getRepresentation();e.context.depthMask(!0);for(let o=Et.Start;o{e.lastBoundBO&&e.lastBoundBO.getVAO().release()},t.replaceShaderValues=(r,a,s)=>{t.replaceShaderColor(r,a,s),t.replaceShaderTCoord(r,a,s),t.replaceShaderPicking(r,a,s),t.replaceShaderPositionVC(r,a,s)},t.replaceShaderColor=(r,a,s)=>{let i=r.Vertex,o=r.Geometry,u=r.Fragment;e.haveCellScalars&&(u=z.substitute(u,"//VTK::Color::Dec",["uniform samplerBuffer texture1;"]).result,u=z.substitute(u,"//VTK::Color::Impl",["gl_FragData[0] = texelFetchBuffer(texture1, gl_PrimitiveID + PrimitiveIDOffset);"]).result),e.lastBoundBO.getCABO().getColorComponents()!==0?(i=z.substitute(i,"//VTK::Color::Dec",["in vec4 diffuseColor;","out vec4 fcolorVSOutput;"]).result,i=z.substitute(i,"//VTK::Color::Impl",["fcolorVSOutput = diffuseColor;"]).result,o=z.substitute(o,"//VTK::Color::Dec",[`in vec4 fcolorVSOutput[];
`,"out vec4 fcolorGSOutput;"]).result,o=z.substitute(o,"//VTK::Color::Impl",["fcolorGSOutput = fcolorVSOutput[i];"]).result,u=z.substitute(u,"//VTK::Color::Dec",["in vec4 fcolorVSOutput;"]).result,u=z.substitute(u,"//VTK::Color::Impl",["gl_FragData[0] = fcolorVSOutput;"]).result):(u=z.substitute(u,"//VTK::Color::Dec",["uniform vec4 diffuseColor;"]).result,u=z.substitute(u,"//VTK::Color::Impl",["gl_FragData[0] = diffuseColor;"]).result),r.Vertex=i,r.Geometry=o,r.Fragment=u},t.replaceShaderTCoord=(r,a,s)=>{if(e.lastBoundBO.getCABO().getTCoordOffset()){let i=r.Vertex,o=r.Geometry,u=r.Fragment;const c=e.lastBoundBO.getCABO().getTCoordComponents();c===1?(i=z.substitute(i,"//VTK::TCoord::Dec",["in float tcoordMC;","out float tcoordVCVSOutput;"]).result,i=z.substitute(i,"//VTK::TCoord::Impl",["tcoordVCVSOutput = tcoordMC;"]).result,o=z.substitute(o,"//VTK::TCoord::Dec",[`in float tcoordVCVSOutput[];
`,"out float tcoordVCGSOutput;"]).result,o=z.substitute(o,["//VTK::TCoord::Impl","tcoordVCGSOutput = tcoordVCVSOutput[i];"]).result,u=z.substitute(u,"//VTK::TCoord::Dec",["in float tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,u=z.substitute(u,"//VTK::TCoord::Impl",["gl_FragData[0] = gl_FragData[0]*texture2D(texture1, vec2(tcoordVCVSOutput,0));"]).result):c===2&&(i=z.substitute(i,"//VTK::TCoord::Dec",["in vec2 tcoordMC;","out vec2 tcoordVCVSOutput;"]).result,i=z.substitute(i,"//VTK::TCoord::Impl",["tcoordVCVSOutput = tcoordMC;"]).result,o=z.substitute(o,"//VTK::TCoord::Dec",[`in vec2 tcoordVCVSOutput[];
`,"out vec2 tcoordVCGSOutput;"]).result,o=z.substitute(o,"//VTK::TCoord::Impl",["tcoordVCGSOutput = tcoordVCVSOutput[i];"]).result,u=z.substitute(u,"//VTK::TCoord::Dec",["in vec2 tcoordVCVSOutput;","uniform sampler2D texture1;"]).result,u=z.substitute(u,"//VTK::TCoord::Impl",["gl_FragData[0] = gl_FragData[0]*texture2D(texture1, tcoordVCVSOutput.st);"]).result),e.haveCellScalars&&(o=z.substitute(o,"//VTK::PrimID::Impl",["gl_PrimitiveID = gl_PrimitiveIDIn;"]).result),r.Vertex=i,r.Geometry=o,r.Fragment=u}},t.replaceShaderPicking=(r,a,s)=>{let i=r.Fragment;i=z.substitute(i,"//VTK::Picking::Dec",["uniform vec3 mapperIndex;","uniform int picking;"]).result,i=z.substitute(i,"//VTK::Picking::Impl"," gl_FragData[0] = picking != 0 ? vec4(mapperIndex,1.0) : gl_FragData[0];").result,r.Fragment=i},t.replaceShaderPositionVC=(r,a,s)=>{e.lastBoundBO.replaceShaderPositionVC(r,a,s)},t.invokeShaderCallbacks=(r,a,s)=>{const i=e.renderable.getViewSpecificProperties().ShadersCallbacks;i&&i.forEach(o=>{o.callback(o.userData,r,a,s)})},t.setMapperShaderParameters=(r,a,s)=>{if(r.getProgram().isUniformUsed("PrimitiveIDOffset")&&r.getProgram().setUniformi("PrimitiveIDOffset",e.primitiveIDOffset),r.getProgram().isAttributeUsed("vertexWC")&&(r.getVAO().addAttributeArray(r.getProgram(),r.getCABO(),"vertexWC",r.getCABO().getVertexOffset(),r.getCABO().getStride(),e.context.FLOAT,3,!1)||ya("Error setting vertexWC in shader VAO.")),r.getCABO().getElementCount()&&(e.VBOBuildTime.getMTime()>r.getAttributeUpdateTime().getMTime()||r.getShaderSourceTime().getMTime()>r.getAttributeUpdateTime().getMTime())){e.renderable.getCustomShaderAttributes().forEach((u,c)=>{r.getProgram().isAttributeUsed(`${u}MC`)&&(r.getVAO().addAttributeArray(r.getProgram(),r.getCABO(),`${u}MC`,r.getCABO().getCustomData()[c].offset,r.getCABO().getStride(),e.context.FLOAT,r.getCABO().getCustomData()[c].components,!1)||ya(`Error setting ${u}MC in shader VAO.`))}),r.getProgram().isAttributeUsed("tcoordMC")&&r.getCABO().getTCoordOffset()?r.getVAO().addAttributeArray(r.getProgram(),r.getCABO(),"tcoordMC",r.getCABO().getTCoordOffset(),r.getCABO().getStride(),e.context.FLOAT,r.getCABO().getTCoordComponents(),!1)||ya("Error setting tcoordMC in shader VAO."):r.getVAO().removeAttributeArray("tcoordMC"),e.internalColorTexture&&r.getProgram().isUniformUsed("texture1")&&r.getProgram().setUniformi("texture1",e.internalColorTexture.getTextureUnit());const i=e.openGLActor2D.getActiveTextures();if(i)for(let u=0;u{const i=e.renderable.getColorMapColors();if(!i||i.getNumberOfComponents()===0){const o=r.getProgram(),u=s.getProperty(),c=u.getOpacity(),f=u.getColor(),l=[f[0],f[1],f[2],c];o.setUniform4f("diffuseColor",l)}},t.setLightingShaderParameters=(r,a,s)=>{};function n(r,a,s){return a.identity(s),r.reduce((i,o,u)=>u===0?o?a.copy(i,o):a.identity(i):o?a.multiply(i,i,o):i,s)}t.setCameraShaderParameters=(r,a,s)=>{const i=r.getProgram(),u=r.getCABO().getCoordShiftAndScaleEnabled()?r.getCABO().getInverseShiftAndScaleMatrix():null,f=a.getRenderWindow().getViews()[0].getViewportSize(a),l=a.getViewport(),g=s.getActualPositionCoordinate().getComputedDoubleViewportValue(a),p=[0,0,1,1],T=[0,0,1,1];if(T[0]=l[0]>=p[0]?l[0]:p[0],T[1]=l[1]>=p[1]?l[1]:p[1],T[2]=l[2]<=p[2]?l[2]:p[2],T[3]=l[3]<=p[3]?l[3]:p[3],T[0]>=T[2]||T[1]>=T[3])return;f[0]=ia(f[0]*(T[2]-T[0])/(l[2]-l[0])),f[1]=ia(f[1]*(T[3]-T[1])/(l[3]-l[1]));const h=e._openGLRenderer.getParent().getSize(),d=ia(g[0]-(T[0]-l[0])*h[0]),x=ia(g[1]-(T[1]-l[1])*h[1]),C=-d;let y=-d+f[0];const v=-x;let w=-x+f[1];C===y&&(y=C+1),v===w&&(w=v+1);const S=le(new Float64Array(16));S[0]=2/(y-C),S[1*4+1]=2/(w-v),S[0*4+3]=-1*(y+C)/(y-C),S[1*4+3]=-1*(w+v)/(w-v),S[2*4+2]=0,S[2*4+3]=s.getProperty().getDisplayLocation()===eg.FOREGROUND?-1:1,S[3*4+3]=1,Oe(S,S),i.setUniformMatrix("WCVCMatrix",n([S,u],ii,e.tmpMat4))},t.getAllocatedGPUMemoryInBytes=()=>{let r=0;return e.primitives.forEach(a=>{r+=a.getAllocatedGPUMemoryInBytes()}),r}}const r_={context:null,VBOBuildTime:0,VBOBuildString:null,primitives:null,primTypes:null,shaderRebuildString:null};function a_(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,r_,n),Be.extend(t,e,n),rs.implementReplaceShaderCoincidentOffset(t,e,n),rs.implementBuildShadersWithReplacements(t,e,n),e.primitives=[],e.primTypes=Et,e.tmpMat4=le(new Float64Array(16));for(let r=Et.Start;r{const r=n.getLastSize(),a=(r[0]/700)**.8,s=(r[1]/700)**.8,i=Math.min(a,s),o=n.getAxisTextStyle(),u=n.getTickTextStyle();Object.assign(o,e.axisTextStyle),Object.assign(u,e.tickTextStyle),o.fontSize=Math.max(24*i,12),n.getLastAspectRatio()>1?u.fontSize=Math.max(20*i,10):u.fontSize=Math.max(16*i,10);const c=n.updateTextureAtlas();n.setTopTitle(!1);const f=n.getBoxSizeByReference();if(n.getLastAspectRatio()>1)n.setTickLabelPixelOffset(.3*u.fontSize),c.titleWidth<=c.tickWidth+n.getTickLabelPixelOffset()+.8*u.fontSize?(n.setTopTitle(!0),n.setAxisTitlePixelOffset(.2*u.fontSize),f[0]=2*(c.tickWidth+n.getTickLabelPixelOffset()+.8*u.fontSize)/r[0],n.setBoxPosition([.98-f[0],-.92])):(n.setAxisTitlePixelOffset(.2*u.fontSize),f[0]=2*(c.titleHeight+n.getAxisTitlePixelOffset()+c.tickWidth+n.getTickLabelPixelOffset()+.8*u.fontSize)/r[0],n.setBoxPosition([.99-f[0],-.92])),f[1]=Math.max(1.2,Math.min(1.84/s,1.84));else{n.setAxisTitlePixelOffset(1.2*u.fontSize),n.setTickLabelPixelOffset(.1*u.fontSize);const l=2*(.8*u.fontSize+c.titleHeight+n.getAxisTitlePixelOffset())/r[1],g=2*c.tickWidth/r[0];f[0]=Math.min(1.9,Math.max(1.4,1.4*g*(n.getTicks().length+3))),f[1]=l,n.setBoxPosition([-.5*f[0],-.97])}n.recomputeBarSegments(c)}}function rg(t,e){return n=>{const r=n.getLastTickBounds(),a=os().domain([r[0],r[1]]),s=a.ticks(5),i=a.tickFormat(5);n.setTicks(s),n.setTickStrings(s.map(i))}}function o_(t,e){e.classHierarchy.push("vtkScalarBarActorHelper"),t.setRenderable=a=>{e.renderable!==a&&(e.renderable=a,e.barActor.setProperty(a.getProperty()),e.barActor.setParentProp(a),e.barActor.setCoordinateSystemToDisplay(),e.tmActor.setProperty(a.getProperty()),e.tmActor.setParentProp(a),e.tmActor.setCoordinateSystemToDisplay(),e.generateTicks=a.generateTicks,e.axisTextStyle={...a.getAxisTextStyle()},e.tickTextStyle={...a.getTickTextStyle()},t.modified())},t.updateAPISpecificData=(a,s,i)=>{(e.lastSize[0]!==a[0]||e.lastSize[1]!==a[1])&&(e.lastSize[0]=a[0],e.lastSize[1]=a[1],e.lastAspectRatio=a[0]/a[1],e.forceUpdate=!0);const o=e.renderable.getScalarsToColors();if(!(!o||!e.renderable.getVisibility())&&(e.barMapper.setLookupTable(o),e.camera=s,e.renderWindow=i,e.forceUpdate||Math.max(o.getMTime(),t.getMTime(),e.renderable.getMTime())>e.lastRebuildTime.getMTime())){const u=o.getMappingRange();if(e.lastTickBounds=[...u],e.renderable.getGenerateTicks()(t),e.renderable.getAutomated())e.renderable.getAutoLayout()(t);else{e.axisTextStyle={...e.renderable.getAxisTextStyle()},e.tickTextStyle={...e.renderable.getTickTextStyle()},e.barPosition=[...e.renderable.getBarPosition()],e.barSize=[...e.renderable.getBarSize()],e.boxPosition=[...e.renderable.getBoxPosition()],e.boxSize=[...e.renderable.getBoxSize()],e.axisTitlePixelOffset=e.renderable.getAxisTitlePixelOffset(),e.tickLabelPixelOffset=e.renderable.getTickLabelPixelOffset();const c=t.updateTextureAtlas();t.recomputeBarSegments(c)}t.updatePolyDataForLabels(),t.updatePolyDataForBarSegments(),e.lastRebuildTime.modified(),e.forceUpdate=!1}},t.updateTextureAtlas=()=>{e.tmContext.textBaseline="bottom",e.tmContext.textAlign="left";const a={},s=new Map;let i=0,o=1;Ws(e.tmContext,e.axisTextStyle);let u=e.tmContext.measureText(e.renderable.getAxisLabel()),c={height:u.actualBoundingBoxAscent+2,startingHeight:o,width:u.width+2,textStyle:e.axisTextStyle};s.set(e.renderable.getAxisLabel(),c),o+=c.height,i=c.width,a.titleWidth=c.width,a.titleHeight=c.height,a.tickWidth=0,a.tickHeight=0,Ws(e.tmContext,e.tickTextStyle);const f=[...t.getTickStrings(),"NaN","Below","Above"];for(let l=0;l{l.tcoords=[0,(o-l.startingHeight-l.height)/o,l.width/i,(o-l.startingHeight-l.height)/o,l.width/i,(o-l.startingHeight)/o,0,(o-l.startingHeight)/o]}),e.tmCanvas.width=i,e.tmCanvas.height=o,e.tmContext.textBaseline="bottom",e.tmContext.textAlign="left",e.tmContext.clearRect(0,0,i,o),s.forEach((l,g)=>{Ws(e.tmContext,l.textStyle),e.tmContext.fillText(g,1,l.startingHeight+l.height-1)}),e.tmTexture.setCanvas(e.tmCanvas),e.tmTexture.modified(),e._tmAtlas=s,a},t.computeBarSize=a=>{e.vertical=e.boxSize[1]>e.boxSize[0];const s=2*a.tickHeight/e.lastSize[1],i=[1,1];if(e.vertical){const o=2*(a.tickWidth+e.tickLabelPixelOffset)/e.lastSize[0];if(e.topTitle){const u=2*(a.titleHeight+e.axisTitlePixelOffset)/e.lastSize[1];e.barSize[0]=e.boxSize[0]-o,e.barSize[1]=e.boxSize[1]-u}else{const u=2*(a.titleHeight+e.axisTitlePixelOffset)/e.lastSize[0];e.barSize[0]=e.boxSize[0]-u-o,e.barSize[1]=e.boxSize[1]}e.barPosition[0]=e.boxPosition[0]+o,e.barPosition[1]=e.boxPosition[1],i[1]=s}else{const o=(2*a.tickWidth-8)/e.lastSize[0],u=2*(a.titleHeight+e.axisTitlePixelOffset)/e.lastSize[1];e.barSize[0]=e.boxSize[0],e.barPosition[0]=e.boxPosition[0],e.barSize[1]=e.boxSize[1]-u,e.barPosition[1]=e.boxPosition[1],i[0]=o}return i},t.recomputeBarSegments=a=>{var g,p,T,h;const s=t.computeBarSize(a);e.barSegments=[];const i=[0,0],o=e.vertical?1:0,u=e.vertical?.01:.02;function c(d,x){e.barSegments.push({corners:[[...i],[i[0]+s[0],i[1]],[i[0]+s[0],i[1]+s[1]],[i[0],i[1]+s[1]]],scalars:x,title:d}),i[o]+=s[o]+u}e.renderable.getDrawNanAnnotation()&&e.renderable.getScalarsToColors().getNanColor()&&c("NaN",[NaN,NaN,NaN,NaN]),e.renderable.getDrawBelowRangeSwatch()&&((p=(g=e.renderable.getScalarsToColors()).getUseBelowRangeColor)!=null&&p.call(g))&&c("Below",[-.1,-.1,-.1,-.1]);const f=(h=(T=e.renderable.getScalarsToColors()).getUseAboveRangeColor)==null?void 0:h.call(T);i[o]+=u;const l=s[o];s[o]=f?1-2*u-s[o]-i[o]:1-u-i[o],c("ticks",e.vertical?[0,0,.995,.995]:[0,.995,.995,0]),e.renderable.getDrawAboveRangeSwatch()&&f&&(s[o]=l,i[o]+=u,c("Above",[1.1,1.1,1.1,1.1]))};const n=new Float64Array(3);t.createPolyDataForOneLabel=(a,s,i,o,u,c)=>{const f=e._tmAtlas.get(a);if(!f)return;let l=c.ptIdx,g=c.cellIdx;n[0]=(.5*s[0]+.5)*e.lastSize[0],n[1]=(.5*s[1]+.5)*e.lastSize[1],n[2]=s[2],n[0]+=u[0],n[1]+=u[1];const p=[],T=o==="vertical"?[1,0]:[0,1];o==="vertical"?(p[0]=f.width,p[1]=-f.height,i[0]==="middle"?n[1]-=f.width/2:i[0]==="right"&&(n[1]-=f.width),i[1]==="middle"?n[0]+=f.height/2:i[1]==="top"&&(n[0]+=f.height)):(p[0]=f.width,p[1]=f.height,i[0]==="middle"?n[0]-=f.width/2:i[0]==="right"&&(n[0]-=f.width),i[1]==="middle"?n[1]-=f.height/2:i[1]==="top"&&(n[1]-=f.height)),c.points[l*3]=n[0],c.points[l*3+1]=n[1],c.points[l*3+2]=n[2],c.tcoords[l*2]=f.tcoords[0],c.tcoords[l*2+1]=f.tcoords[1],l++,n[T[0]]+=p[0],c.points[l*3]=n[0],c.points[l*3+1]=n[1],c.points[l*3+2]=n[2],c.tcoords[l*2]=f.tcoords[2],c.tcoords[l*2+1]=f.tcoords[3],l++,n[T[1]]+=p[1],c.points[l*3]=n[0],c.points[l*3+1]=n[1],c.points[l*3+2]=n[2],c.tcoords[l*2]=f.tcoords[4],c.tcoords[l*2+1]=f.tcoords[5],l++,n[T[0]]-=p[0],c.points[l*3]=n[0],c.points[l*3+1]=n[1],c.points[l*3+2]=n[2],c.tcoords[l*2]=f.tcoords[6],c.tcoords[l*2+1]=f.tcoords[7],l++,c.polys[g*4]=3,c.polys[g*4+1]=l-4,c.polys[g*4+2]=l-3,c.polys[g*4+3]=l-2,g++,c.polys[g*4]=3,c.polys[g*4+1]=l-4,c.polys[g*4+2]=l-2,c.polys[g*4+3]=l-1,c.ptIdx+=4,c.cellIdx+=2};const r=new Float64Array(3);t.updatePolyDataForLabels=()=>{const a=t.getTickStrings().length+e.barSegments.length,s=a*4,i=a*2,o=new Float64Array(s*3),u=new Uint16Array(i*4),c=new Float32Array(s*2),f={ptIdx:0,cellIdx:0,polys:u,points:o,tcoords:c},l=e.vertical?0:1,g=e.vertical?1:0;r[2]=-.99;const p=e.vertical?["right","middle"]:["middle","bottom"];let T=[0,1];const h=[0,0];e.vertical?(h[0]=-e.tickLabelPixelOffset,e.topTitle?(r[0]=e.boxPosition[0]+.5*e.boxSize[0],r[1]=e.barPosition[1]+e.barSize[1],t.createPolyDataForOneLabel(e.renderable.getAxisLabel(),r,["middle","bottom"],"horizontal",[0,e.axisTitlePixelOffset],f)):(r[0]=e.barPosition[0]+e.barSize[0],r[1]=e.barPosition[1]+.5*e.barSize[1],t.createPolyDataForOneLabel(e.renderable.getAxisLabel(),r,["middle","top"],"vertical",[e.axisTitlePixelOffset,0],f)),T=[-1,0]):(h[1]=e.tickLabelPixelOffset,r[0]=e.barPosition[0]+.5*e.barSize[0],r[1]=e.barPosition[1]+e.barSize[1],t.createPolyDataForOneLabel(e.renderable.getAxisLabel(),r,["middle","bottom"],"horizontal",[0,e.axisTitlePixelOffset],f)),r[l]=e.barPosition[l]+(.5*T[l]+.5)*e.barSize[l],r[g]=e.barPosition[g]+e.barSize[g]*.5;let d=null;for(let S=0;S{var h,d;const a=e.renderable.getScalarsToColors();let s=0;e.renderable.getDrawNanAnnotation()&&a.getNanColor()&&(s+=1),e.renderable.getDrawBelowRangeSwatch()&&((h=a.getUseBelowRangeColor)!=null&&h.call(a))&&(s+=1),e.renderable.getDrawAboveRangeSwatch()&&((d=a.getUseAboveRangeColor)!=null&&d.call(a))&&(s+=1);const i=4*(1+s),o=i;let u=1;a.getVectorMode()===i_.COMPONENT&&(u=a.getVectorComponent()+1);const c=new Float64Array(i*3),f=new Uint16Array(o*5),l=new Float32Array(i*u);let g=0,p=0;for(let x=0;x2&&arguments[2]!==void 0?arguments[2]:{renderable:null};Object.assign(e,{},n),E.obj(t,e),E.setGet(t,e,["axisTitlePixelOffset","tickLabelPixelOffset","renderable","topTitle","ticks","tickStrings"]),E.get(t,e,["lastSize","lastAspectRatio","lastTickBounds","axisTextStyle","tickTextStyle","barActor","tmActor"]),E.getArray(t,e,["boxPosition","boxSize"]),E.setArray(t,e,["boxPosition","boxSize"],2),e.forceUpdate=!1,e.lastRebuildTime={},E.obj(e.lastRebuildTime,{mtime:0}),e.lastSize=[-1,-1],e.tmCanvas=document.createElement("canvas"),e.tmContext=e.tmCanvas.getContext("2d"),e._tmAtlas=new Map,e.barMapper=Cn.newInstance(),e.barMapper.setInterpolateScalarsBeforeMapping(!0),e.barMapper.setUseLookupTableScalarRange(!0),e.polyData=nn.newInstance(),e.barMapper.setInputData(e.polyData),e.barActor=en.newInstance(),e.barActor.setMapper(e.barMapper),e.tmPolyData=nn.newInstance(),e.tmMapper=Cn.newInstance(),e.tmMapper.setInputData(e.tmPolyData),e.tmTexture=ps.newInstance({resizable:!0}),e.tmTexture.setInterpolate(!1),e.tmActor=en.newInstance({parentProp:t}),e.tmActor.setMapper(e.tmMapper),e.tmActor.addTexture(e.tmTexture),e.barPosition=[0,0],e.barSize=[0,0],e.boxPosition=[.88,-.92],e.boxSize=[.1,1.1],e.lastTickBounds=[],o_(t,e)},"vtkScalarBarActorHelper");function u_(t,e){e.classHierarchy.push("vtkScalarBarActor"),t.setTickTextStyle=n=>{e.tickTextStyle={...e.tickTextStyle,...n},t.modified()},t.setAxisTextStyle=n=>{e.axisTextStyle={...e.axisTextStyle,...n},t.modified()},t.resetAutoLayoutToDefault=()=>{t.setAutoLayout(ng(t,e))},t.resetGenerateTicksToDefault=()=>{t.setGenerateTicks(rg())}}function f_(t){return{automated:!0,autoLayout:null,axisLabel:"Scalar Value",barPosition:[0,0],barSize:[0,0],boxPosition:[.88,-.92],boxSize:[.1,1.1],scalarToColors:null,axisTitlePixelOffset:36,axisTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:18,fontFamily:"serif"},tickLabelPixelOffset:14,tickTextStyle:{fontColor:"white",fontStyle:"normal",fontSize:14,fontFamily:"serif"},generateTicks:null,drawNanAnnotation:!0,drawBelowRangeSwatch:!0,drawAboveRangeSwatch:!0,...t}}function ag(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,f_(n)),e.autoLayout||(e.autoLayout=ng(t,e)),e.generateTicks||(e.generateTicks=rg()),en.extend(t,e,n),t.getProperty().setDiffuse(0),t.getProperty().setAmbient(1),E.setGet(t,e,["automated","autoLayout","axisTitlePixelOffset","axisLabel","scalarsToColors","tickLabelPixelOffset","generateTicks","drawNanAnnotation","drawBelowRangeSwatch","drawAboveRangeSwatch"]),E.get(t,e,["axisTextStyle","tickTextStyle"]),E.getArray(t,e,["barPosition","barSize","boxPosition","boxSize"]),E.setArray(t,e,["barPosition","barSize","boxPosition","boxSize"],2),u_(t,e)}const l_=E.newInstance(ag,"vtkScalarBarActor");var uo={newInstance:l_,extend:ag,newScalarBarActorHelper:c_};function g_(t,e){e.classHierarchy.push("vtkOpenGLScalarBarActor"),t.buildPass=n=>{n&&(e._openGLRenderer=t.getFirstAncestorOfType("vtkOpenGLRenderer"),e._openGLRenderWindow=e._openGLRenderer.getParent(),e.scalarBarActorHelper.getRenderable()||e.scalarBarActorHelper.setRenderable(e.renderable),t.prepareNodes(),t.addMissingNode(e.scalarBarActorHelper.getBarActor()),t.addMissingNode(e.scalarBarActorHelper.getTmActor()),t.removeUnusedNodes())},t.opaquePass=(n,r)=>{if(n){const a=e._openGLRenderer?e._openGLRenderer.getRenderable().getActiveCamera():null,s=e._openGLRenderer.getTiledSizeAndOrigin();e.scalarBarActorHelper.updateAPISpecificData([s.usize,s.vsize],a,e._openGLRenderWindow.getRenderable())}}}const p_={};function h_(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,p_,n),Be.extend(t,e,n),e.scalarBarActorHelper=uo.newScalarBarActorHelper(),g_(t,e)}const d_=Ee(h_,"vtkOpenGLScalarBarActor");Ft("vtkScalarBarActor",d_);const{vtkErrorMacro:mc}=Pt;function v_(t,e){e.classHierarchy.push("vtkOpenGLSkybox"),t.buildPass=n=>{if(n){e._openGLRenderer=t.getFirstAncestorOfType("vtkOpenGLRenderer"),e._openGLRenderWindow=e._openGLRenderer.getParent(),e.context=e._openGLRenderWindow.getContext(),e.tris.setOpenGLRenderWindow(e._openGLRenderWindow),e.openGLTexture.setOpenGLRenderWindow(e._openGLRenderWindow);const r=e._openGLRenderer.getRenderable();e.openGLCamera=e._openGLRenderer.getViewNodeFor(r.getActiveCamera())}},t.queryPass=(n,r)=>{if(n){if(!e.renderable||!e.renderable.getVisibility())return;r.incrementOpaqueActorCount()}},t.opaquePass=(n,r)=>{if(n&&!e._openGLRenderer.getSelector()){t.updateBufferObjects(),e.context.depthMask(!0),e._openGLRenderWindow.getShaderCache().readyShaderProgram(e.tris.getProgram()),e.openGLTexture.render(e._openGLRenderWindow);const a=e.openGLTexture.getTextureUnit();e.tris.getProgram().setUniformi("sbtexture",a);const s=e._openGLRenderer.getRenderable(),i=e.openGLCamera.getKeyMatrices(s),o=new Float64Array(16);if(ut(o,i.wcpc),e.tris.getProgram().setUniformMatrix("IMCPCMatrix",o),e.lastFormat==="box"){const u=s.getActiveCamera().getPosition();e.tris.getProgram().setUniform3f("camPos",u[0],u[1],u[2])}e.tris.getVAO().bind(),e.context.drawArrays(e.context.TRIANGLES,0,e.tris.getCABO().getElementCount()),e.tris.getVAO().release(),e.openGLTexture.deactivate()}},t.updateBufferObjects=()=>{if(!e.tris.getCABO().getElementCount()){const r=new Float32Array(12);for(let o=0;o<4;o++)r[o*3]=o%2*2-1,r[o*3+1]=o>1?1:-1,r[o*3+2]=1;const a=Se.newInstance({numberOfComponents:3,values:r});a.setName("points");const s=new Uint16Array(8);s[0]=3,s[1]=0,s[2]=1,s[3]=3,s[4]=3,s[5]=0,s[6]=3,s[7]=2;const i=Se.newInstance({numberOfComponents:1,values:s});e.tris.getCABO().createVBO(i,"polys",rt.SURFACE,{points:a,cellOffset:0})}e.renderable.getFormat()!==e.lastFormat&&(e.lastFormat=e.renderable.getFormat(),e.lastFormat==="box"&&e.tris.setProgram(e._openGLRenderWindow.getShaderCache().readyShaderProgramArray(`//VTK::System::Dec
attribute vec3 vertexMC;
uniform mat4 IMCPCMatrix;
varying vec3 TexCoords;
void main () {
gl_Position = vec4(vertexMC.xyz, 1.0);
vec4 wpos = IMCPCMatrix * gl_Position;
TexCoords = wpos.xyz/wpos.w;
}`,`//VTK::System::Dec
//VTK::Output::Dec
varying vec3 TexCoords;
uniform samplerCube sbtexture;
uniform vec3 camPos;
void main () {
// skybox looks from inside out
// which means we have to adjust
// our tcoords. Otherwise text would
// be flipped
vec3 tc = normalize(TexCoords - camPos);
if (abs(tc.z) < max(abs(tc.x),abs(tc.y)))
{
tc = vec3(1.0, 1.0, -1.0) * tc;
}
else
{
tc = vec3(-1.0, 1.0, 1.0) * tc;
}
gl_FragData[0] = textureCube(sbtexture, tc);
}`,"")),e.lastFormat==="background"&&e.tris.setProgram(e._openGLRenderWindow.getShaderCache().readyShaderProgramArray(`//VTK::System::Dec
attribute vec3 vertexMC;
uniform mat4 IMCPCMatrix;
varying vec2 TexCoords;
void main () {
gl_Position = vec4(vertexMC.xyz, 1.0);
vec4 wpos = IMCPCMatrix * gl_Position;
TexCoords = vec2(vertexMC.x, vertexMC.y)*0.5 + 0.5;
}`,`//VTK::System::Dec
//VTK::Output::Dec
varying vec2 TexCoords;
uniform sampler2D sbtexture;
void main () {
gl_FragData[0] = texture2D(sbtexture, TexCoords);
}`,"")),e.tris.getShaderSourceTime().modified(),e.tris.getVAO().bind(),e.tris.getVAO().addAttributeArray(e.tris.getProgram(),e.tris.getCABO(),"vertexMC",e.tris.getCABO().getVertexOffset(),e.tris.getCABO().getStride(),e.context.FLOAT,3,e.context.FALSE)||mc("Error setting vertexMC in shader VAO."));const n=e.renderable.getTextures();n.length||mc("vtkSkybox requires a texture map"),e.openGLTexture.getRenderable()!==n[0]&&(e.openGLTexture.releaseGraphicsResources(e._openGLRenderWindow),e.openGLTexture.setRenderable(n[0]))}}const y_={context:null};function T_(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,y_,n),Be.extend(t,e,n),e.openGLTexture=Wn.newInstance(),e.tris=wr.newInstance(),e.keyMatrixTime={},Pe(e.keyMatrixTime,{mtime:0}),e.keyMatrices={normalMatrix:Kn(new Float64Array(9)),mcwc:le(new Float64Array(16))},ze(t,e,["context"]),st(t,e,["activeTextures"]),v_(t,e)}const x_=Ee(T_);Ft("vtkSkybox",x_);const{vtkDebugMacro:S_}=Pt;function C_(t,e){e.classHierarchy.push("vtkOpenGLPixelSpaceCallbackMapper"),t.opaquePass=(n,r)=>{e._openGLRenderer=t.getFirstAncestorOfType("vtkOpenGLRenderer"),e._openGLRenderWindow=e._openGLRenderer.getParent();const a=e._openGLRenderer.getAspectRatio(),s=e._openGLRenderer?e._openGLRenderer.getRenderable().getActiveCamera():null,i=e._openGLRenderer.getTiledSizeAndOrigin();let o=null;if(e.renderable.getUseZValues()){const u=r.getZBufferTexture(),c=Math.floor(u.getWidth()),f=Math.floor(u.getHeight()),l=e._openGLRenderWindow.getContext();u.bind();const g=r.getFramebuffer();g?g.saveCurrentBindingsAndBuffers():S_("No framebuffer to save/restore");const p=l.createFramebuffer();l.bindFramebuffer(l.FRAMEBUFFER,p),l.framebufferTexture2D(l.FRAMEBUFFER,l.COLOR_ATTACHMENT0,l.TEXTURE_2D,u.getHandle(),0),l.checkFramebufferStatus(l.FRAMEBUFFER)===l.FRAMEBUFFER_COMPLETE&&(o=new Uint8Array(c*f*4),l.viewport(0,0,c,f),l.readPixels(0,0,c,f,l.RGBA,l.UNSIGNED_BYTE,o)),g&&g.restorePreviousBindingsAndBuffers(),l.deleteFramebuffer(p)}e.renderable.invokeCallback(e.renderable.getInputData(),s,a,i,o)},t.queryPass=(n,r)=>{n&&e.renderable.getUseZValues()&&r.requestDepth()}}const w_={};function E_(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,w_,n),Be.extend(t,e,n),C_(t,e)}const __=Ee(E_,"vtkOpenGLPixelSpaceCallbackMapper");Ft("vtkPixelSpaceCallbackMapper",__);const sg=Object.create(null);function rn(t,e){sg[t]=e}function R_(t,e){e.classHierarchy.push("vtkWebGPUViewNodeFactory")}const O_={};function ig(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,O_,n),e.overrides=sg,xf.extend(t,e,n),R_(t,e)}const D_=E.newInstance(ig,"vtkWebGPUViewNodeFactory");var M_={newInstance:D_,extend:ig};function V_(t,e){e.classHierarchy.push("vtkWebGPUCamera"),t.getProjectionMatrix=(n,r,a,s)=>{if(le(n),e.renderable.getParallelProjection()){const i=e.renderable.getParallelScale(),o=i*r,u=i,c=(s[0]-1)*o,f=(s[0]+1)*o,l=(s[1]-1)*u,g=(s[1]+1)*u,p=1/(f-c),T=1/(g-l);n[0]=2*p,n[5]=2*T,n[10]=1/(a[1]-a[0]),n[12]=(f+c)*p,n[13]=(g+l)*T,n[14]=a[1]/(a[1]-a[0])}else{const i=Math.tan(Math.PI*e.renderable.getViewAngle()/360);let o,u;e.renderable.getUseHorizontalViewAngle()===!0?(o=a[0]*i,u=a[0]*i/r):(o=a[0]*i*r,u=a[0]*i);const c=(s[0]-1)*o,f=(s[0]+1)*o,l=(s[1]-1)*u,g=(s[1]+1)*u;n[0]=2*a[0]/(f-c),n[5]=2*a[0]/(g-l),n[12]=(c+f)/(f-c),n[13]=(l+g)/(g-l),n[10]=0,n[14]=a[0],n[11]=-1,n[15]=0}},t.convertToOpenGLDepth=n=>{if(e.renderable.getParallelProjection())return 1-n;const r=e.renderable.getClippingRangeByReference();let a=-r[0]/n;return a=(r[0]+r[1])/(r[1]-r[0])+2*r[0]*r[1]/(a*(r[1]-r[0])),.5*a+.5},t.getKeyMatrices=n=>{const r=n.getRenderable(),a=n.getParent();if(Math.max(a.getMTime(),t.getMTime(),r.getMTime(),e.renderable.getMTime(),n.getStabilizedTime())>e.keyMatrixTime.getMTime()){const s=e.renderable.getViewMatrix();qe(e.keyMatrices.normalMatrix,s),e.keyMatrices.normalMatrix[3]=0,e.keyMatrices.normalMatrix[7]=0,e.keyMatrices.normalMatrix[11]=0,ut(e.keyMatrices.normalMatrix,e.keyMatrices.normalMatrix),Oe(e.keyMatrices.wcvc,s);const i=n.getStabilizedCenterByReference();Ge(e.keyMatrices.scvc,e.keyMatrices.wcvc,i);const o=n.getAspectRatio(),u=e.renderable.getClippingRangeByReference();t.getProjectionMatrix(e.keyMatrices.vcpc,o,u,e.renderable.getWindowCenterByReference()),at(e.keyMatrices.scpc,e.keyMatrices.vcpc,e.keyMatrices.scvc),ut(e.keyMatrices.pcsc,e.keyMatrices.scpc),e.keyMatrixTime.modified()}return e.keyMatrices}}const m_={keyMatrixTime:null,keyMatrices:null};function L_(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,m_,n),Be.extend(t,e,n),e.keyMatrixTime={},E.obj(e.keyMatrixTime),e.keyMatrices={normalMatrix:new Float64Array(16),vcpc:new Float64Array(16),pcsc:new Float64Array(16),wcvc:new Float64Array(16),scpc:new Float64Array(16),scvc:new Float64Array(16)},E.setGet(t,e,["keyMatrixTime"]),V_(t,e)}const B_=E.newInstance(L_);rn("vtkCamera",B_);function k_(t,e){e.classHierarchy.push("vtkWebGPUBindGroup"),t.setBindables=n=>{if(e.bindables.length===n.length){let r=!0;for(let a=0;a{const r=[];for(let a=0;a{let r=t.getMTime();for(let s=0;sr?i:r}if(r{const r=[],a=n.getBindGroupLayoutCount(e.label);for(let s=0;s2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,F_,n),E.obj(t,e),e.bindables=[],e.bindGroupTime={},E.obj(e.bindGroupTime,{mtime:0}),E.get(t,e,["bindGroupTime","handle","sizeInBytes","usage"]),E.setGet(t,e,["label","device","arrayInformation"]),k_(t,e)}const U_=E.newInstance(og);var cg={newInstance:U_,extend:og};function N_(t,e){e.classHierarchy.push("vtkWebGPUShaderModule"),t.initialize=(n,r)=>{e.device=n,e.handle=e.device.getHandle().createShaderModule({code:r.getCode()})}}const b_={device:null,handle:null};function ug(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,b_,n),E.obj(t,e),E.get(t,e,["lastCameraMTime"]),E.setGet(t,e,["device","handle"]),N_(t,e)}const G_=E.newInstance(ug,"vtkWebGPUShaderModule");var $_={newInstance:G_,extend:ug};function W_(t,e,n){let r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0;const a=Array.isArray(n)?n.join(`
`):n;let s=!1;t.search(e)!==-1&&(s=!0);let i="";r&&(i="g");const o=new RegExp(e,i),u=t.replace(o,a);return{replace:s,result:u}}function z_(t,e){e.classHierarchy.push("vtkWebGPUShaderCache"),t.getShaderModule=n=>{const r=n.getType(),a=n.getHash(),s=e._shaderModules.keys();for(let o=0;o2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,A_,n),e._shaderModules=new Map,E.obj(t,e),E.setGet(t,e,["device","window"]),z_(t,e)}const H_=E.newInstance(fg,"vtkWebGPUShaderCache");var ie={newInstance:H_,extend:fg,substitute:W_};function j_(t,e){e.classHierarchy.push("vtkWebGPUPipeline"),t.getShaderDescriptions=()=>e.shaderDescriptions,t.initialize=(n,r)=>{e.pipelineDescription=e.renderEncoder.getPipelineSettings(),e.pipelineDescription.primitive.topology=e.topology,e.pipelineDescription.vertex=e.vertexState,e.pipelineDescription.label=r;const a=[];for(let s=0;s{for(let r=0;r{n&&e.layouts.push({layout:n.getBindGroupLayout(e.device),label:n.getLabel()})},t.getBindGroupLayout=n=>e.layouts[n].layout,t.getBindGroupLayoutCount=n=>{for(let r=0;r{r.bindBuffers(n)}}const K_={handle:null,layouts:null,renderEncoder:null,shaderDescriptions:null,vertexState:null,topology:null,pipelineDescription:null};function lg(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,K_,n),Pe(t,e),e.layouts=[],e.shaderDescriptions=[],st(t,e,["handle","pipelineDescription"]),ze(t,e,["device","renderEncoder","topology","vertexState"]),j_(t,e)}const P_=Ee(lg,"vtkWebGPUPipeline");var X_={newInstance:P_,extend:lg};function I_(t,e){e.classHierarchy.push("vtkWebGPUShaderDescription"),t.hasOutput=n=>e.outputNames.includes(n),t.addOutput=function(n,r){let a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:void 0;e.outputTypes.push(n),e.outputNames.push(r),e.outputInterpolations.push(a)},t.addBuiltinOutput=(n,r)=>{e.builtinOutputTypes.push(n),e.builtinOutputNames.push(r)},t.addBuiltinInput=(n,r)=>{e.builtinInputTypes.push(n),e.builtinInputNames.push(r)},t.replaceShaderCode=(n,r)=>{const a=[];let s=[];if(r&&a.push(r.getShaderCode()),n||e.builtinInputNames.length){const i=[];if(i.push(`struct ${e.type}Input
{`),n){const o=n.getOutputNamesByReference(),u=n.getOutputTypesByReference(),c=n.getOutputInterpolationsByReference();for(let f=0;f1&&(i.push("};"),s=i,a[a.length-1]+=",",a.push(`input: ${e.type}Input`))}if(a.length&&(e.code=ie.substitute(e.code,"//VTK::IOStructs::Input",a).result),e.outputNames.length+e.builtinOutputNames.length){const i=[`struct ${e.type}Output
{`];for(let o=0;o ${e.type}Output`]).result}e.code=ie.substitute(e.code,"//VTK::IOStructs::Dec",s).result}}const Y_={type:null,hash:null,code:null,outputNames:null,outputTypes:null};function gg(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,Y_,n),e.outputNames=[],e.outputTypes=[],e.outputInterpolations=[],e.builtinOutputNames=[],e.builtinOutputTypes=[],e.builtinInputNames=[],e.builtinInputTypes=[],E.obj(t,e),E.setGet(t,e,["type","hash","code"]),E.getArray(t,e,["outputTypes","outputNames","outputInterpolations"]),I_(t,e)}const q_=E.newInstance(gg,"vtkWebGPUShaderDescription");var Lc={newInstance:q_,extend:gg};const Bc={r8unorm:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"float"},r8snorm:{numComponents:1,nativeType:Int8Array,stride:1,elementSize:1,sampleType:"float"},r8uint:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"uint"},r8sint:{numComponents:1,nativeType:Int8Array,stride:1,elementSize:1,sampleType:"sint"},r16uint:{numComponents:1,nativeType:Uint16Array,stride:2,elementSize:2,sampleType:"uint"},r16sint:{numComponents:1,nativeType:Int16Array,stride:2,elementSize:2,sampleType:"sint"},r16float:{numComponents:1,nativeType:Float32Array,stride:2,elementSize:2,sampleType:"float"},rg8unorm:{numComponents:2,nativeType:Uint8Array,stride:2,elementSize:1,sampleType:"float"},rg8snorm:{numComponents:2,nativeType:Int8Array,stride:2,elementSize:1,sampleType:"float"},rg8uint:{numComponents:2,nativeType:Uint8Array,stride:2,elementSize:1,sampleType:"uint"},rg8sint:{numComponents:2,nativeType:Int8Array,stride:2,elementSize:1,sampleType:"sint"},r32uint:{numComponents:1,nativeType:Uint32Array,stride:4,elementSize:4,sampleType:"uint"},r32sint:{numComponents:1,nativeType:Int32Array,stride:4,elementSize:4,sampleType:"sint"},r32float:{numComponents:1,nativeType:Float32Array,stride:4,elementSize:4,sampleType:"unfilterable-float"},rg16uint:{numComponents:2,nativeType:Uint16Array,stride:4,elementSize:2,sampleType:"uint"},rg16sint:{numComponents:2,nativeType:Int16Array,stride:4,elementSize:2,sampleType:"sint"},rg16float:{numComponents:2,nativeType:Float32Array,stride:4,elementSize:2,sampleType:"float"},rgba8unorm:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},"rgba8unorm-srgb":{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},rgba8snorm:{numComponents:4,nativeType:Int8Array,stride:4,elementSize:1,sampleType:"float"},rgba8uint:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"uint"},rgba8sint:{numComponents:4,nativeType:Int8Array,stride:4,elementSize:1,sampleType:"sint"},bgra8unorm:{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},"bgra8unorm-srgb":{numComponents:4,nativeType:Uint8Array,stride:4,elementSize:1,sampleType:"float"},rgb9e5ufloat:{numComponents:4,nativeType:Uint32Array,stride:4,sampleType:"float"},rgb10a2unorm:{numComponents:4,nativeType:Uint32Array,stride:4,sampleType:"float"},rg11b10ufloat:{numComponents:4,nativeType:Float32Array,stride:4,sampleType:"float"},rg32uint:{numComponents:2,nativeType:Uint32Array,stride:8,elementSize:4,sampleType:"uint"},rg32sint:{numComponents:2,nativeType:Int32Array,stride:8,elementSize:4,sampleType:"sint"},rg32float:{numComponents:2,nativeType:Float32Array,stride:8,elementSize:4,sampleType:"unfilterable-float"},rgba16uint:{numComponents:4,nativeType:Uint16Array,stride:8,elementSize:2,sampleType:"uint"},rgba16sint:{numComponents:4,nativeType:Int16Array,stride:8,elementSize:2,sampleType:"sint"},rgba16float:{numComponents:4,nativeType:Float32Array,stride:8,elementSize:2,sampleType:"float"},rgba32uint:{numComponents:4,nativeType:Uint32Array,stride:16,elementSize:4,sampleType:"uint"},rgba32sint:{numComponents:4,nativeType:Int32Array,stride:16,elementSize:4,sampleType:"sint"},rgba32float:{numComponents:4,nativeType:Float32Array,stride:16,elementSize:4,sampleType:"unfilterable-float"},stencil8:{numComponents:1,nativeType:Uint8Array,stride:1,elementSize:1,sampleType:"uint"},depth16unorm:{numComponents:1,nativeType:Uint16Array,stride:2,elementSize:2,sampleType:"depth"},depth24plus:{numComponents:1,nativeType:Uint32Array,stride:4,elementSize:3,sampleType:"depth"},"depth24plus-stencil8":{numComponents:2,nativeType:Uint32Array,stride:4,sampleType:"mixed"},depth32float:{numComponents:1,nativeType:Float32Array,stride:4,elementSize:4,sampleType:"depth"}};function Q_(t){return!t||t.length<6?0:t in Bc?Bc[t]:(ce(`unknown format ${t}`),null)}function Z_(t){if(!t||t.length<5)return 0;let e=1;t[t.length-2]==="x"&&(e=Number(t[t.length-1]));const n=e===1?t.length-1:t.length-3,r=Number(t[n]);if(Number.isNaN(r))return ce(`unknown format ${t}`),0;const a=5-r/2;return e*a}function J_(t){if(!t||t.length<5)return 0;let e=1;return t[t.length-2]==="x"&&(e=Number(t[t.length-1])),e}function eR(t){if(!t||t.length<5)return 0;let e;if(t[0]==="f")e="Float";else if(t[0]==="s")e="Int";else if(t[0]==="u")e="Uint";else{ce(`unknown format ${t}`);return}const n=t.split("x")[0],r=Number(n[n.length-1]);if(Number.isNaN(r)){ce(`unknown format ${t}`);return}return e+=8*(5-r/2),e+="Array",e}function tR(t){let e;if(t[0]==="f"||t[1]==="n")e="f32";else if(t[0]==="s"&&t[1]==="i")e="i32";else if(t[0]==="u"&&t[1]==="i")e="u32";else{ce(`unknown format ${t}`);return}let n=1;return t[t.length-2]==="x"&&(n=Number(t[t.length-1])),n===4?`vec4<${e}>`:n===3?`vec3<${e}>`:n===2?`vec2<${e}>`:e}function nR(t){if(!t)return 0;let e=1;return t.substring(0,3)==="vec"?e=Number(t[3]):t.substring(0,3)==="mat"&&(e=t[3]*t[5]),e*4}function rR(t){if(t){if(t.includes("f32"))return"Float32Array";if(t.includes("i32"))return"Int32Array";if(t.includes("u32"))return"Uint32Array";ce(`unknown format ${t}`)}}var Ke={getDetailsFromTextureFormat:Q_,getByteStrideFromBufferFormat:Z_,getNumberOfComponentsFromBufferFormat:J_,getNativeTypeFromBufferFormat:eR,getShaderTypeFromBufferFormat:tR,getByteStrideFromShaderFormat:nR,getNativeTypeFromShaderFormat:rR};function aR(t,e){if(t===e)return!0;if(t==null||e==null||t.length!==e.length)return!1;for(let n=0;n2&&arguments[2]!==void 0?arguments[2]:"vertex",s=r;Array.isArray(s)||(s=[s]);for(let i=0;ii.names[0]o.names[0]?1:0)},t.removeBufferIfPresent=n=>{for(let r=0;r{for(let r=0;r{for(let r=0;r{for(let r=0;r{let n="",r=0;for(let a=0;a0&&(n+=`,
`),n=`${n} @location(${r}) ${e.inputs[a].names[s]} : ${o}`,r++}return n},t.getVertexInputInformation=()=>{const n={};if(e.inputs.length){const r=[];let a=0;for(let s=0;s{for(let r=0;r{},t.releaseGraphicsResources=()=>{e.created&&(e.inputs=[],e.bindingDescriptions=[],e.attributeDescriptions=[])}}const iR={inputs:null,bindingDescriptions:!1,attributeDescriptions:null,indexBuffer:null};function pg(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,iR,n),Pe(t,e),e.bindingDescriptions=[],e.attributeDescriptions=[],e.inputs=[],ze(t,e,["created","device","handle","indexBuffer"]),sR(t,e)}const oR=Ee(pg,"vtkWebGPUVertexInput");var cR={newInstance:oR,extend:pg};const uR=`
//VTK::Renderer::Dec
//VTK::Color::Dec
//VTK::Normal::Dec
//VTK::TCoord::Dec
//VTK::Select::Dec
//VTK::Mapper::Dec
//VTK::IOStructs::Dec
@vertex
fn main(
//VTK::IOStructs::Input
)
//VTK::IOStructs::Output
{
var output : vertexOutput;
// var vertex: vec4 = vertexBC;
//VTK::Color::Impl
//VTK::Normal::Impl
//VTK::TCoord::Impl
//VTK::Select::Impl
//VTK::Position::Impl
return output;
}
`,fR=`
//VTK::Renderer::Dec
//VTK::Color::Dec
//VTK::Normal::Dec
//VTK::TCoord::Dec
//VTK::Select::Dec
//VTK::RenderEncoder::Dec
//VTK::Mapper::Dec
//VTK::IOStructs::Dec
@fragment
fn main(
//VTK::IOStructs::Input
)
//VTK::IOStructs::Output
{
var output : fragmentOutput;
//VTK::Color::Impl
//VTK::Normal::Impl
//VTK::Light::Impl
//VTK::TCoord::Impl
//VTK::Select::Impl
// var computedColor:vec4 = vec4(1.0,0.5,0.5,1.0);
//VTK::RenderEncoder::Impl
return output;
}
`;function lR(t,e){e.classHierarchy.push("vtkWebGPUSimpleMapper"),t.generateShaderDescriptions=(n,r,a)=>{const s=Lc.newInstance({type:"vertex",hash:n,code:e.vertexShaderTemplate}),i=Lc.newInstance({type:"fragment",hash:n,code:e.fragmentShaderTemplate}),o=r.getShaderDescriptions();o.push(s),o.push(i);const u=e.vertexShaderTemplate+e.fragmentShaderTemplate,c=new RegExp("//VTK::[^:]*::","g"),l=u.match(c).filter((g,p,T)=>T.indexOf(g)===p).map(g=>`replaceShader${g.substring(7,g.length-2)}`);for(let g=0;g{const s=r.getShaderDescription("vertex");s.replaceShaderCode(null,a),r.getShaderDescription("fragment").replaceShaderCode(s)},t.replaceShaderRenderEncoder=(n,r,a)=>{e.renderEncoder.replaceShaderCode(r)},e.shaderReplacements.set("replaceShaderRenderEncoder",t.replaceShaderRenderEncoder),t.replaceShaderRenderer=(n,r,a)=>{if(!e.WebGPURenderer)return;const s=e.WebGPURenderer.getBindGroup().getShaderCode(r),i=r.getShaderDescription("vertex");let o=i.getCode();o=ie.substitute(o,"//VTK::Renderer::Dec",[s]).result,i.setCode(o);const u=r.getShaderDescription("fragment");o=u.getCode(),o=ie.substitute(o,"//VTK::Renderer::Dec",[s]).result,u.setCode(o)},e.shaderReplacements.set("replaceShaderRenderer",t.replaceShaderRenderer),t.replaceShaderMapper=(n,r,a)=>{const s=e.bindGroup.getShaderCode(r),i=r.getShaderDescription("vertex");let o=i.getCode();o=ie.substitute(o,"//VTK::Mapper::Dec",[s]).result,i.setCode(o);const u=r.getShaderDescription("fragment");u.addBuiltinInput("bool","@builtin(front_facing) frontFacing"),o=u.getCode(),o=ie.substitute(o,"//VTK::Mapper::Dec",[s]).result,u.setCode(o)},e.shaderReplacements.set("replaceShaderMapper",t.replaceShaderMapper),t.replaceShaderPosition=(n,r,a)=>{const s=r.getShaderDescription("vertex");s.addBuiltinOutput("vec4","@builtin(position) Position");let i=s.getCode();i=ie.substitute(i,"//VTK::Position::Impl",[" output.Position = rendererUBO.SCPCMatrix*vertexBC;"]).result,s.setCode(i)},e.shaderReplacements.set("replaceShaderPosition",t.replaceShaderPosition),t.replaceShaderTCoord=(n,r,a)=>{r.getShaderDescription("vertex").addOutput("vec2","tcoordVS")},e.shaderReplacements.set("replaceShaderTCoord",t.replaceShaderTCoord),t.addTextureView=n=>{e.textureViews.includes(n)||e.textureViews.push(n)},t.prepareToDraw=n=>{e.renderEncoder=n,t.updateInput(),t.updateBuffers(),t.updateBindings(),t.updatePipeline()},t.updateInput=()=>{},t.updateBuffers=()=>{},t.updateBindings=()=>{e.bindGroup.setBindables(t.getBindables())},t.computePipelineHash=()=>{},t.registerDrawCallback=n=>{n.registerDrawCallback(e.pipeline,t.draw)},t.prepareAndDraw=n=>{t.prepareToDraw(n),n.setPipeline(e.pipeline),t.draw(n)},t.draw=n=>{const r=n.getBoundPipeline();n.activateBindGroup(e.bindGroup),e.WebGPURenderer&&e.WebGPURenderer.bindUBO(n),r.bindVertexInput(n,e.vertexInput);const a=e.vertexInput.getIndexBuffer();a?n.drawIndexed(a.getIndexCount(),e.numberOfInstances,0,0,0):n.draw(e.numberOfVertices,e.numberOfInstances,0,0)},t.getBindables=()=>{const n=[...e.additionalBindables];e.UBO&&n.push(e.UBO),e.SSBO&&n.push(e.SSBO);for(let r=0;r{t.computePipelineHash(),e.pipeline=e.device.getPipeline(e.pipelineHash),e.pipeline||(e.pipeline=X_.newInstance(),e.pipeline.setDevice(e.device),e.WebGPURenderer&&e.pipeline.addBindGroupLayout(e.WebGPURenderer.getBindGroup()),e.pipeline.addBindGroupLayout(e.bindGroup),t.generateShaderDescriptions(e.pipelineHash,e.pipeline,e.vertexInput),e.pipeline.setTopology(e.topology),e.pipeline.setRenderEncoder(e.renderEncoder),e.pipeline.setVertexState(e.vertexInput.getVertexInputInformation()),e.device.createPipeline(e.pipelineHash,e.pipeline))}}const gR={additionalBindables:void 0,bindGroup:null,device:null,fragmentShaderTemplate:null,numberOfInstances:1,numberOfVertices:0,pipelineHash:null,shaderReplacements:null,SSBO:null,textureViews:null,topology:"triangle-list",UBO:null,vertexShaderTemplate:null,WebGPURenderer:null};function hg(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,gR,n),Be.extend(t,e,n),e.textureViews=[],e.vertexInput=cR.newInstance(),e.bindGroup=cg.newInstance({label:"mapperBG"}),e.additionalBindables=[],e.fragmentShaderTemplate=e.fragmentShaderTemplate||fR,e.vertexShaderTemplate=e.vertexShaderTemplate||uR,e.shaderReplacements=new Map,E.get(t,e,["pipeline","vertexInput"]),E.setGet(t,e,["additionalBindables","device","fragmentShaderTemplate","interpolate","numberOfInstances","numberOfVertices","pipelineHash","shaderReplacements","SSBO","textureViews","topology","UBO","vertexShaderTemplate","WebGPURenderer"]),lR(t,e)}const pR=E.newInstance(hg,"vtkWebGPUSimpleMapper");var fo={newInstance:pR,extend:hg};function hR(t,e){e.classHierarchy.push("vtkWebGPUFullScreenQuad"),t.replaceShaderPosition=(n,r,a)=>{const s=r.getShaderDescription("vertex");s.addBuiltinOutput("vec4","@builtin(position) Position"),s.addOutput("vec4","vertexVC");let i=s.getCode();i=ie.substitute(i,"//VTK::Position::Impl",["output.tcoordVS = vec2(vertexBC.x * 0.5 + 0.5, 1.0 - vertexBC.y * 0.5 - 0.5);","output.Position = vec4(vertexBC, 1.0);","output.vertexVC = vec4(vertexBC, 1);"]).result,s.setCode(i)},e.shaderReplacements.set("replaceShaderPosition",t.replaceShaderPosition),t.updateBuffers=()=>{const n=e.device.getBufferManager().getFullScreenQuadBuffer();e.vertexInput.addBuffer(n,["vertexBC"]),e.numberOfVertices=6}}const dR={};function dg(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,dR,n),fo.extend(t,e,n),hR(t,e)}const vR=E.newInstance(dg,"vtkWebGPUFullScreenQuad");var hr={newInstance:vR,extend:dg};const yR={Verts:0,Lines:1,Triangles:2,Strips:3,LinesFromStrips:4,LinesFromTriangles:5,Points:6,UniformArray:7,PointArray:8,NormalsFromPoints:9,Texture:10,RawVertex:11,Storage:12,Index:13},TR={Start:0,Points:0,Lines:1,Triangles:2,TriangleStrips:3,TriangleEdges:4,TriangleStripEdges:5,End:6};var Zr={BufferUsage:yR,PrimitiveTypes:TR};const zs=["getMappedRange","mapAsync","unmap"];function xR(t,e,n,r){const a=r.byteLength,s=t.createBuffer({size:a,usage:GPUBufferUsage.COPY_SRC,mappedAtCreation:!0}),i=s.getMappedRange(0,a);new Uint8Array(i).set(new Uint8Array(r)),s.unmap();const o=t.createCommandEncoder();o.copyBufferToBuffer(s,0,e,n,a);const u=o.finish();t.queue.submit([u]),s.destroy()}function SR(t,e){e.classHierarchy.push("vtkWebGPUBuffer"),t.create=(n,r)=>{e.handle=e.device.getHandle().createBuffer({size:n,usage:r,label:e.label}),e.sizeInBytes=n,e.usage=r},t.write=n=>{xR(e.device.getHandle(),e.handle,0,n.buffer)},t.createAndWrite=(n,r)=>{e.handle=e.device.getHandle().createBuffer({size:n.byteLength,usage:r,mappedAtCreation:!0,label:e.label}),e.sizeInBytes=n.byteLength,e.usage=r,new Uint8Array(e.handle.getMappedRange()).set(new Uint8Array(n.buffer)),e.handle.unmap()};for(let n=0;n2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,CR,n),E.obj(t,e),E.get(t,e,["handle","sizeInBytes","usage"]),E.setGet(t,e,["strideInBytes","device","arrayInformation","label","sourceTime"]),SR(t,e)}const wR=E.newInstance(vg);var dr={newInstance:wR,extend:vg,...Zr};const{Representation:kc}=Cr,{PrimitiveTypes:vn}=Zr;class ER{constructor(){this.keys=new Uint32Array(10),this.values=new Uint32Array(10),this.count=0}clear(){this.count=0}has(e){for(let n=0;n2)for(let s=0;s2){for(let s=0;s{const r=n.cells,a=n.primitiveType,s=n.representation,i=n.cellOffset,o=r.getData(),u=o.length,c=_R(a),f=n.numberOfPoints,l={provokedPointIds:new Uint8Array(f),extraPoints:0,iboSize:0,flatId:0,iboId:0,cellProvokedMap:new ER};let g=null;s===kc.POINTS||a===vn.Points?g=As.anythingToPoints:s===kc.WIREFRAME||a===vn.Lines?g=As[`${c}ToWireframe`]:g=As[`${c}ToSurface`],qt=OR;let p=i||0;for(let T=0;T2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,MR,n),dr.extend(t,e,n),E.setGet(t,e,["flatIdToPointId","flatIdToCellId","flatSize","indexCount"]),DR(t,e)}const VR=E.newInstance(yg);var mR={newInstance:VR,extend:yg,...Zr};const{BufferUsage:ln}=Zr,{vtkErrorMacro:LR}=Pt,{VtkDataTypes:mn}=Se,BR={};function kR(t){let e;switch(t.getDataType()){case mn.UNSIGNED_CHAR:e="uint8";break;case mn.FLOAT:e="float32";break;case mn.UNSIGNED_INT:e="uint32";break;case mn.INT:e="sint32";break;case mn.DOUBLE:e="float32";break;case mn.UNSIGNED_SHORT:e="uint16";break;case mn.SHORT:e="sin16";break;default:e="float32";break}switch(t.getNumberOfComponents()){case 2:e+="x2";break;case 3:e.includes("32")||LR(`unsupported x3 type for ${e}`),e+="x3";break;case 4:e+="x4";break}return e}function Uc(t,e,n,r,a){const s={},i=t.getFlatSize();if(!i)return s;let o=[0,0,0,0];a.shift&&(a.shift.length?o=a.shift:o.fill(a.shift));let u=[1,1,1,1];a.scale&&(a.scale.length?u=a.scale:u.fill(a.scale));const c=Object.prototype.hasOwnProperty.call(a,"packExtra")?a.packExtra:!1;let f,l=0;const g=n+(c?1:0),p=Tr(r,i*g);let T=t.getFlatIdToPointId();a.cellData&&(T=t.getFlatIdToCellId()),n===1?f=function(d){p[l++]=u[0]*e[d]+o[0]}:n===2?f=function(d){p[l++]=u[0]*e[d]+o[0],p[l++]=u[1]*e[d+1]+o[1]}:n===3&&!c?f=function(d){p[l++]=u[0]*e[d]+o[0],p[l++]=u[1]*e[d+1]+o[1],p[l++]=u[2]*e[d+2]+o[2]}:n===3&&c?f=function(d){p[l++]=u[0]*e[d]+o[0],p[l++]=u[1]*e[d+1]+o[1],p[l++]=u[2]*e[d+2]+o[2],p[l++]=u[3]*1+o[3]}:n===4&&(f=function(d){p[l++]=u[0]*e[d]+o[0],p[l++]=u[1]*e[d+1]+o[1],p[l++]=u[2]*e[d+2]+o[2],p[l++]=u[3]*e[d+3]+o[3]});for(let h=0;he.device.hasCachedObject(r),t.getBuffer=r=>r.hash?e.device.getCachedObject(r.hash,n,r):n(r),t.getBufferForPointArray=(r,a)=>{const s=kR(r),i={hash:`${r.getMTime()}I${a.getMTime()}${s}`,usage:ln.PointArray,format:s,dataArray:r,indexBuffer:a};return t.getBuffer(i)},t.getFullScreenQuadBuffer=()=>{if(e.fullScreenQuadBuffer)return e.fullScreenQuadBuffer;e.fullScreenQuadBuffer=dr.newInstance(),e.fullScreenQuadBuffer.setDevice(e.device);const r=new Float32Array([-1,-1,0,1,-1,0,1,1,0,-1,-1,0,1,1,0,-1,1,0]);return e.fullScreenQuadBuffer.createAndWrite(r,GPUBufferUsage.VERTEX),e.fullScreenQuadBuffer.setStrideInBytes(12),e.fullScreenQuadBuffer.setArrayInformation([{offset:0,format:"float32x3"}]),e.fullScreenQuadBuffer}}const bR={device:null,fullScreenQuadBuffer:null};function Tg(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,bR,n),Pe(t,e),ze(t,e,["device"]),NR(t,e)}const GR=Ee(Tg);var wn={newInstance:GR,extend:Tg,...BR,...Zr};const{BufferUsage:$R}=wn,{vtkErrorMacro:Zn}=E;function WR(t,e){e.classHierarchy.push("vtkWebGPUStorageBuffer"),t.addEntry=(n,r)=>{if(e._bufferEntryNames.has(n)){Zn(`entry named ${n} already exists`);return}e._bufferEntryNames.set(n,e.bufferEntries.length);const a=Ke.getByteStrideFromShaderFormat(r);e.bufferEntries.push({name:n,type:r,sizeInBytes:a,offset:e.sizeInBytes,nativeType:Ke.getNativeTypeFromShaderFormat(r)}),e.sizeInBytes+=a},t.send=n=>{if(!e._buffer){const r={nativeArray:e.Float32Array,usage:$R.Storage,label:e.label};e._buffer=n.getBufferManager().getBuffer(r),e.bindGroupTime.modified(),e._sendTime.modified();return}n.getHandle().queue.writeBuffer(e._buffer.getHandle(),0,e.arrayBuffer,0,e.sizeInBytes*e.numberOfInstances),e._sendTime.modified()},t.createView=n=>{n in e||(e.arrayBuffer||(e.arrayBuffer=new ArrayBuffer(e.sizeInBytes*e.numberOfInstances)),e[n]=E.newTypedArray(n,e.arrayBuffer))},t.setValue=(n,r,a)=>{const s=e._bufferEntryNames.get(n);if(s===void 0){Zn(`entry named ${n} not found in UBO`);return}const i=e.bufferEntries[s];t.createView(i.nativeType);const o=e[i.nativeType];o[(i.offset+r*e.sizeInBytes)/o.BYTES_PER_ELEMENT]=a},t.setArray=(n,r,a)=>{const s=e._bufferEntryNames.get(n);if(s===void 0){Zn(`entry named ${n} not found in UBO`);return}const i=e.bufferEntries[s];t.createView(i.nativeType);const o=e[i.nativeType],u=(i.offset+r*e.sizeInBytes)/o.BYTES_PER_ELEMENT;for(let c=0;c{const a=e._bufferEntryNames.get(n);if(a===void 0){Zn(`entry named ${n} not found in UBO`);return}const s=e.bufferEntries[a];t.createView(s.nativeType);const i=e[s.nativeType],o=r.length/e.numberOfInstances;for(let u=0;u{const a=e._bufferEntryNames.get(n);if(a===void 0){Zn(`entry named ${n} not found in UBO`);return}const s=e.bufferEntries[a];t.createView(s.nativeType);const i=e[s.nativeType],o=r.length/e.numberOfInstances;for(let u=0;u{const a=e._bufferEntryNames.get(n);if(a===void 0){Zn(`entry named ${n} not found in UBO`);return}const s=e.bufferEntries[a];t.createView(s.nativeType);const i=e[s.nativeType],o=9;for(let u=0;ue._sendTime.getMTime(),t.getShaderCode=(n,r)=>{const a=[`struct ${e.label}StructEntry
{`];for(let s=0;s,
};
@binding(${n}) @group(${r}) var ${e.label}: ${e.label}Struct;
`),a.join(`
`)},t.getBindGroupEntry=()=>({resource:{buffer:e._buffer.getHandle()}}),t.clearData=()=>{e.numberOfInstances=0,e.sizeInBytes=0,e.bufferEntries=[],e._bufferEntryNames=new Map,e._buffer=null,delete e.arrayBuffer,delete e.Float32Array}}const zR={bufferEntries:null,bufferEntryNames:null,sizeInBytes:0,label:null,numberOfInstances:1};function xg(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,zR,n),E.obj(t,e),e._bufferEntryNames=new Map,e.bufferEntries=[],e._sendTime={},E.obj(e._sendTime,{mtime:0}),e.bindGroupTime={},E.obj(e.bindGroupTime,{mtime:0}),e.bindGroupLayoutEntry=e.bindGroupLayoutEntry||{buffer:{type:"read-only-storage"}},E.get(t,e,["bindGroupTime"]),E.setGet(t,e,["device","bindGroupLayoutEntry","label","numberOfInstances","sizeInBytes"]),WR(t,e)}const AR=E.newInstance(xg,"vtkWebGPUStorageBuffer");var xi={newInstance:AR,extend:xg};const{BufferUsage:HR}=wn,{vtkErrorMacro:Hs}=E;function jR(t,e){e.classHierarchy.push("vtkWebGPUUniformBuffer"),t.addEntry=(n,r)=>{if(e._bufferEntryNames.has(n)){Hs(`entry named ${n} already exists`);return}e.sortDirty=!0,e._bufferEntryNames.set(n,e.bufferEntries.length),e.bufferEntries.push({name:n,type:r,sizeInBytes:Ke.getByteStrideFromShaderFormat(r),offset:-1,nativeType:Ke.getNativeTypeFromShaderFormat(r),packed:!1})},t.sortBufferEntries=()=>{if(!e.sortDirty)return;let n=0;const r=[];let a=4;for(let s=0;s4&&(i.packed=!0,i.offset=n,r.push(i),n+=i.sizeInBytes)}for(let s=0;s{if(!e.UBO){const r={nativeArray:e.Float32Array,usage:HR.UniformArray,label:e.label};e.UBO=n.getBufferManager().getBuffer(r),e.bindGroupTime.modified(),e.sendDirty=!1}e.sendDirty&&(n.getHandle().queue.writeBuffer(e.UBO.getHandle(),0,e.arrayBuffer,0,e.sizeInBytes),e.sendDirty=!1),e.sendTime.modified()},t.createView=n=>{n in e||(e.arrayBuffer||(e.arrayBuffer=new ArrayBuffer(e.sizeInBytes)),e[n]=E.newTypedArray(n,e.arrayBuffer))},t.setValue=(n,r)=>{t.sortBufferEntries();const a=e._bufferEntryNames.get(n);if(a===void 0){Hs(`entry named ${n} not found in UBO`);return}const s=e.bufferEntries[a];t.createView(s.nativeType);const i=e[s.nativeType];s.lastValue!==r&&(i[s.offset/i.BYTES_PER_ELEMENT]=r,e.sendDirty=!0),s.lastValue=r},t.setArray=(n,r)=>{t.sortBufferEntries();const a=e._bufferEntryNames.get(n);if(a===void 0){Hs(`entry named ${n} not found in UBO`);return}const s=e.bufferEntries[a];t.createView(s.nativeType);const i=e[s.nativeType];let o=!1;for(let u=0;u({resource:{buffer:e.UBO.getHandle()}}),t.getSendTime=()=>e.sendTime.getMTime(),t.getShaderCode=(n,r)=>{t.sortBufferEntries();const a=[`struct ${e.label}Struct
{`];for(let s=0;s ${e.label}: ${e.label}Struct;`),a.join(`
`)}}const KR={bufferEntries:null,bufferEntryNames:null,sizeInBytes:0,label:null,bindGroupLayoutEntry:null,bindGroupEntry:null};function Sg(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};Object.assign(e,KR,n),E.obj(t,e),e._bufferEntryNames=new Map,e.bufferEntries=[],e.bindGroupLayoutEntry=e.bindGroupLayoutEntry||{buffer:{type:"uniform"}},e.sendTime={},E.obj(e.sendTime,{mtime:0}),e.bindGroupTime={},E.obj(e.bindGroupTime,{mtime:0}),e.sendDirty=!0,e.sortDirty=!0,E.get(t,e,["binding","bindGroupTime"]),E.setGet(t,e,["bindGroupLayoutEntry","device","label","sizeInBytes"]),jR(t,e)}const PR=E.newInstance(Sg,"vtkWebGPUUniformBuffer");var zn={newInstance:PR,extend:Sg};const{vtkDebugMacro:XR}=Pt,Nc=`
//VTK::Renderer::Dec
//VTK::Mapper::Dec
//VTK::TCoord::Dec
//VTK::RenderEncoder::Dec
//VTK::IOStructs::Dec
@fragment
fn main(
//VTK::IOStructs::Input
)
//VTK::IOStructs::Output
{
var output: fragmentOutput;
var computedColor: vec4 = mapperUBO.BackgroundColor;
//VTK::RenderEncoder::Impl
return output;
}
`,IR=`
fn vecToRectCoord(dir: vec3) -> vec2 {
var tau: f32 = 6.28318530718;
var pi: f32 = 3.14159265359;
var out: vec2 = vec2(0.0);
out.x = atan2(dir.z, dir.x) / tau;
out.x += 0.5;
var phix: f32 = length(vec2(dir.x, dir.z));
out.y = atan2(dir.y, phix) / pi + 0.5;
return out;
}
//VTK::Renderer::Dec
//VTK::Mapper::Dec
//VTK::TCoord::Dec
//VTK::RenderEncoder::Dec
//VTK::IOStructs::Dec
@fragment
fn main(
//VTK::IOStructs::Input
)
//VTK::IOStructs::Output
{
var output: fragmentOutput;
var tcoord: vec4 = vec4(input.vertexVC.xy, -1, 1);
var V: vec4