ELF>@@]\ !"#$%&'()*+,-/012345689:;ABCDEFKLMNOSTATUHHLI9tFHHHt HHPHMt I$HLPPHEHHH]A\DH]A\H@AWIAVAUATUSHhdH%(HD$XxtB9IHD$XdH+%( Hh[]A\A]A^A_fLt$Ll$01HD$LH\$@Ld$LH\$0Hl$ HT$LLfoAz;HD$0Hl_FragCoHT$@HH@ord.fDHHD$HT$0HD$81Hl$HD$HT$HD$LLfoAplHT$ fD@HD$HT$HD$LH|$H9tH|$0H9t1LLH\$0HD$BHT$; LfoHD$0HT$@fofx@L@fo@ fo@0HD$HT$0HD$81Hl$HD$HT$HD$LLfoHing::DecHT$ HHHD$HT$HD$LH|$H9tH|$0H9t1LLH\$0HD$HT$H5HD$0HxHT$@HHHHHH)H)HLLHD$HT$0HD$81Hl$HD$HT$HD$LLfoHing::PreHT$ HH@Colo@rHD$HT$HD$LH|$H9tH|$0H9t1LLH\$0HD$hHT$H5HD$0HxHT$@HHHHH`H)H)hHLLHD$HT$0HD$81Hl$HD$HT$HD$LLfoHing::ImpHT$ HH@lHD$HT$HD$LH|$H9tH|$0H9Lt$Ll$01HD$LLH\$@z;H\$0Ld$HT$LLfoHD$0Hl_FragCoHT$@fhHl$ HH@ord.HD$HT$0HD$81Hl$HD$HT$HD$LLfoAplHT$ fDXHD$HT$HD$LH|$H9tH|$0H9t1LLH\$0HD$HT$LLfoAh;HD$0HD opaqueHT$@HH@DeptfDP@ HD$HT$0HD$81Hl$HD$HT$HD$LLfoHing::DecHT$ HHHD$HT$HD$LH|$H9tH|$0H9t1LLH\$0HD$aHT$H5HD$0HxHT$@HHHHHYH)H)aHLLHD$HT$0HD$81Hl$HD$HT$HD$LLfoHing::PreHT$ HH@Colo@rHD$HT$HD$LfLt$Ll$01HD$LH\$@Ld$LH\$0Hl$ HT$z;LfoHD$0Hl_FragCoHT$@fpLHH@ord.HD$HT$0HD$81Hl$HD$HT$plLLfoHD$HT$ fHHD$HT$HD$LH|$H9tH|$0H9t1LLH\$0HD$!HT$LLfoHD$0HT$@fo@ @HD$HT$0HD$81Hl$HD$HT$HD$LLfoHing::DecHT$ HHHD$HT$HD$LH|$H9tH|$0H9t1LLH\$0HD$EHT$H5HD$0HxHT$@HHHHH=H)H)EHLLHD$HT$0HD$81Hl$HD$HT$foHD$LHing::PreHT$ HpL@Colo@rHD$HT$HD$LH|$H9tH|$0H9t1LLH\$0HD$VHT$LLfoHD$0HT$@; fo@P0].a@fofPT@ fo@0fo@@HD$HT$0HD$81Hl$HD$HT$HD$LLfoHing::ImpHT$ HH@lHD$HT$HD$L IIIIIIIIIIIIIIIIIIIIII|t fAWAVAUATUSHdH%(H$1MIHHMH5LPLt$0Ld$(1HD$(OHD$@LLHD$HD$0HT$(H5HD$0HxHT$@HHHHHGH)H)OHHD$(HT$0HD$8IEHHH9 IHT$8Ht-H?H)H=y H5LH?H+D$8H=[> \H5LHD$`H|$P1LH|$HD$HD$PHD$(mHT$(HD$PHxH5HHT$`HHHHeH)H)mHHD$(HT$PHD$Xxth' 'H|$PH;|$tH|$0H;|$tH$dH+%(H H[]A\A]A^A_L$H$1LLH$HD$(HT$(L|$pLfoH$LHepthTex;H$foH@foƀ @ fo@0fo@@fo@Pfo@`fo@pHD$(H$H$H$1H$HD$pHD$(HT$(HD$pLHfoHing::DecH$HHHD$(HT$pHD$xLH|$pH;<$tH$H9t1LLH$HD$(UHT$(H$HxH5HH$HHHHMH)H)UHLLHD$(H$H$H$1HD$(HD$pHT$(HD$pLHfoAmpH$@r::IfDH@lHD$(HT$pHD$xLH|$pH;<$tH$H9t1LLH$HD$(HT$(AitLHfoH$Hing::RayH$HH@::InfD@HD$(H$H$LH$H9t1LLH$HD$(#HT$(foecLH$H$fofx H@"k@HD$(H$H$HT$H$H9fL$H$1LLH$HD$(HT$(foL|$pLH$LH$foǀode.@foƀ @ fo@0fo@@fo@Pfo@`fo@pfofofoHD$(H$H$H$1H$HD$pHD$(HT$(HD$pLHfoHon::InitH$HHHD$(HT$pHD$xLH|$pH;<$tH$H9t1LLH$HD$(BHT$(; LLfoH$H$fofH@@fo@ fo@0HD$(H$H$H$1HD$(HD$pHT$(HD$pLHfoHing::DecH$HHHD$(HT$pHD$xLH|$pH;<$tH$H9t1LLH$HD$(IHT$(H$HxH5HH$HHHHAH)H)IHLLHD$(H$H$H$1HD$(HD$pHT$(HD$pLHfoH$mp@r::IfP@lHD$(HT$pHD$xLH|$pH;<$tH$H9t1LLH$HD$(HT$(AitLHfoH$Hing::RayH$HH@::InfDXHD$(H$H$LH$H9t1LLH$HD$(#HT$(LHfoH$AecH$fofDP @"k@HD$(H$H$HT$@L$H$1LLH$HD$(!HT$(foL|$pLH$LH$fo@ @HD$(H$H$H$1H$HD$pHD$(HT$(HD$pLHfoHing::DecH$HHHD$(HT$pHD$xLH|$pH;<$tH$H9t1LLH$HD$(HT$(H$HxH5HH$HHHHH)H)HLLHD$(H$H$H$1HD$(HD$pHT$(fompHHD$pH$fpL@r::I@lHD$(HT$pHD$xLH|$pH;<$tH$H9t1LLH$HD$(HT$(LHHing::RayfoH$H$HHitfH@::InHD$(H$H$LH$H9t1LLH$HD$(#HT$(LHfoH$H$ecfofP @"k@HD$(H$H$HT$LuH=H=HHHHHHHHHHHHHHHHHHHHHH|tu 1DfUHSHHxtthH[]@HcpH0H5HHchH0HH5H[]fHctH0HH5H[]HcpH0HH5H[]ÐfDUHSHHxt%H[]HcpH0H5HHctH0H5HHchH0H5HH`HH5H[]HctH0H5HHcpH0HH5H[]f.HcpH0HH5H[]Ðff.|tt1f.fSHfHHǃH foHhfHxfƃǃǃHǃƃǃfHǃ`0@P[fATUHHILHL]A\H9xuxHǀff.UHhSH0HH;Ht HP HHH9uH[]Ðf.ATUHHHHt HL(MtLLHDž(L MtLLHDž LMtLLHDžLMtLLHDžHH]A\fATUHHHHHHt 1HL(MtLLHDž(L MtLLHDž LMtLLHDžLMtLLHDžHH]A\UHH]f.1HtUHSHHHHHPHHXStspHH[E1A]ff.UHSHHHHHPH'H0StspHH[E1A ]ff.UHSHHHHHPStspHH[]USHHHHHPHHH[]fAUIATIUHSHHMt41fDIcDH1E1E1HH0I9uHEH EHH9u2D;eTt DeTHHHD[]A\A]fDDHff.UHSHHH-UHUCtCpfǃ*YCxH,H[]Ð@9}9ÐfHH@HH@Hh ÐfHp ÐfUHSHHH-UHEHH[]@AWAVAUATUSHHdH%(H$HL$Lt$pHD$@LLt$HPHfHnHT$0HfHnfl) $Hf1$H$H$1f$HHDŽ$HhH@H}Hl$pHD$ LHHfo $fL$L)$Ll$xH@)L$pH$)$)$HLLDŽ$HƄ$HD$xH$HD$8H$HDŽ$H|$.H5HD$`L|$PHD$XHD$(HD$`H$HD$PH$H_L$M>L95H$11LI)Ll$HHt$(LLH~T$0L|$@LLHfHnfl)T$LH|$PH;<$tHfol$H$H@)l$pH$H;|$8tHLHHD$xHEHL$ LHl$pHLpHHH$H{XHHLH$dH+%(u9H[]A\A]A^A_fIH$LHHHHHHff.AWAVAUATUSHHdH%(H$HL$Lt$pHD$@LLt$HHHfHnHL$0HfHnfl) $Hf1$H$H$1f$HHDŽ$HhH@H}Hl$pHD$ LHHfo $fL$L)$Ll$xH@)L$pH$)$)$HLLDŽ$HƄ$HD$xH$HD$8H$HDŽ$H|$-H5HD$`L|$PHD$XHD$(HD$`H$HD$PH$HL$MnL9eH$11LI)Ll$HHt$(LLH~T$0L|$@LLHfHnfl)T$LH|$PH;<$tHfol$H$H@)l$pH$H;|$8tHLHHD$xHEHT$ LHl$pHTpHHH$HHHHHHHH9ugGPLH$dH+%(uDH[]A\A]A^A_fDIH$LHHHHHHfDAWAVAUATIUHSHdH%(H$HHƇHHHHfHnHL$(HfHnfl) $LHHL|$pLLHD$pHEhHEpHPHHHH9 HHL$HD$@LHf1$H$H$1f$HHDŽ$HXH@H{H\$pHD$LHHfo$$fLt$x)$H@)d$pH$H$HHD$0)$)$HLLDŽ$HƄ$HD$xH$HD$8H$HDŽ$#H5LHD$`HD$XHD$ HD$PH$HD$`HD$HD$PH$HdL$ML9H$H<$11I)Lt$HH$Ht$ LH~T$(L|$@LLHfHnfl)$LH|$PH;|$tHfo4$H$H@)t$pH$H;|$8tHH|$0L0HHD$xHCHL$LH\$pLhLHLpHHH$H;Ht UtupHI9uHNH0tDLHLH$dH+%(+H[]A\A]A^A_IIM9uH0LHH8LHH@LHHHLHHPLHHXLHH`LH(@IHHMhHUtHHupLElL|$pf.H<$H$f.fHHHHHHHfUHAWAVLPAUATLSHLH8dH%(HEHHDžHHHfHnHHfHnfl)H11ffMHEHHELpH@HEI~LPHLHHfof)`H@)PHHHH)p)HLDžHDžHƅHXHHHHXHI.H5LH0ƅ@LHH@HH0HHDž8HCLpML9HxH11I)HHLHHHHL~LHfHnfl)HH0H;tHfoHH@)PHH;tHHHHXIFHLLPHPHHHHCtHSlE1shH`1PDKpHXZHHpHHHH`HH HHLPLHHH1H1LI<$Hs Dž?HH5H8HH`L H5LHL`1LLPHDžHfoHPLH`@epth@!HHPHXHPL9tHH1LLPHDžHfoHPLH`@ied!HHPHXHPL9tH`LHEdH+%(He[A\A]A^A_]DINHHHHL`1LLPHDž4HfoHPHHH`Hfo@0th; @fo@ HHPHX1H0HDžHfoH0HHH@HH0H8LH0H;tHPL9tH1LLPHDžHfoHPH d, 0., H`foH@foǀ0.);@ foƀ @0fo@@fo@Pfo@`fo@pfofofofoHHXHPHHH1HDžH0HfoH0HHH@HH0H8LH0H;tHPL9tH(HHE1E11LHIHH LH9LI<$L\HHHHHHHHHHHHHHHHf.AWAVAUATUSHHdH%(H$HL$Hl$pHD$@LHpHfHnHt$ HfHnfl) $H1ff$1H$H$H$HDŽ$HHH@HyHL$pHL$HHD$HHfo $fLd$x)$H@)L$pH$H$HHD$8)$)$HLLDŽ$HƄ$HD$xH$HD$0H$HDŽ$(H5HHD$`D$`LLt$PH$HD$PH$HD$XHL$ML9H$11LI)Ld$HLLLH~T$ L|$@LLHfHnfl)T$ LH|$PH;<$tHfol$ H$H@)l$pH$H;|$0tHH|$8HHD$xHD$HT$LHD$pH@HTpHHH$LHߋpD$PD$T1HHH HpH9|tǃ|HHctH0HH HL$1LHLl$pHD$HHT$HfoHD$pHH$thfP@.HD$HHT$pHD$xH|$pL9tH1LHLl$pHD$HHT$HfoHD$pHH$@dHD$HHT$pHD$xH|$pL9tHctH0LH$dH+%(uJH[]A\A]A^A_@IAH$L;1HhHHHHHHHHfDAWIAVAUATUSHdH%(H$HH$Lt$pHD$@HLt$HHHfHnHL$ HfHnfl)$$Hf1$H$H$1f$HHDŽ$HXH@H{H\$pHD$0LHHfo$$fL$L)$Ld$xH@)d$pH$)$)$HLHDŽ$HƄ$HD$xH$HD$8H$HDŽ$H|$ H5ID$`Ll$PHD$XH$HD$`HD$HD$PH$HoL$MNL9EH$11LI)Ld$HH4$LLH~l$ H|$@LH<$HfHnfl)l$ LH|$PH;|$tHfoL$ H$H@)L$pH$H;|$8tHLHHD$xHCHL$0HH\$pHLpHHH$AOpEGt1I1I AI IIE ID AIq AILcM1L5#DHƺHHI9tjIL$I$HL9u:I$HuHI$LHHEHP(fLHfDIq LALJIILJH\$AhLD$pHމD$tfI(((I@IpHLHD$p fI((I@LLH<$H$dH+%(u H@ HD$HH$H$1HL$pHD$HHT$HHD$pfoH4$H$H|$HD$HHT$pHD$xLH|$pH;|$tH$H9t1LLH$HD$HHT$HH$HxH5HH$HHHHH)H)HLHD$HH$L$$H$HD$1LHD$HHD$pHT$HfoHD$pLH|$H$HD$HHT$pHD$xLH|$pH;|$tH$H9t(Ld$PE1E1L1LHHH|$PHD$`H(H9H(HmHfDLH<$H$HHHHHHHHHHHHHHff.AWAVAUATUSHHdH%(H$HL$L|$pHD$@LL|$HPHfHnHT$0HfHnfl) $H11ff$H$H$H$HDŽ$HhH@H}Hl$pHD$ LHHfo $fL$L)$Ll$xH@)L$pH$)$)$HLLDŽ$HƄ$HD$xH$HD$8H$HDŽ$H|$!H5HD$`L|$PHD$XHD$(HD$`H$HD$PH$HL$ML9H$11LI)Ll$HHt$(LLH~T$0L|$@LLHfHnfl)T$LH|$PH;<$tHfol$H$H@)l$pH$H;|$8tHLHHD$xHEHL$ LHl$pHLpHHH$<.H{XH-HHH9GPCPHt HHHH9GPCPHHHH HAHHLc1L-Mu.gLMtHLHI9t;HH oDepth) { // Ignore fragments that are occluded by opaque geometry: gl_FragData[1].xy = vec2(-1., oDepth); return; } else { gl_FragData[1].xy = vec2(-gl_FragDepth, gl_FragDepth); return; } ivec2 pixelCoord = ivec2(gl_FragCoord.xy); vec4 front = texelFetch(lastFrontPeel, pixelCoord, 0); vec2 minMaxDepth = texelFetch(lastDepthPeel, pixelCoord, 0).xy; float minDepth = -minMaxDepth.x; float maxDepth = minMaxDepth.y; // Use a tolerance when checking if we're on a current peel. // Some OSX drivers compute slightly different fragment depths // from one pass to the next. This value was determined // through trial-and-error -- it may need to be increased at // some point. See also the comment in vtkDepthPeelingPass's // shader. float epsilon = 0.0000001; // Default outputs (no data/change): gl_FragData[0] = vec4(0.); gl_FragData[1] = front; gl_FragData[2].xy = vec2(-1.); // Is this fragment outside the current peels? if (gl_FragDepth < minDepth - epsilon || gl_FragDepth > maxDepth + epsilon) { return; } // Is this fragment inside the current peels? if (gl_FragDepth > minDepth + epsilon && gl_FragDepth < maxDepth - epsilon) { // Write out depth so this frag will be peeled later: gl_FragData[2].xy = vec2(-gl_FragDepth, gl_FragDepth); return; } // Continue processing for fragments on the current peel: vec4 frag = gl_FragData[0]; // Default outputs (no data/change): // This fragment is on a current peel: if (gl_FragDepth >= minDepth - epsilon && gl_FragDepth <= minDepth + epsilon) { // Front peel: // Clear the back color: gl_FragData[0] = vec4(0.); // We store the front alpha value as (1-alpha) to allow MAX // blending. This also means it is really initialized to 1, // as it should be for under-blending. front.a = 1. - front.a; // Use under-blending to combine fragment with front color: gl_FragData[1].rgb = front.a * frag.a * frag.rgb + front.rgb; // Write out (1-alpha): gl_FragData[1].a = 1. - (front.a * (1. - frag.a)); } else // (gl_FragDepth == maxDepth) { // Back peel: // Dump premultiplied fragment, it will be blended later: frag.rgb *= frag.a; gl_FragData[0] = frag; } ivec2 pixelCoord = ivec2(gl_FragCoord.xy); vec2 minMaxDepth = texelFetch(lastDepthPeel, pixelCoord, 0).xy; float minDepth = -minMaxDepth.x; float maxDepth = minMaxDepth.y; // Discard all fragments outside of the last set of peels: if (gl_FragDepth < minDepth || gl_FragDepth > maxDepth) { discard; } // Transform zStart and zEnd to texture_coordinates mat4 NDCToTextureCoords = ip_inverseTextureDataAdjusted * in_inverseVolumeMatrix[0] * in_inverseModelViewMatrix * in_inverseProjectionMatrix; // Start point vec4 startPoint = WindowToNDC(gl_FragCoord.x, gl_FragCoord.y, zStart); startPoint = NDCToTextureCoords * startPoint; startPoint /= startPoint.w; // Initialize g_dataPos as if startPoint lies Inside (b.) g_dataPos = startPoint.xyz + g_rayJitter; bool isInsideBBox = !(any(greaterThan(g_dataPos, in_texMax[0])) || any(lessThan(g_dataPos, in_texMin[0]))); if (!isInsideBBox) { vec3 distStartTexCoord = g_rayOrigin - g_dataPos; if (dot(distStartTexCoord, g_dirStep) < 0) { // startPoint lies behind the bounding box (c.) return vec4(0.0); } // startPoint lies in-front (a.) g_dataPos = g_rayOrigin + g_rayJitter; } // End point { vec4 endPoint = WindowToNDC(gl_FragCoord.x, gl_FragCoord.y, zEnd); endPoint = NDCToTextureCoords * endPoint; g_terminatePos = endPoint.xyz / endPoint.w; } // Adjust the ray segment to account for clipping range: if (!AdjustSampleRangeForClipping(g_dataPos.xyz, g_terminatePos.xyz)) { return vec4(0.); } // Update the number of ray marching steps to account for the clipped entry point ( // this is necessary in case the ray hits geometry after marching behind the plane, // given that the number of steps was assumed to be from the not-clipped entry). g_terminatePointMax = length(g_terminatePos.xyz - g_dataPos.xyz) / length(g_dirStep); // Make sure that we're sampling consistently across boundaries: g_dataPos = ClampToSampleLocation(g_rayOrigin, g_dirStep, g_dataPos, true /*ceil*/); // Ensure end is not located before start. This could be the case // if end lies outside of the volume's bounding box. In those cases // a transparent color is returned. vec3 rgrif = g_terminatePos.xyz - g_dataPos.xyz; if (dot(rgrif, g_dirStep) < 0) { return vec4(0.f); } // Compute the number of steps and reinitialize the step counter. g_terminatePointMax = length(rgrif) / length(g_dirStep); g_currentT = 0.0; g_fragColor = vec4(0.0); vec2 pixelCoord = vec2(gl_FragCoord.x, gl_FragCoord.y); vec2 inner = texture2D(innerDepthTex, pixelCoord * in_inverseWindowSize).xy; vec2 outer = texture2D(outerDepthTex, pixelCoord * in_inverseWindowSize).xy; initializeRayCast(); vec4 front = vec4(0.f); vec4 back = vec4(0.f); // Check for the presence of opaque/trans geometry: bool hasOpaqueGeometry = outer.y >= 0.f; bool hasTranslucentGeometry = inner.x != -1.f; bool hasAnyGeometry = hasOpaqueGeometry || hasTranslucentGeometry; vec2 frontRange = vec2(1.f, -1.f); vec2 backRange = vec2(1.f, -1.f); if (!hasAnyGeometry) { // No opaque or translucent geometry backRange = vec2(0., 1.); } else if (!hasTranslucentGeometry) { // Opaque geometry only. float opaqueDepth = inner.y; backRange = vec2(0.f, opaqueDepth); } else // translucent geometry, maybe opaque, too: { float opaqueDepth = hasOpaqueGeometry ? outer.y : 1.f; frontRange = vec2(0.f, -inner.x); backRange = vec2(inner.y, opaqueDepth); } if (frontRange.x < frontRange.y) { front = castRay(frontRange.x, frontRange.y); } if (backRange.x < backRange.y && // range valid front.a < g_opacityThreshold) // early termination { back = castRay(backRange.x, backRange.y); } gl_FragData[0] = back; gl_FragData[1] = front; vec2 pixelCoord = vec2(gl_FragCoord.x, gl_FragCoord.y); vec2 innerDepths = texture2D(innerDepthTex, pixelCoord * in_inverseWindowSize).xy; vec2 outerDepths = texture2D(outerDepthTex, pixelCoord * in_inverseWindowSize).xy; vec4 lastFrontColor = texture2D(lastFrontColorTex, pixelCoord * in_inverseWindowSize); // Discard processed fragments if (outerDepths.x == -1) { discard; } // Negate the near depths; they're negative for MAX blending: float frontStartDepth = -outerDepths.x; float frontEndDepth = -innerDepths.x; float backStartDepth = innerDepths.y; float backEndDepth = outerDepths.y; // Only record the back color (for occlusion queries) if the // front/back ranges are the same: bool onlyBack = frontStartDepth == backStartDepth && frontEndDepth == backEndDepth; bool noInnerDepths = innerDepths.x == -1.0; if (noInnerDepths) { frontEndDepth = outerDepths.y; } float oDepth = texture2D(opaqueDepthTex, pixelCoord * in_inverseWindowSize).x; bool endBehindOpaque = frontEndDepth >= oDepth; float clampedFrontEnd = frontEndDepth; if (endBehindOpaque) { clampedFrontEnd = clamp(frontEndDepth, oDepth, oDepth); } initializeRayCast(); vec4 frontColor = vec4(0.f); if (!onlyBack) { frontColor = castRay(frontStartDepth, clampedFrontEnd); } vec4 backColor = vec4(0.); if (!endBehindOpaque && !noInnerDepths) { backColor = castRay(backStartDepth, backEndDepth); } // The color returned by castRay() has alpha pre-multiplied, // as required for back-blending. gl_FragData[0] = backColor; // Front color is written with negated alpha for MAX blending: lastFrontColor.a = 1. - lastFrontColor.a; // Use under-blending to mix the front color on-the-fly: // (note that frontColor.rgb is already multiplied by its // alpha, this is done within castRay()) gl_FragData[1].rgb = lastFrontColor.a * frontColor.rgb + lastFrontColor.rgb; // Write out (1-alpha) for MAX blending: gl_FragData[1].a = 1. - (lastFrontColor.a * (1. - frontColor.a)); vec2 pixelCoord = vec2(gl_FragCoord.x, gl_FragCoord.y); vec2 depthRange = texture2D(depthRangeTex, pixelCoord * in_inverseWindowSize).xy; // Discard processed fragments if (depthRange.x == -1.0) { discard; } float startDepth = -depthRange.x; float endDepth = depthRange.y; initializeRayCast(); vec4 color = castRay(startDepth, endDepth); // The color returned by castRay() has alpha pre-multiplied, // as required for back-blending. gl_FragData[0] = color; vtkDualDepthPeelingPass::RenderTranslucentPassvtkDualDepthPeelingPass::RenderVolumetricPassvtkDualDepthPeelingPass::InitializevtkDualDepthPeelingPass::CopyOpaqueDepthBuffervtkDualDepthPeelingPass::InitializeDepthvtkDualDepthPeelingPass::PreparevtkDualDepthPeelingPass::PeelVolumesOutsideTranslucentRangevtkDualDepthPeelingPass::ClearFrontDestinationvtkDualDepthPeelingPass::CopyFrontSourceToFrontDestinationvtkDualDepthPeelingPass::InitializeTargetsForTranslucentPassvtkDualDepthPeelingPass::InitializeTargetsForVolumetricPassvtkDualDepthPeelingPass::PeelTranslucentGeometryvtkDualDepthPeelingPass::PeelVolumeGeometryvtkDualDepthPeelingPass::BlendBackBuffervtkDualDepthPeelingPass::EndTranslucentOcclusionQueryvtkDualDepthPeelingPass::EndVolumetricOcclusionQueryvtkDualDepthPeelingPass::AlphaBlendRendervtkDualDepthPeelingPass::BlendFinalImage vec4 front = texture2D(frontTexture, texCoord); vec4 back = texture2D(backTexture, texCoord); front.a = 1. - front.a; // stored as (1 - alpha) // Underblend. Back color is premultiplied: gl_FragData[0].rgb = (front.rgb + back.rgb * front.a); // The first '1. - ...' is to convert the 'underblend' alpha to // an 'overblend' alpha, since we'll be letting GL do the // transparent-over-opaque blending pass. gl_FragData[0].a = (1. - front.a * (1. - back.a)); vtkDualDepthPeelingPass::FinalizevtkDualDepthPeelingPass::RenderH|$H9tH|$0H9tLH|$H9tH|$0H9tLH|$H9tH|$0H9tLH|$H9tH|$0H9tLH|$H9tH|$0H9tLH|$H9tH|$0H9tLH|$H9tH|$0H9tLH|$H9tH|$0H9tLH|$H9tH|$0H9tLH|$H9tH|$0H9tLH|$H9tH|$0H9tLH|$pH;<$tH$H9tH|$PH;|$tHH|$0H;|$tHH|$pH;<$tH|$pH;<$tH|$pH;<$tH|$pH;<$tvH|$pH;<$g]H|$pH;<$NDLHLHEHL$ Hl$pHHLpHLL|$@HH$LHH|$PH;<$tH|$L|$@H|$PH;<$tݐH|$PH;<$tH|$L|$@LHH|$PH;<$tLHEHT$ Hl$pHHTpHLL|$@HH$랐H|$PH;|$tLL|$@LHLHCHL$H\$pHLpHLL|$@HH$H|$PH;|$tH0H;tLLLHH0H;tH0H;tHPL9tHH H9tH0H;tHPL9tLLIFHLPHPHLLHHHPL9HPL9H|$pL9tLHLHD$H\$HD$pH@H\pHLL|$@HH$H|$pL9tH|$PH;<$tHL|$@HxH|$PH;<$tِLHCHL$0H\$pHLpHHLHH$HD$@H$H<$HH|$PH;|$tH|$HD$@H$H|$PH;|$tH|$pL9tLHLHD$HL$HD$pH@HLpHLL|$@HH$H|$pL9tH|$PH;<$tHL|$@HxH|$PH;<$tِLHEHT$ H$HHHLL|$PHH$LHH|$`H;<$tLL|$PH$H9tHH|$`H;<$tH$H;|$tLLl$PLHH$H;|$tH$H;|$tH$L9tH|$`HD$pH9tH$H;|$tH$L9tLHHIFHL$L$HHLLl$PHH$#H$L9H$L9LH$HCH\$ HHLL|$PHH$LHH|$`H;<$tH|$L|$PH|$`H;<$tLH$HCH\$ HHLL|$PHH$LHH|$`H;<$tH|$L|$PH|$`H;<$tH|$pL9tLHLHD$HL$HD$pH@HLpHLL|$@HH$H|$pL9tH|$PH;<$tHL|$@HxH|$PH;<$tِH|$pL9tLHLHD$HT$HD$pH@HTpHLL|$@HH$H|$pL9tH|$PH;<$tHL|$@HxH|$PH;<$tِH$H;|$tLLl$PLHH$H;|$tH$H;|$tH$L9tH|$`HD$pH9tH$H;|$tH$L9tLHHIFHL$L$HHLLl$PHH$#H$L9m LHEHT$ Hl$pHHTpHLL|$@HH$LHH|$PH;<$tH|$L|$@H|$PH;<$tݐLHEHT$ Hl$pHHTpHLL|$@HH$LHH|$PH;<$tH|$L|$@H|$PH;<$tݐLHEHL$ Hl$pHHLpHLL|$@HH$LHH|$PH;<$tH|$L|$@H|$PH;<$tݐH$L9tLHLIEHL$ L$HHLL|$PHH$H|$`H;<$tHL|$PHH$L9zpH$L9_UH$L9D:H|$`H;<$tH$H9tHLHH$H9tHH|$pH;|$tH$H9tH|$PHD$`H9tHH|$pH;|$tH$H9tHLIFHL$L$HHHLl$@HHH$%H|$pH;|$tLLl$@H|$pH;|$tLHEHL$ Hl$pHHLpHLL|$@HH$LHH|$PH;<$tH|$L|$@H|$PH;<$tݐH|$`H;<$tH|$ L|$PLHH|$`H;<$tLHCHT$H$HHLL|$PHH$       !G:`      $J 3# *I0*Ej)     1      )y  (      /I            +       NI         >   6/Oy#       ,+L*7LI            I         \   y       ,*I*I*qIa    #  i  #     y     "     7        I= *vtkAbstractVolumeMapperbasic_string::appendopaqueDepthlastDepthPeellastFrontPeelouterDepthTexinnerDepthTexlastFrontColorTexopaqueDepthTexdepthRangeTexclearValueoDepthinTexnewPeelvtkDualDepthPeelingPass::PeelfrontTexturebackTextureHSHHHHHHCXH9tHH{8HH[HUHHHHHHEXH9tHH}8HHEH]ATL%UH-HHH=LHH-HH=LHH-HH=LHH-HH=HLH]A\23vtkDualDepthPeelingPass?gl_FragDepth = g//VTK::Depth::Imuniform sampler2//VTK::DepthPeelD lastFrontPeel; uniform sampler2D lastDepthPeelD lastDepthPeel; // Pre-multiply alpha for depth peeling: gl_FragData[0].rgb *= gl_FragData[// Termination is defined somewhere else within the pass (CallWorker::Impl // and Ray::Init), so this tag is substituted for an empty implementation // to avoid unnecessary c//VTK::TerminatiD outerDepthTex;2D innerDepthTex//VTK::CallWorkeing::Ray::PathCh; uniform sampler2D lastFrontColorTex; uniform sampler2D opaqueDD depthRangeTex;uniform float clearValue; uniform sampler2D oDep//VTK::FSQ::Decl float d = texture2D(oDepth, texCoord).x; if (d == clearValue) { // If no depth value has been written, discard the frag: discard; } gl_FragData[0] = gl_FragData[1] = vec4(-1,//VTK::FSQ::ImplCopying opaque dOpaque depth copInitializing depDepth initializePeeling volumes external to translucent geometryExternal volume ClearFrontDestin gl_FragData[0] = texture2D(inTCopying front texture src -> dst for pre-pass inFront texture coStart translucenTranslucent peelStart volumetricVolumetric peeli vec4 f = texture2D(newPeel, texCoord); // new frag if (f.a == 0.) { discard; } Start blending bAlpha blend translucent render sslucent render eAlpha blend volumetric render stmetric render enD frontTexture; GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0GNUzRx 0DXl F   ! !    4!H \ p  0hFAG H ABG DAB EZ A yuEY B PzPLRx L$` FEB B(A0A8DB 8F0A(B BBBJ tPFBB B(A0A8G4 8F0A(B BBBH @.HTEDG \ FAE N FAC i FAH iFALqEDG ` FAI  FAI N FAK iFA-E,?FFD \ DBA 4 l "$EEHK jAA$FAG DB(FAG DBEL,$@cEDJ xDO$hcEDJ xDO$@EDJ ^DF$=EAJ fAA8FED D(D0} (D ABBK $kEHL OAAD-Xl  $;EHL RMA@LoILxPFBB B(A0A8J 8A0A(B BBBC @PdFBB B(A0A8J' 8A0A(B BBBG P>FBB B(D0D8G 8A0A(B BBBI 0~8T EC DKH.N.P F 9 P9FBB B(A0A8Jy 8A0A(B BBBE P,FEB B(A0A8G 8A0A(B BBBF PFBB B(A0A8J 8A0A(B BBBE PnFBB B(A0A8J 8A0A(B BBBH pPFBB B(A0A8J 8A0A(B BBBG 4( &EP K AP, "FBB B(A0D8G 8A0A(B BBBD P FBB B(A0D8GG 8A0A(B BBBG P FBB B(A0A8J 8A0A(B BBBF p P FBB B(A0A8JC 8A0A(B BBBK P FBB B(A0A8J 8A0A(B BBBJ ` P FBB B(A0A8J  8A0A(B BBBE P FBB B(A0A8J  8A0A(B BBBE P Pt FBB B(A0A8J[ 8A0A(B BBBC P IFBB B(A0A8JS 8A0A(B BBBK @ Pd  FBB B(A0A8JE 8A0A(B BBBI &P TFBB B(A0A8J 8A0A(B BBBE 0PT|FBB B(D0D8G 8A0A(B BBBH $FHN xGB O !"#$%'(*+,-/1234568:=?====nACEe=~==~=9V=:==p=:=4==n = O= =F =Z = C=^ l= =&==rG@GkzQQQ Q@ QPQ`Q0<h!<(&<+Qp1< 7Q=QCQIQOQU@[< a<0g<m<8sQyQQQQQ<QQQQQQQQ Q0Q@QPQ`QpQ<Q<P!@ @9@G@-@U!@c'@q-@3@9Q ?<@#E<p#K<#Q<#W@]@cQ@iQPoQ0uQ@{QPQ`QpQQQQQQQQQQQ Q0<#Q`Qp<($R<P$Q Q Q Q <$ Q& <$- @4 Q; QB QI Q P QW Q^ <%e <@%l <%s Q0z Q@ <% QP Q` <% @ Q Qp Q Q Q Q Q <& <P& @ <& Q Q Q Q Q  Q0 <&" @) @0 Q@7 <&> <(E <(L PQ .V 7[ 7` 7(e 76j  "  "! ""3 "#d "$ "%F "' "( - "* [ "+! ", "-! "/ $ "1 V "2! "3 "4 "5 "6 -hnp "8%":uJj` !S d  { Xv.qi`- '=!N[|` ?"A  "Eb E !!.!O"p"#cWy#c!#@|0$=%Wp$#Z0%k%-% %^&  & 0&; "C@["C@"EIOp&>+    !F!!*!->!"F"f""" 3 "#A#h#####R$t$$$&%=9V%y%%PB%%&@&j&&&& '3'U'H''Mn' R5(Z&m(["(@_(0c,)h c)n))w**(*P{d**I*P *`T+:+q+|++,#,;,S,`,,,,, -2-[-@ --!K-!L-&.@.n..../(/K/}/// 060N0g00001_ZN23vtkDualDepthPeelingPass34PostReplaceTranslucentShaderValuesERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_S6_P17vtkAbstractMapperP7vtkProp.cold_ZN23vtkDualDepthPeelingPass32PreReplaceVolumetricShaderValuesERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_S6_P17vtkAbstractMapperP7vtkProp.cold_ZN23vtkDualDepthPeelingPass3NewEv.cold_ZN23vtkDualDepthPeelingPass21RenderTranslucentPassEv.cold_ZN23vtkDualDepthPeelingPass20RenderVolumetricPassEv.cold_ZN23vtkDualDepthPeelingPass10InitializeEPK14vtkRenderState.cold_ZN23vtkDualDepthPeelingPass21CopyOpaqueDepthBufferEv.cold_ZN23vtkDualDepthPeelingPass15InitializeDepthEv.cold_ZN23vtkDualDepthPeelingPass7PrepareEv.cold_ZN23vtkDualDepthPeelingPass34PeelVolumesOutsideTranslucentRangeEv.cold_ZN23vtkDualDepthPeelingPass21ClearFrontDestinationEv.cold_ZN23vtkDualDepthPeelingPass33CopyFrontSourceToFrontDestinationEv.cold_ZN23vtkDualDepthPeelingPass35InitializeTargetsForTranslucentPassEv.cold_ZN23vtkDualDepthPeelingPass34InitializeTargetsForVolumetricPassEv.cold_ZN23vtkDualDepthPeelingPass23PeelTranslucentGeometryEv.cold_ZN23vtkDualDepthPeelingPass22PeelVolumetricGeometryEv.cold_ZN23vtkDualDepthPeelingPass15BlendBackBufferEv.cold_ZN23vtkDualDepthPeelingPass28EndTranslucentOcclusionQueryEv.cold_ZN23vtkDualDepthPeelingPass27EndVolumetricOcclusionQueryEv.cold_ZN23vtkDualDepthPeelingPass4PeelEv.cold_ZN23vtkDualDepthPeelingPass16AlphaBlendRenderEv.cold_ZN23vtkDualDepthPeelingPass15BlendFinalImageEv.cold_ZN23vtkDualDepthPeelingPass8FinalizeEv.cold_ZN23vtkDualDepthPeelingPass6RenderEPK14vtkRenderState.cold_GLOBAL__sub_I_vtkDualDepthPeelingPass.cxx_ZStL8__ioinit_ZN6vtksysL26SystemToolsManagerInstanceE_ZL28vtkDebugLeaksManagerInstance_ZL39vtkObjectFactoryRegistryCleanupInstance.LC11.LC12.LC13.LC15.LC16.LC17.LC14.LC8.LC9.LC7.LC18.LC10.LC19.LC20.LC21.LC22.LC23.LC25.LC26.LC28.LC29.LC30.LC46.LC47.LC50.LC51.LC52.LC53.LC32.LC48.LC49.LC34.LC35.LC36.LC37.LC38.LC39.LC40.LC41.LC42.LC43.LC44.LC45.LC31.LC54.LC33.LC27.LC57.LC58.LC56.LC59.LC60.LC61.LC62.LC63.LC64.LC66.LC68.LC70.LC72.LC74.LC75.LC93.LC94.LC76.LC77.LC78.LC79.LC80.LC81.LC82.LC83.LC84.LC85.LC86.LC87.LC88.LC89.LC90.LC91.LC92.LC96.LC97.LC98.LC100.LC102.LC104.LC105.LC106.LC107.LC108.LC110.LC111.LC113.LC114.LC117.LC118.LC119.LC120.LC115.LC116.LC122.LC124.LC126.LC127.LC128.LC130.LC131.LC132.LC134.LC135.LC142.LC136.LC137.LC138.LC139.LC140.LC141.LC144.LC146.LC148.LC150.LC151.LC152.LC153.LC154.LC155.LC156.LC158.LC160.LC161.LC162.LC159.LC164.LC166.LC1.LC2.LC3.LC4.LC5.LC6_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED5Ev_ZNK13vtkObjectBase20UsesGarbageCollectorEv_ZN13vtkRenderPass24GetNumberOfRenderedPropsEv_ZN19vtkOpenGLRenderPass20SetActiveDrawBuffersEj_ZN19vtkOpenGLRenderPass20GetActiveDrawBuffersEv_ZN19vtkDepthPeelingPass18GetTranslucentPassEv_ZN19vtkDepthPeelingPass17SetOcclusionRatioEd_ZN19vtkDepthPeelingPass25GetOcclusionRatioMinValueEv_ZN19vtkDepthPeelingPass25GetOcclusionRatioMaxValueEv_ZN19vtkDepthPeelingPass17GetOcclusionRatioEv_ZN19vtkDepthPeelingPass23SetMaximumNumberOfPeelsEi_ZN19vtkDepthPeelingPass23GetMaximumNumberOfPeelsEv_ZN19vtkDepthPeelingPass14SetDepthFormatEi_ZNK23vtkDualDepthPeelingPass20GetClassNameInternalEv_ZN23vtkDualDepthPeelingPass17GetVolumetricPassEv_ZN23vtkDualDepthPeelingPass18SetCurrentPeelTypeENS_8PeelTypeE_ZN17vtkAbstractMapper17GetClippingPlanesEv_ZN7vtkProp15GetPropertyKeysEv_ZN15vtkRenderWindow14GetRenderTimerEv_ZN21vtkOpenGLRenderWindow8GetStateEv_ZN23vtkDualDepthPeelingPass17SetVolumetricPassEP13vtkRenderPass_ZN23vtkDualDepthPeelingPass19GetShaderStageMTimeEv_ZN23vtkDualDepthPeelingPass30GetNumberOfGenerationsFromBaseEPKcstrcmp_ZN13vtkObjectBase34GetNumberOfGenerationsFromBaseTypeEPKc_ZN23vtkDualDepthPeelingPass3IsAEPKc_ZN13vtkObjectBase8IsTypeOfEPKc_ZN23vtkDualDepthPeelingPass34PostReplaceTranslucentShaderValuesERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_S6_P17vtkAbstractMapperP7vtkPropDW.ref.__gxx_personality_v0_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_createERmm_ZN16vtkShaderProgram10SubstituteERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKS5_S8_b_ZdlPv__stack_chk_fail_Unwind_Resume_ZN23vtkDualDepthPeelingPass23PostReplaceShaderValuesERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_S6_P17vtkAbstractMapperP7vtkProp_ZN23vtkDualDepthPeelingPass32PreReplaceVolumetricShaderValuesERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_S6_P17vtkAbstractMapperP7vtkProp_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm_ZSt20__throw_length_errorPKc_ZN23vtkDualDepthPeelingPass22PreReplaceShaderValuesERNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_S6_P17vtkAbstractMapperP7vtkProp_ZN23vtkDualDepthPeelingPass30SetTranslucentShaderParametersEP16vtkShaderProgramP17vtkAbstractMapperP7vtkPropP26vtkOpenGLVertexArrayObject_ZN16vtkTextureObject14GetTextureUnitEv_ZN16vtkShaderProgram11SetUniformiEPKci_ZN23vtkDualDepthPeelingPass29SetVolumetricShaderParametersEP16vtkShaderProgramP17vtkAbstractMapperP7vtkPropP26vtkOpenGLVertexArrayObject_ZN23vtkDualDepthPeelingPass19SetShaderParametersEP16vtkShaderProgramP17vtkAbstractMapperP7vtkPropP26vtkOpenGLVertexArrayObject_ZN23vtkDualDepthPeelingPassC2Ev_ZN19vtkDepthPeelingPassC2Ev_GLOBAL_OFFSET_TABLE__ZTV23vtkDualDepthPeelingPass_ZN23vtkDualDepthPeelingPassC1Ev_ZN23vtkDualDepthPeelingPass3NewEv_Znwm_ZN13vtkObjectBase20InitializeObjectBaseEv_ZNK23vtkDualDepthPeelingPass19NewInstanceInternalEv_ZN23vtkDualDepthPeelingPass15SetCurrentStageENS_11ShaderStageE_ZN12vtkTimeStamp8ModifiedEv_ZN23vtkDualDepthPeelingPass13FreeGLObjectsEv_ZN23vtkDualDepthPeelingPass24ReleaseGraphicsResourcesEP9vtkWindow_ZN19vtkOpenGLQuadHelperD1Ev_ZN23vtkDualDepthPeelingPassD2Ev_ZN19vtkDepthPeelingPassD2Ev_ZN23vtkDualDepthPeelingPassD1Ev_ZN23vtkDualDepthPeelingPassD0Ev_ZN23vtkDualDepthPeelingPass18IsRenderingVolumesEv_ZN23vtkDualDepthPeelingPass16InitColorTextureEP16vtkTextureObjectPK14vtkRenderState_ZNK14vtkRenderState11GetRendererEv_ZN16vtkTextureObject10SetContextEP21vtkOpenGLRenderWindow_ZN16vtkTextureObject9SetFormatEj_ZN16vtkTextureObject17SetInternalFormatEj_ZN16vtkTextureObject10Allocate2DEjjiii_ZN23vtkDualDepthPeelingPass16InitDepthTextureEP16vtkTextureObjectPK14vtkRenderState_ZN23vtkDualDepthPeelingPass22InitOpaqueDepthTextureEP16vtkTextureObjectPK14vtkRenderState_ZN16vtkTextureObject13AllocateDepthEjji_ZN23vtkDualDepthPeelingPass15InitFramebufferEPK14vtkRenderState_ZN26vtkOpenGLFramebufferObject10SetContextEP15vtkRenderWindow_ZN14vtkOpenGLState26PushDrawFramebufferBindingEv_ZN23vtkDualDepthPeelingPass19ActivateDrawBuffersEPKNS_11TextureNameEm_ZN26vtkOpenGLFramebufferObject21DeactivateDrawBuffersEv_ZN26vtkOpenGLFramebufferObject18AddColorAttachmentEjP16vtkTextureObjectjjj_ZN26vtkOpenGLFramebufferObject19ActivateDrawBuffersEj_ZN23vtkDualDepthPeelingPass24InitializeOcclusionQueryEv__glewGenQueries_ZN23vtkDualDepthPeelingPass11PeelingDoneEv_ZN23vtkDualDepthPeelingPass30StartTranslucentOcclusionQueryEv__glewBeginQuery_ZN23vtkDualDepthPeelingPass29StartVolumetricOcclusionQueryEv_ZN23vtkDualDepthPeelingPass25SwapFrontBufferSourceDestEv_ZN23vtkDualDepthPeelingPass25SwapDepthBufferSourceDestEv_ZN23vtkDualDepthPeelingPass23DeleteOcclusionQueryIdsEv__glewDeleteQueries_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED2Ev_ZTVNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE_ZTVSt15basic_streambufIcSt11char_traitsIcEE_ZNSt6localeD1Ev_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED1Ev_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED0Ev_ZN23vtkDualDepthPeelingPass21RenderTranslucentPassEv_ZTVNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE_ZNSt8ios_baseC2Ev_ZTVSt9basic_iosIcSt11char_traitsIcEE_ZTTNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEE_ZNSt9basic_iosIcSt11char_traitsIcEE4initEPSt15basic_streambufIcS1_E_ZNSt6localeC1Ev_ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEmmPKcm_ZN17vtkRenderTimerLog16StartScopedEventERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZN17vtkRenderTimerLog17ScopedEventLoggeraSEOS0__ZN17vtkRenderTimerLog17ScopedEventLogger4StopEv_ZNSt8ios_baseD2Ev_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_assignERKS4__ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev_ZN23vtkDualDepthPeelingPass20RenderVolumetricPassEv_ZN23vtkDualDepthPeelingPass10InitializeEPK14vtkRenderState_ZNK14vtkRenderState14GetFrameBufferEv_ZNK14vtkRenderState13GetWindowSizeEPi_ZN16vtkTextureObject6ResizeEjj_ZN16vtkTextureObject3NewEv_ZN26vtkOpenGLFramebufferObject3NewEv_ZN23vtkDualDepthPeelingPass21CopyOpaqueDepthBufferEv_ZN14vtkOpenGLState25PopDrawFramebufferBindingEv_ZN16vtkTextureObject19CopyFromFrameBufferEiiiiii_ZN26vtkOpenGLFramebufferObject4BindEj_ZN14vtkOpenGLState12vtkglDisableEj_ZN21vtkOpenGLRenderWindow14GetShaderCacheEvglGetFloatv_ZN16vtkShaderProgram11SetUniformfEPKcf_ZN24vtkOpenGLRenderUtilities14MarkDebugEventERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZN19vtkOpenGLQuadHelper6RenderEv_ZN16vtkTextureObject10DeactivateEv_ZN24vtkOpenGLRenderUtilities39GetFullScreenQuadFragmentShaderTemplateB5cxx11Ev_ZN19vtkOpenGLQuadHelperC1EP21vtkOpenGLRenderWindowPKcS3_S3_b_ZN23vtkDualDepthPeelingPass15InitializeDepthEv_ZN14vtkOpenGLState11vtkglEnableEj_ZN14vtkOpenGLState18vtkglBlendEquationEj_ZN23vtkDualDepthPeelingPass7PrepareEv_ZN14vtkOpenGLState13vtkglViewportEiiii_ZN14vtkOpenGLState12GetEnumStateEj_ZN14vtkOpenGLState16vtkglGetIntegervEjPi_ZNK14vtkRenderState17GetPropArrayCountEv_ZN14vtkOpenGLActor19GLDepthMaskOverrideEv_ZN14vtkInformation3SetEP24vtkInformationIntegerKeyi_ZNK14vtkRenderState12GetPropArrayEv_ZN14vtkInformation3NewEv_ZN14vtkOpenGLState15vtkglClearColorEffff_ZN14vtkOpenGLState10vtkglClearEj_ZN23vtkDualDepthPeelingPass34PeelVolumesOutsideTranslucentRangeEv_ZN14vtkOpenGLState13vtkglCullFaceEj_ZN23vtkDualDepthPeelingPass21ClearFrontDestinationEv_ZN23vtkDualDepthPeelingPass33CopyFrontSourceToFrontDestinationEv_ZN23vtkDualDepthPeelingPass23PrepareFrontDestinationEv_ZN23vtkDualDepthPeelingPass35InitializeTargetsForTranslucentPassEv_ZN23vtkDualDepthPeelingPass34InitializeTargetsForVolumetricPassEv_ZN23vtkDualDepthPeelingPass23PeelTranslucentGeometryEv_ZN23vtkDualDepthPeelingPass22PeelVolumetricGeometryEv_ZN23vtkDualDepthPeelingPass15BlendBackBufferEv_ZN14vtkOpenGLState22vtkglBlendFuncSeparateEjjjj_ZN23vtkDualDepthPeelingPass28EndTranslucentOcclusionQueryEv__glewEndQuery__glewGetQueryObjectuiv_ZN23vtkDualDepthPeelingPass27EndVolumetricOcclusionQueryEv_ZN23vtkDualDepthPeelingPass4PeelEv_ZN23vtkDualDepthPeelingPass16AlphaBlendRenderEv_ZN23vtkDualDepthPeelingPass15BlendFinalImageEv_ZN23vtkDualDepthPeelingPass8FinalizeEv_ZN26vtkOpenGLFramebufferObject6UnBindEj_ZN14vtkInformation6RemoveEP24vtkInformationIntegerKey_ZN23vtkDualDepthPeelingPass6RenderEPK14vtkRenderState_ZN19vtkOpenGLRenderPass9PreRenderEPK14vtkRenderState_ZN19vtkOpenGLRenderPass10PostRenderEPK14vtkRenderState__dso_handle_ZNSt8ios_base4InitC1Ev_ZNSt8ios_base4InitD1Ev__cxa_atexit_ZN6vtksys18SystemToolsManagerC1Ev_ZN6vtksys18SystemToolsManagerD1Ev_ZN20vtkDebugLeaksManagerC1Ev_ZN20vtkDebugLeaksManagerD1Ev_Z33vtkRenderingUI_AutoInit_Constructv_ZN31vtkObjectFactoryRegistryCleanupC1Ev_ZN31vtkObjectFactoryRegistryCleanupD1Ev_ZN23vtkDualDepthPeelingPass9PrintSelfERSo9vtkIndent_ZN19vtkDepthPeelingPass9PrintSelfERSo9vtkIndent_ZTS23vtkDualDepthPeelingPass_ZTI23vtkDualDepthPeelingPass_ZTVN10__cxxabiv120__si_class_type_infoE_ZTI19vtkDepthPeelingPass_ZNK9vtkObject20GetObjectDescriptionB5cxx11Ev_ZN13vtkObjectBase6DeleteEv_ZN13vtkObjectBase10FastDeleteEv_ZN13vtkObjectBase11PrintHeaderERSo9vtkIndent_ZN13vtkObjectBase12PrintTrailerERSo9vtkIndent_ZN13vtkObjectBase8RegisterEPS__ZN13vtkObjectBase10UnRegisterEPS__ZN9vtkObject16RegisterInternalEP13vtkObjectBasei_ZN9vtkObject18UnRegisterInternalEP13vtkObjectBasei_ZN13vtkObjectBase16ReportReferencesEP19vtkGarbageCollector_ZN9vtkObject14ObjectFinalizeEv_ZNK13vtkObjectBase17GetDebugClassNameEv_ZN9vtkObject7DebugOnEv_ZN9vtkObject8DebugOffEv_ZN9vtkObject8ModifiedEv_ZN9vtkObject8GetMTimeEv_ZN9vtkObject13SetObjectNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE_ZNK9vtkObject13GetObjectNameB5cxx11Ev_ZN19vtkDepthPeelingPass18SetTranslucentPassEP13vtkRenderPass 3<= !>6?I@UABC)C7CBD2D@D\B8K<="5>B!E6EDEUB 5<=  >0 F` x B     G G G9^ k B     H I0 J@ KL Lx  B  @ M}  N N NC *O2YPaQQQa'>R@STUVW[sBXX!XIsY %BxBZ%Zg[\]^_`abcdeQif>R%@1SgBg#g-g=Y/BBZR_>hB(:XpiiiY6FXvB(BHZwjj(/k9MWl^mk07nAU\ofzpqno0:rA*sq |  S![!z!!!!!!"* "!"5"="\"d""""""$# 3# @# M# # # # # $ $ H$ W$$$$L%*%*%*L&*"&**&*%&+&*,'*-L'.S'**'/'*$'.'t'0n(1(2(*$(3(4((**()*%)&1)*,B)5e)4)6)<***e**%*+**,**-*.***:+/A+*$+.+u+0,1#,2*,*$R,3Z,4j,q,**,,*%,&,*,,5-1-4|-6-.**+.*%K. V.:o.;..+.*,/*-//.6/**///*$/./v/0Z01p02w0*$030400**00*% 1&01*,A15W1<1141=1 1 2 2 '292K2262>2\3**r3*%3+3*,3*-3.3**A4/H4*$4.4w40,51L52S5*$535455**55*%5&6*,.65:6@]6Ak6|6B66C6 6D-7EC7xK7Fa7j7yr777z7G78H(878{p8G88I848J 99|I9}\9~9999 :/:>:a:t::::::::::H;W;;;;;;K<4<4O<6Y<<=**`=*%=+=*,=*-=.=**?>/F>*$>.>>0 ?1?2&?*$N?3V?4f?m?**??*%?&?*,?5@@@q@M@N@@@G@A)A)AXAGgA{AIA4A6A|B**B*%B+B*,B*-,C.3C**zC/C*$C.CC0ND1bD2iD*$D3D4DD**DD*%D&E*,#E5;EPLEQdEC|EREQEQESEETEUEV$FWmFCuFFBFFXFY GG(GX9GYAG?IGLRG4G6G,H**PH*%pH+wH*,H*-H.H**/I/6I*$~I.II0I1J2J*$>J3FJ4VJ]J**JJ*%J&J*,J5JK[KM#K-KKKKKLGLL82L?LLGLL[LCLILIL4,M6HMM**N*%#N+*N*,UN*-N.N**N/N*$8O.DOLO0O1O2O*$O3P4PP**LPSP*%iP&P*,P5PPQG*QFQ_QXpQYxQ4Q6QLR**sR*%R+R*,R*-R.S**VS/]S*$S.SS0;T1OT2VT*$~T3T4TT**TT*%T&U*, U5X1XbXvXXXXX1YOYYYYYYKYZ6$Z4.ZZ<[**h[*%[+[*,[*-[.[**F\/M\*$\.\\0]12]29]*$a]3i]4y]]**]]*%]&]*,]5^0^XA^Y]^e^{^X^Y^^^4^6^l_**_*%_+_*,_*-"`.)`**v`/}`*$`.``0Ma1ba2ia*$a3a4aa**aa*%a&b*,-b5Gb`bXqbYyb^b4b6b\c**c*%c+c*,c*- d.d**_d/fd*$d.dd0,e1?e2Fe*$ne3ve4ee**ee*%e&e*,f57fHfMYfNffpfff?gGNgVg)qg~ggGggIgIg4j.JjRj0j1j2j*$j3k4kk**HkOk*%bk&k*,k5kk[kMkMkNllllmGmm85mBm{mGmmImImImIm[mCm4Ln6hnn**#o*%Co+Jo*,uo*-o.o**p/ p*$Xp.dplp0p1p2q*$.q36q4JqQq**qq*%q&q*,q5q rMrN=rdIr frDrrrrrsG/s;sHsGssIs4sJ$tBt>ttttu/uF U46,**S*%s+*,*-߃.**8/?*$.0 1"2)*$Q3Y4ip***%&ޅ*,5MN2d?Y܆0GBJ)huGЇ؇<IlG8ΈۈG1EIM46͉|***%Ê+ʊ*,*--.4**/*$؋.0b1v2}*$34Ō***%&3*,D5}MNdȍPM DOX`vGHQGcwII4яCJ2>: '?R\ *CKb46***%Փ+ܓ*,*-<.C**/*$ٔ.0^1s2z*$34***%&!*,25Yzm@ÖkԖMNdS=THn]Vj!їMM4!CL6h***%;+B*,u*-.**/*$P.af0n |12*$B3J4Za***%&ϛ*,5 "p-95O=QiYelpqx4Z̜6  1 W H } n(  4 "@ L X d p |    ; , a R  x #'3?KWc8oQ{ j !""o##,$i$%)z)))))--+--[- -=2~22333e<q<0}<m<<G<<<\<<< <<=AEAu BB6!B-BU9BEBGGGDGYG"G3TM{`MlMxMlMMMMQ:QzQQRZRRj:ZFZRZ^ZIjZvZ]Z5Z ZZgZZZZZ\[]^^ _G _X "_' ._7 bj b b c c c ah mh- yhO h hp h h h` tn n n n n n n/ n vB vs w w #w /w ;w Gw SwV _w kwc ww@ w w@ {V {t { &{ 2{ >{ ~ ~ ~6 ~G ~ ~& Z x ʂ ւ   ى Q c~!- 9EA˒%גOc>m+7COt J:*[n ~,8E~&+BG^cz&+9>LQ_dq "1@HWfn}$,;JRapx!3Lerz'*,547 7#4+;E'b*,{574'*,5 7(40E\m'*,50EM4U]'|*,57'*,5+43DN7j{4'*,57'A*,Z5b4jz774 3I[er'*,5' *,' 5/ 47 G V 7h r ' *, 5 4   7   4  '4 *,M 5^ p  7   4  ' *, 5  * 7? V c 7k 4s         '" *,; 5^ '{ *, 5 4   7  ' *, 5 4& 6 E 7W b ' *, 5 4   7   4 '&*,?5Qa7y4%9Oaku'*,57'*,*524:JY7k~74'*,5*$$+*%<&*$$+*%<&E rs$*t16u>vE*wRWu_xf*ysxu}z{*|u6 (08@}HPX`hpxo (08@HPX`hpx 4H\p     $8L`tp/DM   )DX`$` -Tn]p   !!"0"D#l##0$p$ 0%H%\%p%& &0& p&`~i*2-:PYt 3}=( :1 ]L PBU e   H  p! < ME   +  R 3  , ZL [U    @_  n ! < 0cE %  r h z   , n5  F L w T Z P{%p y^  ` i[Pc`PY#t}+rl6@.symtab.strtab.shstrtab.rela.text.data.bss.text._ZNK13vtkObjectBase20UsesGarbageCollectorEv.text._ZN13vtkRenderPass24GetNumberOfRenderedPropsEv.text._ZN19vtkOpenGLRenderPass20SetActiveDrawBuffersEj.text._ZN19vtkOpenGLRenderPass20GetActiveDrawBuffersEv.text._ZN19vtkDepthPeelingPass18GetTranslucentPassEv.rela.text._ZN19vtkDepthPeelingPass17SetOcclusionRatioEd.text._ZN19vtkDepthPeelingPass25GetOcclusionRatioMinValueEv.rela.text._ZN19vtkDepthPeelingPass25GetOcclusionRatioMaxValueEv.text._ZN19vtkDepthPeelingPass17GetOcclusionRatioEv.text._ZN19vtkDepthPeelingPass23SetMaximumNumberOfPeelsEi.text._ZN19vtkDepthPeelingPass23GetMaximumNumberOfPeelsEv.text._ZN19vtkDepthPeelingPass14SetDepthFormatEi.rodata._ZNK23vtkDualDepthPeelingPass20GetClassNameInternalEv.str1.1.rela.text._ZNK23vtkDualDepthPeelingPass20GetClassNameInternalEv.text._ZN23vtkDualDepthPeelingPass17GetVolumetricPassEv.text._ZN23vtkDualDepthPeelingPass18SetCurrentPeelTypeENS_8PeelTypeE.text._ZN17vtkAbstractMapper17GetClippingPlanesEv.text._ZN7vtkProp15GetPropertyKeysEv.text._ZN15vtkRenderWindow14GetRenderTimerEv.text._ZN21vtkOpenGLRenderWindow8GetStateEv.rodata._ZN23vtkDualDepthPeelingPass30GetNumberOfGenerationsFromBaseEPKc.str1.1.rela.text._ZN23vtkDualDepthPeelingPass30GetNumberOfGenerationsFromBaseEPKc.rela.text._ZN23vtkDualDepthPeelingPass3IsAEPKc.rodata.str1.8.rela.text.unlikely.gcc_except_table.rodata.str1.1.rela.text._ZNK23vtkDualDepthPeelingPass19NewInstanceInternalEv.rela.text._ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED2Ev.rela.text._ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED0Ev.rela.text.startup.rela.init_array.rodata._ZTS23vtkDualDepthPeelingPass.rela.data.rel.ro._ZTI23vtkDualDepthPeelingPass.rela.data.rel.ro._ZTV23vtkDualDepthPeelingPass.rodata.cst8.rodata.cst16.rodata.cst4.rela.data.rel.local.DW.ref.__gxx_personality_v0.comment.note.GNU-stack.note.gnu.property.rela.eh_frame.group@ZHZPZXZ`Zh ZtZ| ZZZZZ ZZZZZZZ Z Z ZZZ$ Z0 Z< Z PI@VZ&,1c @F;@Z%tP ` @Z(p %!_ !2 @Z/P  !P ` $p Q }2@Р@Z8pu@Z:I2)]X@Z=lt~2b` @0ZAp@@H`ZCI@xZEb]@ ZGup@ZI@HZL@0ZNpP"4/@ZS`0,i y 0 @(ZXP&[ `%R1