XZpZ __text__TEXTuh_4__literal16__TEXTx__gcc_except_tab__TEXT  __literal8__TEXT__literal4__TEXT`X__StaticInit__TEXT__bss__DATApZq__cstring__TEXT__const__TEXT __const__DATA E__mod_init_func__DATA80 __compact_unwind__LD@`08;__eh_frame__TEXTB  h2   y8E PppxUHAVSIHIF(^AH5^HƃL[A^]UHAVSIpHIF(AH5jHƃjL[A^]UHAWAVAUATSHEHH}tHHH5HP1HE1AH0HHHHHH@H0HHEEL=IGHEHI@L0HL-ILHDžHDžHDžHDž Dž(H5LHHDH5FFHAEAEH5jHLuHljH5b/HHljH5tHHljH5vHLHHEHL0Lt HHH5HHH0LH[A\A]A^A_]HDHVHHEHL0Lt HHH5HHH0H UHAWAVSPHHHHHLwpH@HGpLHHHGGHt H{XLH5HHLH[A^A_]f.UHAWAVAUATSHxDMDEIIHMDyHHhHHHH`H@HHHDžXDž`L5IFHpH`I@LHHHHxHhHDžHDžHDžHDžDžH5H`HDH5HH5H`HDH5HHDH5CHIELHHttHH5pHQt`H5KH` H5TH`H5\H`H5bH`IELHHHuIELHHHtH53H`H5;H`rLhIEH5LP1ɅLDIELtH5eH`#AGAADOH5H`HDH5<'HHDH5E(HHDH5x/HHDH50 HHDH52HHDH5.HHDH5,HHDH5HH5H`HDH5HIEL(W.vH5H`qEHuHuHHMLEH}Hx0HX]HtdEHuHuHHMLEH}Hx0HXH1t"u}~H5H`XH5H`B4HH5HHDH5HH5zH`HDH5XHLuHEL0L`M9u/Aܳ}1Lhf.IL9tI~0HXtu Hhu HPtHHtMINHtf.DHH HuIFL90tIIHALqH9ukA܃}H5|H`"LhIEL(W.vH5kH`hH}uH}]EH5H`HDH5MHHDH5>HHDH5/ HHDH5sHH5H`Ut HuHUHHuHH5HUt HuHUHHuHH5H~H5H`IEL(W.v4H5@H`.~H5SH`+Et H}Et H}}|} tH5H`!IEL0t)IELtH5H`'IEL`uH5H`-cIEL`uQHEHHx0HXHHHt,HH5HQtH5H`HhLHpH`HEHHxHht HLH5HH`HHhHx[A\A]A^A_]H3HLuOAHH864HEt H}Et H}Lu HLuHHpH`LHxHht HHhH5HH`HH f.DUHAWAVAUATSHHDEIH}Ht!HHH58HP1ɅHEHM1HEIH@0HEEfHHHHHHH@HHHEEHHHHMHH@HEHHHHHEHHDžHDžHDžHDžDžH}H0t&H}HtH}H`8H5HH5QH{1LL=L5A~ffDA9LH5HljHLHljHLf.D9}LLH5%HljHLHljúHLH51HH5 H/H}H`t[H}HtH5HH5H.H5H/H5HeH}HXH1}H5H-A]E1L=GL5Lf.@EHH5HDHH5A]HljMHH5HDHH5HD(HH5HDHH5 HD%HH5HDHH5$HD HLHDA̺HLA1L5L-L=f.D9!HH5HljHH5HljMHH5HljHH5Hlj(HH5HljHH5Hlj%HH5HljHLHlj HLHljúHLH}HHEHHEHHEHt HHH5HHHHEHH[A\A]A^A_]H5{H4HRHdHHEHHEHHEHt HHH5HHHH f.UHAWAVAUATSPHIHtHH5HPE1LEE1 IF(AHp = falsHHH g_skiHHH Hf@e;@HHHHHtHH5HP1ɅHD1H}HH}IH}ILL  `HH5XHƃXXLHHMt HH5HƃLHHMt HH5HƃLH=Mt@HH5eHƃLHHIL`ut@HH HC(Hsection;HK H g_interHKHataPos =HKH g_dHKHfC0 1LHHH}LH[A\A]A^A_] IHIH}IAt I~L fUHHHGHGH]UHAWAVAUATSHLEMUH}HHXIHH0HHHHXH(H@HPHHHDž Dž(HHHHMH(H@HEHHHHHEH0HDžpHDžxHDžHDžDžA$tI$hH5H(IHEHXHtZLpf.@HIHt?HÃ{ y LsHCHuM.Mt*Iu(AM(IM0HXIM.Muֿ@I@ H@(H@0H@8HH@HXIH]HHHtHI6LH{HCIu(AM(mHHHH1IHtHXHP HHILH5HHNjuH54HHt HXI$Pt }t}t EEH5pH(.H}H0A$t=I$h}&}}>}4PLuHH5KHCKKH}HHHLPIFH`E1HHHE9fMLHHHuHHAD;eHXHHHPHHLHDž@DžHHEHHHEHMLL`HEHPHH@H@H@H@DžHHDH0HLH1HHHHxHHPHpHhHH@H@HhH5]HHHMHHPHUHMHH@H@UtHuHUf.fHHuH}Eu*hu30u?M}MuqIf.H}htHx0tH@M}Mu&MI]H6fIMHIE9g } MoIGHuI]Hz@HD` H@(H@0H@8HH@LxIEL}IHHtIIu@MI]HuHIIGH(LhLH5HLH5HHHMHHPHUHMHH@H@UtHuHU DHHuH}Et H}ht HxHEHHHEHHEHPNH=LeI\$HM|$@HIHt}HÃ{ yuL{HCHufƅHHIH HIH }HOƅWH}H6HX%I\$IM7Mui@I@ H@(H@0H@8HH@HXII$HHt I$I7LI|$ID$I(H5H}LH5H}HHHXHHPHPHHHH@H@HtHXHP HHIH}Ht HXEt H}}tAHH5tHƃH}HHHEH(HEHHEH0pt HH0H5HH(HHEHĸ[A\A]A^A_]IHHXIHtHXIEvH}hIHRIJIXIPIII8IH(HXIEtH}IhHxgIEuhu+0uEbH}ht IhtHx0u+I0tH@ IFIQIHEHHHEHHEHPt HLHHHuHHEt HEHxHEH(HEHHEH0pt HH0H5HH(HL f.@UHAWAVAUATSHIHuIHLrL9u!E1L9HL9thH{0HXH1t>HKHtHH HuHCH9tHH HAHYH9uAI$L9uJ E1I$L9uLIIGAV(uI)HHLHHHHHPHHHH@H@HH5_HHHHHPHHHH@H@HH5HHHHHPHHHH@H@HDtH HHHHHHHHHPHHHH@H@HH5_HHH8HHPH0H(HH@H@UtHuHU fDHHuH(HHHxHHPHpHhHH@H@HhH5HHHMHHPHUHMHH@H@H}H5|HHHMHHPHUHMHH@H@UtHuHU @HHuH@EEh( X!E(H}ETH}hKHx(?H83H'H HHHHHXHhEpH}bMdE1H "H5HDH@HT@ELuLDHEHXHL`fHIHHÃ{ y LcHCHuM<$MLetOI\$HM|$f.HIHHÃ{ L{HCHuI\$H*M|$f.HIHHÃ{ L{HCHuHXIM<$MV@I@ H@(H@0H@8HH@HXI$H]HHHHI4$I\$IM7M@I@ H@(H@0H@8HH@HXII$HH'I$I7I\$IM7M@I@ H@(H@0H@8HH@HXII$HHGI$I7>LH{HCI(H5H(LH5H(HHHxHHPHpHhHH@H@Ut LuHUHHhLHHHMHHPHUHMHH@H@H5H}HHHMHHPHUHMHH@H@Ut HuHUHHuH@Eu#Eu,hu5(uAEuQH}EtH}htHx(tH8EFH}8LI|$ID$I(H5H}LH5H}HHHMHHPHUHMHH@H@Ut HuHUHHuH@LI|$ID$I(H5H}LH5IH}HHHMHHPHUHMHH@H@Ut HuHUHHuH@Et H}Et H}HH}H@@LuHxtHPHH HHAH}HHHMHHPHUHMHH@H@H5nH}HPHUHPHUHPHH@H@Ef HEHMHCHKHSuEOAH}EX IEIH}h@Ih.Hx("H8H H HHH]HHHXHhEt H}H@t HPL I(IIIIIH]IH] IH]X IH]E IH]UHAWAVAUATSHIIIHGHGHuHLII_LML,Is}LuIHEwCA$Mt$HtLLHALHuHUH[A\A]A^A_]IILIID$IM,$I\$HuL HA$t I|$H UHAWAVAUATSHILeHGHGHxHHzI]IL9u1HL9tH{0HXtu Hhu HPtHHVHKHtf.HH HuHCH9tHH HAHYH9ukEDAEHuHPHHPLELHx0HXIċtu0I$ht%I$LpI$PuDžpI$Pt Att DžtI$LtI$LHA… рDuLeƅPDžQ, cELxx HE(|Y)EHradient(HHHputeGradHHHnt = comHHH gradieH@A$SIT$Md$JW)PHDž`1ۅW HE(Y)EHeight[c]HHHmponentWHHH * in_coH@H5LxLT HE(yX)EHradient(HHHputeGradHHHnt = comHHH gradieH@A$t IT$Md$IHH}LHHHMHHPHUHMHH@H@H5hH}HHH`HHPHXHPHH@H@PtH`HX HHQLP#E/Et H}H5L}HPH5HPH5HpHHE(=W)EH5gHCgH}HuEt H}DuH]HPAHMHDH߾HHPH1Et H}HPH`EH}EW)EHE0H(V)H(scalar)HHHty(vec4(HHHuteOpaciHHHy = compHHH opacitH@'LQHLHHHH0HHPH(H HH@H@fDž)HƅH HHHHHHHPH@H8HH@H@UHut HuHUHH8HHHMHHPHUHMHH@H@H5H}HHHMHHPHUHMHH@H@Ut HuHUHHuHxEE8 t Hp t< H(S)Hradient(HHHputeGradHHHnt = comHHH gradieH@A$~IT$Md$uH}E&H}8HHH H0IHH}LHHHMHHPHUHMHH@H@H5 H}HHHMHHPHUHMHH@H@Ut HuHUHHuLE!E*Et H}@HE(R)EH, gradieHH0H(scalar)HH(Hrad(vec4HH HGBAWithGHHHcomputeRHHHutRes = HHH vec4 lHf@8nt@:PtH`HX HHQH}HHHMHHPHUHMHH@H@ƅ8H9Dž9); H}HHHMHHPHUHMHH@H@Ut HuHUHHuLEuo8uxEEt H}H5LEtH5LPt H`LHĸ[A\A]A^A_]H}8tHHEtH}EswH}EH}EIHHLHHHHHPHHHH@H@0IH 0.0) { ID$'Hnt.w >= ID$ Hf(gradieID$Hex); iID$Hume, indID$H, c, volI$AD$/H/LHHH0HHPH(H HH@H@p0H0(N) HgradientHH&Hacity(grHH HadientOpHHHomputeGrHHHity *= cHHH opacH@.Pt3L`HX&W)HDž111E1QHH LHHHHHPHxHpHH@H@H5LHpHHHhHHPH`HXHH@H@UHut HuHUHHXHHHPHHPHHH@HH@H@H5H@HHHHHPHHHH@H@HAHHHEHEH HHHHHHPH@H8HH@H@tPH(L)Hlabel); HH8Hadient, HH0HLabel(grHH(HacityForHH HadientOpHHHomputeGrHHHity *= cHHH opacH@@Q@W)HDž111҉HHEHEH8HHHMHHPHUHMHH@H@ƅHDž } ƅH}HHHMHHPHUHMHH@H@Ut HuHUHHuHxEu4u=EuIuR8u^ujEuvH}tHEtH}tH8tHHtHEt<@Xp t H0 LDuH t HELDž H8HH8LLHIHXhHMfhLxf.HIHHÃ{ yjLcHCHu[H0L2HDuH ")LHhILxM<$MIM<$M@I@ H@(H@0H@8HH@HXI$IF`HHtZIF`I4$SHPX#HhpH LI~hIFpI(H5H}LH5H}HHHMHHPHUHMHH@H@Ut HuHUHHuLEt H}Et H}Et H}LxPI8[I}IXIpsI gnIfIEuLE8EH}tLIEtH}IEH}IEIaHEUH}LI:H8.HH"HEt0@uOXu[pug t H0 txH0LulvHPXtHhptH uIhAILt HyHhIuIIEW<4IE@%IEH}IIE H}IIEu3EuG8u^uj uvH}Et IEtH}8t I8tHHtH tH0u *IZIt HEH}IEuIPuEu(EuCH`Et IEtH}EuIEH}IEtH}I8t HHEtH}IEtH} I.IPt7H`)$IEt H}HPIHxtHxHxL f.DUHAWAVAUATSH8D8D<@HIHHHLzL9u#E1L9f.HL9tnH{0HXH1t>HKHtHH HuHCH9tHH HAHYH9uAHHHL9u$E1HHHL9uE1HL9tH{0HXtu Hhu HPtHHtMHKHtf.DHH HuHCH9tHH HAHYH9ukAW)EHEHHHxLmrmEHHE(@)EH5DHƃ(E)EHEHEIEIEIEpHHE("@)EH5fHCf7HHE(?)EH5JHƃ(E)EHEHEIEIEIEEAW)EHEo H`(?)PHr componHHHshort foHHH// c is H@ent @UtjHuHUg HE( ?)EH0.0); } HHHrn vec4(HHH{ retuH@MHUHM HHuHPHHHxHHPHpHhHH@H@0IH5G.HAƆ.Hh.LHHHMHHPHUHMHH@H@Ut HuHUHHuLELhDDLPt H`L%f.@HHhN<#LHIHs#C6 L!MuJVf.HLHHHIH0HH L(HLLLCD5H H$D$H}HH@DbILmE(LILmE6I t H0LmE IEIIIIupzIPtY!IhtBHxPt6H`u*4IEhuPut HLt HLmuEu)AEu2Eu;L HEtH}AEtI}EtH}L H}hAf.DUHAVSHHGHGHHHXHHT`3Z Zf.vH5HH5ףHH[A^]It H{L f.UHAWAVAUATSHDMDEHIIHtI$H5DpLPE1MEE1HHXIſHIF(2AH5qHCqLmL1LutI\$f.fHHHHȃx y HXHHHuHEL3MHEHL3M@I@ H@(H@0H@8HH@HEIFL3I$HHt~I$H3xHEHL3M@I@ H@(H@0H@8HH@HEIFL3I$HHI$H3LI|$ID$I(H5H}LH5UH}HHH`HHPHXHPHH@H@PtH`HX HHQH}LI|$ID$I(H5sH}LH5ӚH}HHH`HHPHXHPHH@H@PtH`HX HHQH}Pt H`Et H}HEH0HEHHEH8xt HH8H5HH0HHEHĨ[A\A]A^A_]IPtH`IEH}31IPH`IHIIIIyIqIPaH`PLIxtRH}XuIIXu8IEH}"IEu xuXtsHheH}xtIxtrIXt4-+IHPHpLnILbILHXHEHPHEHHEHXt HHHPHpLHEt HxHEH0HEHHEH8xt HH8H5HH0HL fUHAWAVAUATSHIuHHHHHPHHHH@H@UtHuHUfHHuHHHHHHPHHHH@H@HH5HHHMHHPHxHpHH@H@ptHuHxfDHHqH}p 0!H-p9Et H}HhHhH`HHEHpHH}'HHHHHH(0H@HHXpHEEI_HMwfHIHHÃ{ LsHCHuƅhHifDži} ƅkLeLh!(I_IM>M@I@ H@(H@0H@8HH@HXIH]HHHtCHI6>pHID$(ZA$H5oHCoLH{HCI(H5LhLLH5LHHIL$HHPIT$I $HH@H@ht HxLHx[A\A]A^A_]I_IM>Mui@I@ H@(H@0H@8HH@HXIH]HHHtHI6LH{HCI(H5LhLLH5L1IhHxILIIhHxL Ip50SHpEH}sIaHUICH7I%HIHIHIH(0I0H@HGIpNIEuW^IYITIIIHXHXpLHEt H}HhHhH`HHEHpt HHpHhHuHHEt HEHxL IHuH}L fUHAWAVAUATSHXIHHLHHHHH@HLH]HEEHHHHMHH@HEHLHHHEHHDžHDžHDžHDžDžM/IL}M9 H}LLL}HH5\sHCsH}sHHHIOHHPIWIHH@H@HEt H}HEHHEHHEHt HLH5HHHLHX[A\A]A^A_]f.fIH;EI}0HXHHHIHEHH5h4IIHteMfDHIHtRHÃ{ yLsHCHuf.M&Mt0It$(AL$(IL$0IIM&Muп@I@ H@(H@0H@8HH@HXIIHHt II6LIIIt$(AL$(]HHH}1IUtHuHUfHHuLHH53HHuHH5r Et H}IMHtDHH HuIEL9(If.DIMHALiH9uIH"IbItIEtH}IHEHHEHHEHt HHH5HHHL DUHAWAVAUATSHhEDEIHHxHHHHpH@HHHDžhDžpHHHHMHpH@HEHHLmHHHEHxHDžHDžHDžHDžDž}EH5 Hp3}uH5cBHpLxIEHEE1 AD;m}HpH5ςHDHH5BILuIHLM&M@IDh H@(H@0H@8HH@HXIH]HHHHI6HIHbHD9k } LsHCHuM&MmAT$(bIT$0Md$8Zf.DHpH5HDHH5AILuIHLM&M@IDh H@(H@0H@8HH@HXIH]HHHHI6f.HIHHD9k } LsHCHuM&MfAT$(IT$0Md$8IM&MLH{HCAT$(I)HLLHH5HDHH5HD HH5)#IM&M7LH{HCAT$("I)HLLHH5HD HH5HD HH5}Ex}I]H]M}HIHEHÃ{ 9L{HCHu'H5@HpLx}I]HVM}!f.DHIH6HÃ{ *L{HCHuI]HuM}f.HIHWHÃ{ KL{HCHu9I]HM}f.HIHxHÃ{ lL{HCHuZI]IM7M@I@ H@(H@0H@8HH@HXIIEHH_IEI7VI]IM7M@I@ H@(H@0H@8HH@HXIIEHH~IEI7uI]IM7M@I@ H@(H@0H@8HH@HXIIEHHIEI7I]IM7M@I@ H@(H@0H@8HH@HXIIEHHIEI7LI}IEI(H5C~H}LH5h~H}HHHMHHPHUHMHH@H@Ut HuHUHHuHpLI}IEI(H5}H}LH5/~H}HHHMHHPHUHMHH@H@Ut HuHUHHuHpLI}IEI(H5#}H}LH5x}H}HHHMHHPHUHMHH@H@Ut HuHUHHuHpLI}IEI(H5R}H}LH5!~H}HHHMHHPHUHMHH@H@Ut HuHUHHuHpEt H}Et H}LHxHEHpHEHHEHxt HHxH5HHpHLHh[A\A]A^A_] ><HEtH}HEtH} HLH^HHEHpHEHHEHxt HHxH5HHpHH UHAWAVAUATSHXMDHHHEHGHGH@HW)HDž)HDž) HDž0)HDžM!MyMiM9ukI Hp(a)`HcityTF, HHHer2D opaHHHin samplH@IL9tI|$0HXtu Hhu HPtHHtMIL$Htf.HH HuID$L9 tIfI $HALaH9uj1IW)`HDžpHzH`1IHPHXHHpHPHHHH@H@tW)EHEHu1;E*HuHin samplHEHer2D graHEHgradTF, HEEH@HHHHHHMHHPHUHMHH@H@H5jzH}D8HHPHUHPHUL`HH@H@DHEHMHHLEEH`t HpH5yHH5zHH5~H DMƅHsampled_HHed_pointHƅHH$D$H}LDUtQHuHUNH}EH}HHX` HHuH Et H}t HH5HHtHH HHHHHHMHHPHUHMHH@H@tHH HHH}HHHMHHPHUHMHH@H@H5u}H}HHHpHHPHhH`HH@H@ tH0H( HH!H`HHHXHHPHPHHHH@H@H5 ~HHHHHMHHPHUHMHH@H@Ut HuHUHHuHEH`EE AHHH;EHHX[A\A]A^A_]H}HbHX`VHpEJH}EAH}8H,H  H0AL HHHH;EIEu0HuG`uaEumEuv}H}Ht IHtHX`t I`tHpEtH}EtH}u3IE`IEWIH3IIEtH}IHIEuEu.Hu7`uQeH}Et IEtH}HtHX`u"I`tHpI IE1E1u. u:AuFuNH@uZL H tH0AtLtHH@tH@HxL f.fUHHHGHGH]UHAVSHIHH`u3@IF(AHaxValue;HH.Hc4 l_maxFHH`@IF(uAHinValue;HH.Hc4 l_minHH(H veHH Hlue; HHH_firstVaHHH bool lHHH H@6L[A^]HH`@IF(AHavgValueHH0H vec4 l_HH(H HH Hmples; HHH l_numSaHHH uvec4HHH Hf@8;^HH`uR IF($AHl_sumValHHH vec4 HHH H@lue;@HH`u9`HIF(AH5xXHCXIFIFIUHAVSHIHH`u9HIF(AH5|xrHCr?HH`u9HIF(`AH5xqHCqHH`u<HIF(AH5xHƃHH`u6`HIF(AH5#yRHCRaHH`u9HIF(RAH5/yHƃIFIFIL[A^]fUHAWAVAUATSH(HˋAEADDDEIH LHHHHH@H LL}HEEHHHHMHH@HEH LHHHEHHDžHDžHDžHDžDžL;HI9#L%L5@f.@IH9I0HXtHhtwHH5)yAtIIDIHHHLHDHLIOHtf.HH Hu0IGL98#If.DIHALyH9uLuLHHHEHHEH HEHt HHH5HHH LH([A\A]A^A_] HJH\HHEHHEH HEHt HHH5HHH H UHAWAVAUATSHEʼnH}H8LHHHHH@H8LHEEL5M~LI@L8LL%ILHDžHDžHDž HDž(Dž0Et#H]u8H5vHC6H5mvHCH]H5vHHHLL8Lt H HH5HHH8HH[A\A]A^A_]H>HPHLL8Lt H HH5HHH8H fUHAWAVAUATSHIIIHHXHHHHPH@HHHDžHDžPHHHHMHPH@HEHHHHHEHXHDžHDžHDžHDžDžH5,uHP*IL`LhM,$ILXM9 1HEIH;X HEHEI}0HXHEȺHPH5tHMЍqHHu#HH5tHHuHH5tHHuHH5tHHu6HH5uHHuHH5uHHuDHH5uH}HHtgH}HHa HPH5wIAHHuIIHEȋtunHEHht`IHMfDHIHHÃ{ yL{HCHufM7MW)EHEHH!HH5{u HH5QuHHuHH5!HHu"HH5uIIHt]MHIHtPHÃ{ yLcHCHuf.M<$Mt.AW(!IW0M8IIM<$Muҿ@I@ H@(H@0H@8HH@HXI$IHHII4$}IIM7M @I@ H@(H@0H@8HH@HXIIHHII7LIIAW(I)HLLHH5EtAtIIHHuH3HH5tLIIƅpfDžq, ƅsAN(t IN0Mv8I)HHp1LHHHMHHPHUHMHH@H@pt H}-HPH5qIIIHH`t4MfDHIHtDHÃ{ yLcHCHuHIM4$Mt'AV(IV0Mv8IM4$Muٿ@I@ H@(H@0H@8HH@HXI$IExHHt IExI4$LIIAV(jI)HLLoHH5pIM}hMtYMehIMHtLIA yMgIGHuf.fI$Ht*S(HS0H[8M}hMI$Huֿ@H@ H@(H@0H@8HH@LxI$IE`HHt IE`I4$HI}hIEpS(mH)HLHHH5oUt HuHUHHuH HH5pHHuHH5:IH`HHt9IHHHtKHȃx y HXHHHuIL;Mu 4IL;Mt)AW(IW0M8IHL;Mu׿@I@ H@(H@0H@8HH@L`HIExHHt IExH3LIIAW(jI)HLLHH5#nHHuHH5HEȋttHEHhb HPH5nnIAHtIIHHH!HH50n HH5nHHuHH5<HHuHH5mAtIIHHHMHH5mAtIIHHHHH5mIIHtdMHIHtPHÃ{ yLcHCHuf.M<$Mt.AW(IW0M8IIM<$Muҿ@I@ H@(H@0H@8HH@HXI$IHHt II4$LIIAW(]I)HLLHH5lEt H}HPH5mIMHtf.DHH Hu0IEL9(#If.DIMHALiH9uH50mHPHhHHXHEHPHEHHEHXt HHXH5HHPHHHĈ[A\A]A^A_]HH=;Hpt2H}' HEtH}HHEHPHEHHEHXt HHXH5HHPHH UHAWAVAUATSHMLEIIHtIH5LPE1MEE1IFIFIPLuHLeH5]kEHCEELHHILHHtSHH5HQt?@IH5Ak8HAƆ88H}LPIH; IF8HdataPos)IF0He[0], g_IF(Hin_volumIF Hxture3D(IFHlar = teIFH scaIFH IAF@@H}LDeLAu8HH5qwHCwwH}H6PHH5rHHCHHH}HHIL`Du uTAELeHH5s|Hƃ||LHIL`AELeHH5NvqHƃqqLHLeHH5s Hƃ  LHIL`A1E(pLeHH5#xhHƃhhLHuLeHH5v Hƃ  LH4IL`AELeHH5{HƃLH HH5oHƃLHLeHH5dyHƃLHMIL`@HHmaxComp HC0H int HC(H HC HONTOURS HCHBER_OF_CHCH #if NUMHCH HC8= 0;C<<H}HHfEALe|UEtPHH5{HƃLHHH5z|H}H5t|H@HUH5H@HHHMHHPHxHpHH@H@UqHuHUk HH5qHƃLHLeHH5)zzHCzzLHQIL`HH5HƃLeLHHEHuH HEH }HEELEt H}LHĘ[A\A]A^A_]IL`NW)EHEHuLeL1HuHHpHHHhHHPH`HXHH@H@H5}HXHHHMHHPHUHMHH@H@Ut HuHUHHuLEu:XuCpuO@t HPEH}{H}XtHhptH}@uD}AEHH5+HƃH}HHIELIEL00HH5u%Hƃ%%LeLHyIELtPIEL0u>`HH5$_HC__LeLHH}H}AAAALeu@HH5HƃLHH@HH5̈́1Hƃ11LHHEp HH }HCH HCH HCLHH}LetH}t AHH5~HƃLH>IHEe$IHEK IHE1IHEIHEIHEIHEtyIHEtd^IHEtAH5ϗHƃL[A^]UHHHGHGH]UHHHGHGH]UHAVSHHHt9IHC(H5ޙHAƆHCHCHH[A^]f.@UHAVSHHHt9IHC(>H5HAƆHCHCHH[A^]f.@UHAVSHHHt9pIHC(ΘH5#fHAƆfHCHCHH[A^]f.@UHHHGHGH]UHHHGHGH]UHAVSHHHHt9PIHC(H5ɣHHAƆHHCHCHH[A^]f.UHAVSH@HIHHHW)EHEHHH8@HE(z)EHDirectioHH0HojectionHH(Hze(in_prHH H normaliHHHDirObj =HHHclip_rayHHH H@7on);@;HEHE(E)EcIFIFIHHE(Ԗ)EH5Hƃ(E)EHEHE࿐HH5HƃH}кHHHEIFHEHMINILH@[A^]#!IHIEtH}IL f.DUHHHGHGH]UHHHGHGH]UHSPHMtRMtM HC(HD in_masHHHsampler3HHHuniform Hf@k;@HCHCHHH[]f.DUHAVSHMtDMt?}t9IHC(H5HAƆHCHCHH[A^]f.@UHAVSHMtDMt?}u9IHC(H5HAƆHCHCHH[A^]f.@UHAVSH@IMM}]@HE(.)EH_dataPosHH0Hme[0], gHH(H(in_voluHH Hexture3DHHHalar = tHHH vec4 scHHH Hf@8);@:uTHH5{HC{H}к{HRIFIFIPHH5JHCJH}кJHHHHE( )EH5yHƃyMt HUHMHHUH}1HHINHHPIVIHH@H@Et H}Et H}LH@[A^] IEt$FIH(IEt3IEuEu$L H}Et IEtH}L f.DUHAVSI`HIF(AH5*PHCPL[A^]f.UHAVSIHIF(AH5+HƃL[A^]UHAVSIHIF(~AH5wHƃL[A^]UHAVSI@HIF(>AH5ù:Hƃ:L[A^]UHSPH0HC(H_dataPosHHHoPos = gHHHec3 l_isHHH vHf@ ;HH[]UHAVSIHIF(AH5`HƃL[A^]UHAVSIPHIF(^AH5OHƃOL[A^]UHAVSIPHIF(AH5OHCOL[A^]f.UHAWAVAUATSH8If GHHIE1Lmf.IHILLH5LH5xHHHMHHPHUHMHH@H@UtHuHUf.@HHuLEuEa"f.DH}E=H}/LH8[A\A]A^A_]HEuEu*Au>H H}Et HEtH}At HAtI~H UHAWAVAUATSHH0f H}GH8HHLAE1HLh@H HQHHH@H@HHEHHHEHHHELmOf.MLHHuHHIIL98Lm.LHHHH@HHDžHLLHDžDžHEHHLxhLLIHEHHH@H@H@H@DžxHLHHLH1H`HHHMHHPHUHMHH@H@H}H50HHHxHHPHpHhHH@H@H0HBT0tJ40JT0f.@HJt0HhHHH`HHPHXHPHH@H@HPH5|HHHMHHPHUHMHH@H@Ut HuHUHHuH}EPhEt H(HEHLHEHHEHXHhH}PqH`heHxEYH}LSH5<LuLLH[A\A]A^A_]I/IEu*PuAhu[EugH}Pt IPtH`ht IhtHxEtH}u.IExItH(ILuHEHLHEHHEHXt HhLHHuHAt I~L IHHuLuILufDUHAWAVSPHHHHHLHHhHH@HGLHHHGGXt H{hLH5HHLH[A^A_]f.fUHAVSHHHHH[A^]IHL f.DUH]fDUHAVSHHLHHHtLHHtLHHCHtq$uhLI>u[H}HUHHuLLH}H}HUHHuLH}HHH[A^]HH}H f.fUHAVSIHHHtLHHt L[A^][A^]fUHSPHH}1HHuH}H}1HÐHuHH}H[]HH}H f.UH]fDUH]fDUHAWAVSPIHLzu!ILXHHH;v HLHLL1H[A^A_]f.UHAWAVAUATSH(IIHHX(I~IEHuHuHHMLEH@(ZDl)EIFH$LMMHMtIEH5!LPE1ɅMEE1II$HUWWLH޹E1HPtSMIHHtHH5HPE1ɅLEE1I$HUWWLLE11H([A\A]A^A_]fDUHAWAVAUATSH(HuIHHLL9IE1fDH(H]HHHMLEIIHAIHAIHAI}(IG(AG@HuDI9tHAIjIux(IEHuHuHHMLEHX0Au!HHXHHI;v LHuLHuH1H([A\A]A^A_]fUHAWAVAUATSH(HGLMIHHHMHuPH}HUHHuH}H}HHC$ LLMLII$LLH;wHEH8L9t;HEH8DELLLE1LH([A\A]A^A_]óMtIELI;wHH}H f.@UH]fDUHAWAVSPIIHHHPAt.I t3IHHtEHH5PHPE1LE-AGI uIG IG(IHHuE1I LI(LI HuuI HI HI HI HIL@I Aw\AW`t I(HugI(HI(HI(HI(HI(Aw\AW`AE1I Aw\AW`I(Aw\AW`I0tIL HZIG0HLIL HI0Iw I0IW(I011E1E1I0IL AwTAWXEW\A 2A_`DHHAh&hSARjH0IL HH[A^A_]f.UHG]fDUHAWAVAUATSHH8HHHEH|HsHjEH H@HH(HXEIEA1ېLZBDBDBDLZBpBlBhLZB@BH9})HIMLHH=HtIUPf.fIcI]PI8HIHJDE4?HxPH@HHHHKHLcPMl$I9|XHcsXLHHHxGHHHVI9}7H9}(HH HHH=Ht HSPfDIcLkPH8HIHJDEt?HxPH@HHHHKHLcPMl$I93HcsXLHHHHHHVI9 H9HH HHHHCHHHHKHLcPMl$I9|THcsXLHHHxCHHHVI9}3H9}(HH HHH=HtHSPfLkPH8H@HFtE4?HxPCH@HHHHKHLcPMl$I9|[HcsXLHHHxJHHHVI9}:H9}(HH HHH=Ht HSPfLkPH8H@HFtEt?HxPCH@HHHHKHLcPMl$I9|ZHcsXLHHHxIHHHVI9}9H9}!HH HHHtHSPf.DLkPH8H@HFtI IH#LILLLLHMLhLt IELP HHP HLLHpII$LLLILIHLH?H~Ef_(M)HEHfpDfYMf)MYI]HHHIELfAeHAmPAEXfAehfYfAmpfYfXf(ffAExfYfXf)AYfAfYXfXf(fYf(fXf(YXQfWf.u{f^f)^HHIELHHIELHHHIILx@ILx\Y _fYfXf)YXIHL8IHLHHHLIHHLHL1HHHpH@Mt ILP Ht HHP ILP IELP /H{dHHH@HHHHHHHHLHLHIHH HH(I>HHI>HHHHǾLII$LI@PHXfPpf(Yf(Y\YhhfffYffYf\f@HfYf(f\XfWE1E1f.AAMMIIXLf.HC`{PHKHH HIHPH;}^HHHHHMMHC`HWJ*WH*HWJ*HHDžHDžHLppt&HHLAHLxpt&HHLAHHXxtHHHHL%LA$LA$H;HA6L-MeHHHHHHHAHHH1hIcHٿHH¹AH5XHx$H5>Hx11A AA7HM}HHHHHAHH1hIcHٿHH¹AHHP HHtHP HHtHP HHH4@1H1H11HHH;EuHx[A\A]A^A_]HHHHrIHHHHI0I?I7I/IHILIUIMuM{vtIHIIIIMt ILP Ht HHP ILP %HHHI(IMt}IELP qHIdICIHt HHP HtPHHP AHHIHt HHP Ht HHP Ht HHP L HHHf.UH]fDUHAVSHwt*LsHHLAst*LsHHLA{tHHH[A^]f.@UHAVSHHHwL5HsAIHs[A^]f.DUHAWAVATSHIIIHHHEHH6I|$HI|$HHuAf_EAOf]f)MAGf_EAWf]f)UAG f_EA_(f]f)]WZEfffZfZffEfWZEH57HMLDžt,؃HAt HHrv#H)H4H5ԁHL HHH;EuH[A\A^A_]UHAWAVAUATSHHXHHHHEHhHHHQW)pHEHHHpHxHUHhHIHHqPHq`HzH`H`I?5fAILxHhH@HHq`H`HHFHHHHHHuHHHHu(EZHxLeL9sAHHxIEZM9AILxMDLpL)IIIGL9#M)LHII9LBHH9MCMt%EM9?J<IEE1OdCDO|H~LLHLpLxLeMtLLxLeI?EZM9 HpI)LHHCL9WI)LHII9LBHH9MCMt+EM9lIJ<ILEE1OdADMtM~LHHLHLpLxLeHI?tHLxLeEZM9s$AILxMf.fHpI)LHHCL9_I)LHII9LBHH9MCMt+EM9mIJ<ILEE1OdADM|M~LHHLHLpLxLeHI?tHLxLeEZM9sAILxMfDHpI)LHHCL9mI)LHII9LBHH9MCMt+EM9tIJ<ILEE1OdADMtM~LHHLHLpLxLeHI?tHLxLeEZM9sAILxMfDHpI)LHHCL9{I)LHII9LBHH9MCMt+EM9{IJ<ILEE1OdADM|M~LHHLHLpLxLeHI?tHLxLeEZM9zLpM)LHHCL9M)LHII9LBHH9MCMt%EM9J<IEE1OdADI\M~LLLLpHxLeMI?LHpHxH`H)HHwW JW*H5]zHHHXHXHHZH5=zHHpHt HxHHH;EuHĈ[A\A]A^A_]HpnHp`HpRHpDHp6Hp(!   HHpHt HxH f.@UHAWAVSPHIHHAƆHt4ILHtLHrAƆHHHtHHH1AH[A^A_]@UHAVSIHHHt@HHHAu,IHHA[A^]AƆAtIAdž[A^]UHSPHHHHttHHH[]pH[]@UHSHHHHHEEHEHHHttHHuHHH5owHUHHH;EuH[]f.UHAWAVSH(HHHHEHHHIǃH{1HtMIHH5LPtIHuL$IH5LPtIHuLE+EM+M]+]ILH@ILH8ILxHHH;Eu H([A^A_]f.UHAWAVAUATSHhIHHHEHE11Ht=HHH5HPAHH5HP1ɅILDEHDIE1(I~EHuHuHHMLpL`0MtIEHuL{MtvHuLIHpLpE\E*pU^\UEW*t^UE\EW*x^EIFII$LIFIAHIPYQhYXYXWQYUf(VFfT]BjYYpYXYXQYMfT]QXYYxYXYXQYUfT]WZAF@if.fWf.uZ^AF@tMtIEHuL!AF@qMtIHuLI~HuHUZIF(^(%i(TTUVUVA^@HHH;EuHh[A\A]A^A_]DUHAWAVAUATSHHHHEHIHHHXAIELAIELH`LALhAFAODžptDžx|W)EHEEEM)E)E)EHHHuH0HHDDpHHuHHHDL`DLIHǾIHH111HpHHHELhPAQATAWH LILP HXHuHHH0HHP HHH;EuHĈ[A\A]A^A_]UHAWAVAUATSHIIHHt[AHILHAAT$LHHHI;uNl(I}EHuHuHHMLEHx0AuI;t vIHLIAƅIE.fuLLIXHH HIXIXAIXHH WWWWHIXHH HǾ@H[A\A]A^A_]@UHAVStIHHHHHAAVHHHH[A^]ø[A^]f.UHAWAVAUATSPHIIHH5zLPIXHtHP IdžXM`IhI9tlLeI}HL L1HuLLIL9uM`IhL9tfDHHI9uMhMxIL9uMMIHtHP IdžIdžH[A\A]A^A_]HI9tHX@tHxHH}H f.UHAWAVAUATSHIHHHEHG*G\^,G\W*G`^,G`HGTHHHtHH5yHPE1LEE1I$L AwTAWXAO\EG`HIXHt5HHAw\9@AW`94;I`IHHIxIHPIL1HHLHLh@HHH`HHHhLXff.fLLLHhH8HHHHHHI;'HHLHLHAw\AW`AE1HHHHHHHH1HH1IhMpL9t!HHHIhfHHHH)HHCHH9I)LHII9LBHH9LCMtI9J<IE1M$LHKIL$M`IhHL)HHt&HDHZI\$HBHIHuH8HrIt$HBHrIt$HBHrIt$HBHrIt$HBHrIt$HBHrIt$HBHrIt$HBHrIt$IHBHI9gM`IhLM`IhIpL9tf.HHI9uMLtLLXLH HAHHA@H8HDžH8HHHEEHLhLH@hH@H8LHH`HH8H@H@H@H@Dž0HHLpLHL1HgHHHHHPHHHH@H@pt HIIH9t)HHHI\f.HPHH)HHHHKH H9)H)HHL4I9LBHUUUUUUUH9LCMtI9 JH<@IE1H[IHHKvMHSIxIH9tcLf.DH~H{H~HNHKH{HFHFHFHHH9uMxI ILIxIML9MtLLt HLH@H8LXLH`HH HI9yHX@tHxIXHLI$L HHHIXIXAw\AW`IXIt/A1ېI`H؉1E1E1HIXI9u׾@AI`MhL9tH;HI9uLI$L HHHEtBAƇAW`IXH H H;M?HĘ[A\A]A^A_]HHH5HH5dHHH(5)pH5cqHCqHHppt HDHHAHHDH߾HHH1t HHLL1H H H;MHHHP  ]Hpt7H)H%HHt HH;HTHML HMt+L!HIhHItOHAHHH%HHpt HLH@H8HXHH`Ht H HHHhH8HHH f.UHAWAVATSL'HGL)HH9tIHH=mIH_J<HL)HHNL)'HHHt*f.HCHBHCHHHuH8fHCHBHCHCHBHCHCHBHCHCHBHCHCHBHCHCHBHCHCHBHCHCHBHHCHI9oM&I^IINMFL9tHHI9uMt L[A\A^A_]IINMFMu[A\A^A_]f.fUHAWAVATSL'HGL)HHHH9H H9IH_HLHHtSMHMtbI$H5cLPE1MEHBK`ClKpIHHHHuHHMHMuE1LIL IHLHHs\S`H{HXAH(HD98mH0H utH HLH s\S`H HH H1H H1H H1(H@HH HH011E1E1HH(1E1E1HH@HHH 9LWH((HHH HǾA[A\A^A_]HP Hǃ(H(HLH(s\S`EE1H(HH(H1H(H1H(H1(D8H0IH0MHMtIH5`LP1IE1LH0s\S`AE1H0HH0H1H0H1H0H1(H SUHAVSHHIHH5`HPIHtHP IdžI Ht$HH I HP Idž I(Ht$HH I(HP Idž(I0Ht$HH I0HP Idž0[A^]UHAVSHGt t[A^]HHH1HHHHH IHLH H0H([A^]UHAWAVATSIIHGG\.Hu{(*^,AD$\WA*L$`^,AL$`A9D$duAL$`A9L$hu AL$`AD$dAL$hMHMIH5^LPI$@HtHP IDŽ$@I$HHt&HL I$HHP IDŽ$HI$PHt&HL I$PHP IDŽ$PI$HLpI$@Ht/MHMt?IH5F]LPE1MEI$@HI$@MHMuE1LIL HHHI$@I$@At$\AT$`I$HtI$PCI$HHLI$HAt$\AT$`1I$HHI$HH1I$HH1I$HH1(I$HI$PHLI$PAt$\AT$`AE1I$PHI$PH1I$PH1I$PH1(I$@I$HI$@I$P11E1E1I$@I$@@I$I$1H HHpI$@HH HWWWWHH߾AH߾q [A\A^A_]fDUHAVSHHIHH5ZHPI@HtHP Idž@IHHt$HH IHHP IdžHIPHt$HH IPHP IdžPIHHpH[A^][A^]fDUHAVSIHHHHLHH@H@HH IHLHHHPLq HHCǀ [A^]fUHAVSHH@H@HH IHLHHHPLq [A^]fDUHAWAVSPHHHHH0Hǃ0Hǃ8H( IHHL@H?Hǃ 0H@@H HHXqfHn@ HH[A^A_]ILI3IH(H0HHtHǃHP HL HfDUHHw]fUHHH?Ht HHP ]Hf.UHAWAVSPHHHHHt#HPHHtHPHǃL@MtLLHǃ@L(L0H0LHǃ8L(Hǃ0L1HHtHǃHP HH[A^A_]HIH(HHLf.PDUH]fDUHSPHHH[]@UHAWAVATSHHIUL}HLH5JHAHL%HLHLH5}J HA HHLH[A\A^A_]f.UHAVSIH@Hx H9t:HHt HP I@HX HtHHLPHI@1ɈH8[A^]UHH@H(]f.fUHH@H0]f.fUHHH@H(]DUHHH@H0]DUHAWAVATSHIH/II@st+LcHHLA$st+LcHHLA${tHHHI(M0L93I@HG H8HHL I@Hx HP I@H@ Hx(HL I@Hx(HP I@H@(Hx0HLI@Hx0HP I@HG0LMI@IH5RLPH@HtHP Hǃ@HHHt$HL HHHP HǃHHPHt$HL HPHP HǃPHHLpI@LI@HHt8LH}1I@HuH}I@HHtLHHtLI@I@H[A\A^A_]f.@HL9H{(LHKHtf.DHH HuHCH9tHH HAHYH9uHH[A\A^A_]`HH}H fDUHAWAVAUATSH8HUILnH^Ht0M|$@HIHt8HÃ{ yL{HCHuLMM7MtI~(Lmux3IM7Mu0I@ H@(HH@HXII$HHt I$I7LI|$ID$I~(LmH}I]tBHt}M|$f.HIHHÃ{ yUL{HCHuFHtOM|$f.HIHHÃ{ y)L{HCHuLMM7M#LMM7MleIM7M0I@ H@(HH@HXII$HHtfI$I7`IM7M0I@ H@(HH@HXII$HHI$I7LI|$ID$I^(H}HIHHnIHsC?ELuMu0HuHLI|$ID$I^(HL(LHIHsC?ELuMu0HuHELmt H}I]Ht;M|$f.HIHt9HËC }tL{HCHuLMM7MtI~(ut/IM7Mu0I@ H@(HH@HXII$HHt I$I7LI|$ID$I~(H}I]t:HtuM|$HIHHËC }tUL{HCHuFHM|$fHIHHËC }tuL{HCHufLMM7M0I@ H@(HH@HXII$HHI$I7LMM7M'0I@ H@(HH@HXII$HHI$I7IM7Mu(BIM7MLI|$ID$I^(H}HIHHIHsC?ELmMu0M|$f.HIHt9HËC }tL{HCHuLMM7MtI~(utWIM7Mu0I@ H@(HH@HXII$HHt I$I7LI|$ID$I~(IEHtII\$f.HHHt7HȋH }t HXHHHuIL3MuvLL3MuiIHL3MuY0I@ H@(HH@LhHI$HHt I$H3LI|$ID$I~(fEHuEt H}H8[A\A]A^A_]H}HEt H}H fUHAWAVAUATSH8IILnH^HLmt-MofHIHt(HÃ{ yLkHCHuLMeMue IMeMuW0I@ H@(HH@HXIEIHHt IIuLIIGMd$(ILHÿ HE( )EHforms::DHHHustomUniHHH//VTK::CHf@ec@H}HHuHULLmEuMEuVI]Ht_Mof.HIHHËC }t3LkHCHu$H}EtH}I]HuLMeMue0I@ H@(HH@HXIEIHHtIIuIMeMuLIIGMd$(ILHÿ HE(W )EHforms::DHHHustomUniHHH//VTK::CHf@ec@H}HHuHULLmEuNEuWIEHt`I_HHHt\HȋH }t HXHHHuIL#M)EHghting::HHHomputeLiHHH//VTK::CH@:Dec@I@HtP|@xD$T$ $H}LHpEDMHuHULEt H}Et H} HE(()EHion::DecHHHyDirectiHHHomputeRaHHH//VTK::CH@HHH8t3HH5yHHH(/HH5_x{HHH{(H])EHuHULEt H}Et H}H([A\A]A^A_]HEHEHEHEH}jHEH}HEG[HEH}HEH}HE HEH}HEH}HEHEqoHEtu_HEte|RPHEtVmCHEtI`6HEtf.@HIHtlHËC }t L{HCHuM7Mud0I@ H@(HH@HXIHEHHtHEI7IM7MuLH}HEH@IF(HEH@HHu9(HxDžPHPHuHHMLhHX0HHIHtIH5zLP1ɅLDE1HuLHLLLXHDž`HDžXLPI^xIL9|LP HL9tZHK LLHHKHtf.HH HuHCH9tHH HAHYH9uLPM9DžhHEH(HhHuHHML Hx(D@XHuH}HHHLPM9HEH@HHHLeHEHELeLmHEI921LMu L9f.HMHtDIH@HufLMI9tAA9G |NH~ILefIMHtfIA9G }&MgIOHu[f.MHt(MgI<$t=IMHf.MI<$uMMf.f0IIVHP(HH HH@LxI$HMH HtHMI$H}HHEIMHt#HH HuLe@f.DIEL9(Let$If.DIMHALiH9uHMH9HMH]IMu L9ZDIL9A|$<H]Ht3AD$8Lu@H IHtqH9C }LsHKHuLuLM>Muf0IAD$8AG IG(IIGI_M>HEHHtHEI6IM>MuLH}HEIw(HXH]HIt$ IT$@AL$XHH]Ht6AD$8LuH IHtqH9C }LsHKHuLuLM>Muf0IAD$8AG IG(IIGI_M>HEHHtHEI6IM>MuLH}HEI(HuEtH}f.IL$HtfDHH HuID$L9 If.@I $HALaH9uf.IL9FA~<H]Ht@AF8L}fDH IH}H9C }L{HKHuL}LM'Muj0IAF8AD$ ID$(I$ID$I\$M'HEHHtHEI7IM'MuLH}HEIt$(HXH]HIv IV@ANXHH]HtDAF8L}f.H IH}H9C }L{HKHuL}LM'Muj0IAF8AD$ ID$(I$ID$I\$M'HEHHtHEI7IM'MuLH}HEI|$(HuEt H}INHtHH HuIFL90If.DIHALqH9uHHHHu1H]H@HHuH}H@HHtH=0H}HuHHhPH}HhH5gHht HxH5H}HH0(L) H5qHCqHhH t H0DhHxH}AHiHDH߾ HHMH}H1ht HxH}HHP HHP H@HP HEH@HXHPHuH}H[A\A]A^A_]IIIII tWH0IIIIDI?z#IHuH}idIuIpIkIht HxH}5IC+)IH}HIEtH}IHXHPHuH}L f.UH僿tTfWf.u. Cf.vCfWf.u9z7^!%Z ^fW-fTfUfV^^XYf(]f.v f.w f.f(v f(f(^Zf.vf(^f(^Zf.v ^]f.UHAWAVATSIHItMMHH(I $LHQI@HHI@HL[A\A^A_]1[A\A^A_]f.UHAWAVAUATSHHOLHI9sIIE1LH}HEH0HfAH0H19V @HMH4HuH9q9S hHs(LHuHHtLLMt-MuHM;uPt#f.@I>LIM;uPuLMt$MuHM;uPtDI>LIM;uPuLMt$MuHM;uPtDI>LIM;uPuLuIFHSHtf.HHHuL,HKH9LtHSH2HNHVH91uH9(uH(H8H0HH}HLAHEf.II9tINH0HCMvIIAtyI(I0L9ud@HL9tXH{(HKHtfDHH HuHCH9tHH HAHYH9uHHH[A\A]A^A_]HHH f.DUHAWAVAUATSHhHUHpH}HGLHHhI9EEf.fHEHHt A4$HEH}HXIH]H{A4$IILxLH;LKI0Ht@A$I0If19A @LMH HuI9tA9E HEI9E0LL}LHLpLL@LLLLHULHEHx(HLeLHHMLEIH(HLHEH@H0H0Ht0A$I19Q @LMH HuI9tA9U ~IHpH}HELHEAA$A MI8LHHEȀu/ILI}(H;wH9HXH]H{(HLpLHHpLEHPL`Lx(LHCLHD8LxILLHpH`HXHELHAM MLHHPA8HEIE0IL;h6HtHHI}(H;I}(HxEtHELpI(I0L9u HEHusDHL9tH{(HKHtfDHH HuHCH9tHH HAHYH9u뮰EHEH(HEHxEHuHpHHpLEHx0HXtuHh1HMLqI(I0L9 fHL9H{0HXtHhHKHtf.HH HuHCH9tHH HAHYH9u{f.HL9\H{0HXt u[fDHhuKHKHtf.HH HuHCH9tHH HAHYH9u{HpHH5HHHE(H)EH5qHCqH}HuEt H}DuH]HpAHMHDH߾ HHpH1Et H}HpEE$Hh[A\A]A^A_]HEt"H}HHHEt H}Hp.HH@HHHpH}H UHAVSLwI(I0L9u[A^]f.HL9tH{(HKHtfDHH HuHCH9tHH HAHYH9uf.@UHAWAVATSIHH6IFHCAFCH{IvH{ Iv H{(Iv(H{0Iv0L{8Lc@Hs@LIF8HC8IF@HC@INHHKHHtIN@L`IN8HAHM'L{PLcXHsXLIFPHCPIFXHCXIN`HK`HtINXL`INPHAHM'L{hLcpHspLIFhHChIFpHCpINxHKxHtINpL`INhHAHM'LLHLIHIHIHHt#IL`IHAHM'AIHLMt HID$IGI$IL$IOIfAdžAIHH[A\A^A_]UHAVSHPHHH KXQH]HH5HH5HHHE()EH5qHCqH}HuEt H}DuH]H}AHMHDH߾K HH}H1Et H}H}1HP[A^]HEt"H}HHHEt H}H}H DUHAWAVAUATSH8IIHHXII}E11HtHHH5HPE1LEILHLuI}HHtzI\$hI}HHUHHII\$pI}HHUHHLuI t,HAƅIHEIt#HtrI\$ppAƅH8[A\A]A^A_]H}HUHHuH}H}IAAAHuI\$hI}HHUHHHI$LMI;wHEH8H9tJLuI1H}HEL(ILLHuLLAAH}HHHI;wHH}H f.UHAWAVAUATSH8IIIHHtHHH5HPE1LEE1IL`u%I$LXHHIHHtHH5@HP1ɅHEH1IHHPHH]HPI@I@LI@tHu Hf(Ef@THp\HP`HHTL@XILHHH;I$LPAtXAfWf.u9A gf.vFAfWf.uIHLu*HILM)ƃMtHǃALmtIL`HEHtHH}H H]H H}HH;LLHMMt$IEL8I@ADLL7HHHH1I@HeLI$LIHI$H5LP1ɅLDAI@tuLHEHHxHHhH5H߉I@HLLLMHEH8JE1AI@uLI@HLLLMHEH8LHEH8tHuLH}HEH8LLHMH8[A\A]A^A_]ILH HHpHH}H DUHAWAVAUATSHIHHII$@ƀE1AMt<LHAt"LHAI$@ƀI$HHtI$HHAE9Leum1E~DmE1fDMLHƉIHELLHƉI9ubILI9LB9]MuIHEHMuDE1HEHMt1HLH1"IMHEHMuHLH[A\A]A^A_]UHAWAVAUATSHHHMHUIIHLJ EH(HuHuHHMLEHX0HHXIHHHt0IHH5?LP1ɅIEHMA$1HEA$ILI;$I|$HI;$H}H8A;D$DI$I9$H;EH}I;$w~IHI;$wdIHHIHCPHEHuHHt'L}HHI9LBHLHuM;$KH}H8AD$DI$I|$1HHI|$H~O1M$ID$HIHI|$HHH9|LLI$I|$LA$t(ILHtA$t HHpIHHtHH5HPE1LEE1IEL A$H}HID$t LLA$u)IEL At$TAT$XAL$\ED$`HLI$HH1I|$I$eI$HHI$I$HH5H߉I|$I$LHULEI$HA$t LLH}HH[A\A]A^A_]H}HI;$ULLEHH}H DUHAWAVAUATSPAH?MIIHHHH;H{HH;IEL8;CDHH9wL9rzIHH;waMILIIFPHEHuLHt'LeHHI9LBLLHuL;ADH[A\A]A^A_]f.UHSPHHHhH5bH߉H[]UHAWAVAUATSPHLIIIIILHLHHHLHHHLLI$@Ht+LLLH[A\A]A^A_]H[A\A]A^A_]LLLH[A\A]A^A_]@UHAWAVSPIHHHIFPHEHuLHt.L}HHH9HBLLHuHH[A^A_]f.DUHAWAVAUATSHHHIIHHHEHGHD8ALDHcEHHH)HH9sHH)HUL v HIIEIIH)HH9HsHH)HU v HIIEII H)HH9HsHH)HU v HI I0EI0I8H)HH9H sHH)HU v HI8IHEIHIPH)HH9H@sHH)HU v HIPI`EI`IhH)HH9H(sH)HUH v HIhIxCvHcEIxIH)HH9HsHH)HU v HIIEIIH)HH9LXLH0sH)HUH v HIHELIHEHEHEEHHEXHMQIEH(H8HEHHHhID$HHpHEHHHHHHHAHHPXH1LL`f.DHxHHIHHHHHhHH}HIHHHHpI$LHPH}HHEHHEHf.L8IFHt HHHu#I^L93tIFfDHHYHAH9 uIv(H}I~0IHMIHHhLLmH}HH}Hp(HHHpI$LLHpLLHHLLH@HfAEXfZfAMHfZfHxf H HfAEhfAMxfZfZHffHH fAfAfZfZffH0fAfZfAfZff HEHHHHPH}HLuILHHHEHLH5HEW*EW*EW*ELH5KHMHMHLH58HMHLH5'HEHHt*HHEHLH5IHILH}H8HhHH}HHMfAHfIXfZfZH`HfLxfBMIfAhfIxfZfZffBMIffZffZffB I fffZfZffBHH{HHhHHH`HH{HHHHH`HHf@HfHXfZfZfHxff@hfHxfZfZffBfffZfZffBfffZfZffBHpHI$LHHfAD$HfAL$XfZfZfHxffAD$hfAL$xfZfZffBfA$fA$fZfZffBfA$fA$fZfZffBHpHI$LH HfAD$HfAL$XfZfZfHxffAD$hfAL$xfZfZffBfA$fA$fZfZffBfA$fA$fZfZffBHPHH}HH(HHMfAHfIXfZfZfHxffAhfIxfZfZffBfffZfZffBfffZfZffBLIH vHWTWTH0HHWTWTHH;LL`*HHH5LHXHHH5LHHH5{LH HH5xLH@HH5|LH(HH5qLIH5lLH0HH5[LH}HH]tHP Ht HHP Mt I$LP H}HtHP HHH;EuH[A\A]A^A_]HHHHILmLIVI`ILm ILm IH}H}Hu ILmH}HP Mt IELP Mt I$LP H}HtHP L HHHHUHAWAVAUATSHMIIHHHELID$L8BLcDž I$I$H)HL9dsI$LH)H v JI$Dž I$I$H)HL9sI$I)H Lv JI$LH L4@I Dž I$I$H)HLH)vI$H s JI$Dž I$I$H)HLH)vI$H s JI$BHcDž I$I$H)HH9LHsI$H)H v HI$LXID$L(H0H8I9HL8Eȃ M1HEHH@HEHHH@HHHhHHHpLP@HEIH;8I}(HHL}L0H@H HH@@HHDž(LHDž(Dž0HHHHxH H@hHEHL0MLHhH8HH@H@H@H@Dž H0H5/IHHuHH5I~HH}LDeH]I~AHMHDHPHމMe(Et H}(z)EW)EI$xH MHPLHp\HMHEHMHELXILMB<Z\Z\R T IVTVTV T ICIAv84AvM~H[A^A_]H[A^A_]fUHAWAVSPL?Mt$IH_L9t#fHHI9uI>H[A^A_]LM~H[A^A_]fUHAWAVATSHIH HtHP IG IHtHP ILJI HtHP ILJ I(HtHP ILJ(I0HtHP ILJ0IXHtHP ILJXM`IhI9tdLuf.DL1HuLLIL9uM`IhL9tfDHHI9uMhMxIL9MIHtHP ILJLILJIHt IIHt IIHt IIHt IIHt IIHt IIxHt II`Ht IhIHHt IPI0Ht I8IHt I IHt IIHt IIHtILJHP IHtILJHP IHtILJHP IMxMtsIL9u?LVfHI9HX@tHxf.DHI9tHX@tHxIxMM`Mt=IhL9t"HHI9uI`LMhIIIHtILJHP IHtILJHP IHtILJHP IHtILJHP IIMHHHIMH@IIHHIAt IHH5HLLH[A\A^A_]HHHHHHHIH}IIIIIIIIxI`IHI0IIIIIIIIxI`IIIIIIIIILLfDUHAWAVAUATSHXIIAFAD$IFID$M|$IvLLeMl$ Iv LL}I\$(Iv(HLmH]I|$0Iv0H}ID$8HEID$@ID$HID$@HEID$8I^8LuI@L9;ID$PHEID$XID$`ID$XHEID$PHEHXPLpXL9mID$hHEM|$pID$xID$pM|$hHEHXhLppL9I$M$IDŽ$IDŽ$M$HELLM9LeA$LuAI$III$A$AI$IHX[A\A]A^A_]DHL9HK H}HuHHKHtHH HuHCH9tHH HAHYH9uf.@HL9HK H}HuHHKHtHH HuHCH9tHH HAHYH9uf.@HL9]HK H}LHHKHtHH HuHCH9tHH HAHYH9uf.@IL98IL$ HLHIL$HtHH HuID$L9 tIfI $HALaH9uIbIfIjInIIuHII7H}IHEH0H}IHEH0H}H}H}H}H}H}L fDUHSPHt HHHH{hHspH{PHsXH{8Hs@H{0H{(H{ H{HH[]fDHtMnL9,I RL9s J (H9@LHHqHHHljH`sv1M}ILIFIM>MnL9I L9s J (H9LHHyHHHƉH`1"H)1D3L30L0D3 L30D0 L00D3@L3PD0@L0PD3`L3pD0`L0pHHuHt.HHf.fD3 3D0 0H HuHL9HfD HHI9uHH)13L30L0D3 L30D0 L00D3@L3PD0@L0PD3`L3pD0`L0pHHuHt.HHf.fD3 3D0 0H HuHI9tHf. HHI9uLH[A\A]A^A_]LUHAWAVAUATSPIIH_HtEMnf.H IHt+H9C } LkHKHuMeMt1I^IMeMuIIAD$ M|$(LLID$0AD$8I|$@I|$HI|$PI|$XID$hID$pID$hID$`I$IDŽ$IDŽ$ID$xI$IDŽ$IDŽ$I$I$IDŽ$IDŽ$I$IDŽ$ADŽ$IDŽ$IDŽ$IDŽ$IDŽ$AƄ$I$ID$I\$MeIHHt IIuLI~IFLH[A\A]A^A_]f.DUHH9Fu]ÐHAHH9@tHNyuHAHH9tHt`ztXfDHPHtztH91HQH2HqHtHNHAHBHA1H9@HH HQHBH91tH4HVHHtHJHAHFHA1H9H4HNHqHFF@HHHHPHtHBHPHQHP1H9@H HHH]HB@HHQHHtHBHPHQHP1H9@H HAHH]ÐUHAWAVSPHLw@LHCXC`t2AuHILIV HSPHKHHHKXHSHSHK E>AuIKD>HCXHs@L{HHCPLHCXHHL1AuIHHCHLsPLLs0Ls(HC8C`t\ItDIHHHH)HHHHHH)N0I)ILs0Mt IcILs0H[A^A_]fUHAWAVAUATSHIHIHfIVIINIHAIFLuIFL`MLDMtGMl$MtHIEL9IEHt1f.IHHuIEHuME1E1L9HUL}IMI|$(AG AD$ Iw(HMHHH]t6AL$ f.DHPHt'H9H ~HHuHfHf.HHID$I$ID$L!HHHtHL!H{LHCMtMMnMtDIEL9IEHt-f.IHHuIEHu f.E1IGHt@HHHu#I_L9;tIIHXLxH9uMt1MIH;]IEIEHtIHHuML}H}LMtAIEHtfIH@HuLuLLL9u(H[A\A]A^A_]LuL9ufDHL9tHs LHKHtHH HuHCH9tHH HAHYH9uIEfDIEHIHHuHH}LMt LHuH f.fUHAWAVSPHI@INjAG I(HHIFHt3AO f.@HHtH9H HPHuHHIFHIGIIGL9IHHtIH1LI~IFLH[A^A_]HLH f.@UHAWAVATSHIIIHUHMHHudIǿ@HA$C H{(ILHEHCHHCIIHHtII7HI~IFHH[A\A^A_]IHL f.UHHGH9t ED9N ~(LH97tRMtRLf.IHIHuNLFMLf.fHH HuI ILMRI9 tEE9B }MtNLIL]H0HHHDHHHtHD9F } HFHNHuH2]H2H]H2H1H]H~H97tLVI HyLQH9uH9tD9O ~ MtHH:H]HHuH]f.H1HHt)HD9I } HAHqHuH ]H2HH]H H]@UHAWAVAUATSPIIH_HtEMnf.H IHt+H9C } LkHKHuMeMt1I^IMeMuIIAD$ M|$(LLID$0AD$8I|$@I|$HI|$PI|$XID$hID$pID$hID$`I$IDŽ$IDŽ$ID$xI$IDŽ$IDŽ$I$I$IDŽ$IDŽ$I$IDŽ$ADŽ$IDŽ$IDŽ$IDŽ$IDŽ$AƄ$I$ID$I\$MeIHHt IIuLI~IFLH[A\A]A^A_]f.DHt6UHAVSHIH6HsLH{(H[A^]@UH]f.UH]fDUHAVSIHHtI~tA~t[A^]AFHI~IF I~(tHHDIvI~HxHHxHHf.1L9r @HCHHuH9trL9s wlHSHtDHHHu#HKH9tHSfDH2HNHVH91uH9puHpHHHHI~HIFAF[A^]UHAVSHGH9t,IHHt HHPLsMtLH[A^][A^]f.DUHSLHMtHFHtHHHHuLRMu0E1E1HJHH9u5LH9HADJH9u)gHHBIBAHJHH9tLQDJH9t@HNHJL^1I93HHH HQHNHJHtHQNJH9HDEtHt Et AB[]ÐHHPH9tt/HHux}fHH@AHQH2HqHtHNHqHrHq1H9HH HQHH9HDHAHHt yHPHt z@H@H9u~@AHPHHtHJHqHpHqH9tHFHHHHHAH9HDHHHt zHHHt y@H@H9t2xt,HH1H9H1LDJH9B}@[]HG[]HPHt zA@HQHHtHBHPHQHP1H9@H HAHHHHtzt=A@HHPHtHBHPHQHP1H9@H HHHHHHAXY@BHHQHHtHBHPHQHP1H9@H HAHH[]HHAXY@BHHHHPHtHBHPHQHP1H9@H HHH[]UHAWAVATSIILxHxHtjLHfD1L9z @HCHHuL9t L9y IxHHHt.HL9x ws HXHHHuIH;ulLH;ua IHH;uS(Lx HH@L`HIpH Ht IpHIxHI[A\A^A_]f.DHt-UHAVSHIH6HsLH[A^]f.UHAWAVAUATSHIIIHUHMHHIĿ`HLh LLAGCHLs LLuLLt LkHCHuHEHLHEHHH[A\A]A^A_]f.@UHAWAVAUATSPIHD/LHIAtL{EAt MfM9t mMIM9ubAtIvH{AuIvH{AtH{uMtW1@T :u#HH9u=Mt8LLELEЅt$M9LIBHtFAt$H[Au#I"AF9Cu@CA:F7HAtMvHLu1M9M9CH[A\A]A^A_]@HtKUHAVSHIH6HsLC@t H{PC t H{0H[A^]f.DUHAWAVAUATSHIIHWLoLH)HH9LL)IIO!LH>H?M)LHIM9MBHH9LCMH}LMLEI9HMJ<MHLELMM|JHHHDA70HHuJHr@AAHAHAH AHAHAHAHH H9uHW1JN4NIIIOH9vK HLL9LMIMIIpHHHAAH]fAnfpHL0LH)1f.DDDDHHuMtfAnfpDM9JMJ H)HHtHf.A73HHuHrDf.fA AKAKAK AKAKAKAKH I9uJH~HLMILMHMHLqHYMtLH[A\A]A^A_]H[A\A]A^A_]HJH11Mf.DUHHHOHt HHIHH]qj!!A:!1'1.Q@qgqf!!qA9QM{QLqo!aX!A9A6aRqrQ@aZsQB1.!!!A;1 qgqfQHA;!A:yaPA:1!QOQOqq!!1!qj!QO!A;!1"!1#!1$!1%1 !{qfQH!!!aZQ@1 !aP!A:qqqqq??????"rr7jU>%/  5 L   CE  a J J     r9      njj;(             |  "    f$ LD#!U" "!(''(' ' ' ' & & $ $ "  !  !      ! !! S o53'3 1 / 2 . .3 1 1113 . "2 . * . >2 0 0 0 // / . ... 2 222#2. -- ))) )) - ( + +! )$ *&.'*(*(  Z ,       7 7            $Nzr#I 2 m     Y     *   R       x  ,    Vrs|           J                 #H i0E.<0E.<X;             j        AE <I6         ` 5 9,        ^H|_xH$    _   .[[i                                           v/ 9Ws 1    * @ /55Q  = ]>   G SbB          ,%)9]$C[K(YY b          Y]B _gf      9166 I T  U    [[c u          B"#7C  U"[[       %?      E          0AG  c       f   * 8 -$L Y   &)@      K;   ~ - x -   g *       E F     -  M          00//N0/// $/ - f 0 0 u / / / / j //y //n020/v//c.1..1 ...1.. 1 -!-!"-#0#-$-$#-%-%y&,&,&r',',( ,(,(|)%/)/*r*&2+)+ 2+0,0,J  >  >  >  :>U x > >uJ - -  -^ *V -V -V -/  "    zz$.  2  <  *  F <  *  F iv~3   :   z    0D2#@)  * > %hh * 8e  q  Y &2    X '*/ H "  -%% %3 ( * ?o ,% f*vE     \          MB           <77 L a z  2+A6 Qa!N  q ++3 LLTbGG kp{Gz??Q?z?MbP?@?9~?{Gz???@$@????@$@?????v~гݿw? ??????????B==BB==BB==B?==?????@@UHAVSHHH=L5HLHHH=HLHHH=HLHHH=HL[A^] //Transform vertex (data coordinates) to clip coordinates // p_clip = T_ProjViewModel * T_dataToWorld * p_data vec4 pos = in_projectionMatrix * in_modelViewMatrix * in_volumeMatrix[0] * vec4(in_vertexPos.xyz, 1.0); gl_Position = pos; // Transform vertex (data coordinates) to texture coordinates. // p_texture = T_dataToTex * p_data vec3 uvx = sign(in_cellSpacing[0]) * (in_inverseTextureDatasetMatrix[0] * vec4(in_vertexPos, 1.0)).xyz; // For point dataset, we offset the texture coordinate // to account for OpenGL treating voxel at the center of the cell. // Transform cell tex-coordinates to point tex-coordinates (cellToPoint // is an identity matrix in the case of cell data). ip_textureCoords = (in_cellToPoint[0] * vec4(uvx, 1.0)).xyz; ip_inverseTextureDataAdjusted = in_cellToPoint[0] * in_inverseTextureDatasetMatrix[0]; uniform vec3 in_cellSpacing[]; uniform mat4 in_modelViewMatrix; uniform mat4 in_projectionMatrix; uniform mat4 in_volumeMatrix[]; uniform mat4 in_inverseTextureDatasetMatrix[]; uniform mat4 in_cellToPoint[]; //This variable could be 'invariant varying' but it is declared //as 'varying' to avoid compiler compatibility issues. out mat4 ip_inverseTextureDataAdjusted; uniform sampler3D in_volume[]; uniform vec4 in_volume_scale[]; uniform vec4 in_volume_bias[uniform sampler1D in_coordTexs; uniform vec3 in_coordTexSizes; uniform vec3 in_coordsScale; uniform vec3 in_coordsBias; uniform sampler3D in_blanking; uniform int in_noOfComponents; uniform sampler2D in_depthSampler; // Camera position uniform vec3 in_cameraPos; uniform sampler2D in_noiseSampler; ]; uniform mat4 in_inverseVolumeMatrix[]; uniform mat4 in_textureDatasetMatrix[]; uniform mat4 in_textureToEye[]; uniform vec3 in_texMin[]; uniform vec3 in_texMax[// view and model matrices uniform mat4 in_projectionMatrix; uniform mat4 in_inverseProjectionMatrix; uniform mat4 in_modelViewMatrix; uniform mat4 in_inverseModelViewMatrix; in mat4 ip_inverseTextureDataAdjusted; // Ray step size uniform vec3 in_cellStep[mat4 g_eyeToTexture = in_inverseTextureDatasetMatrix[0] * in_inverseVolumeMatrix[0] * in_inverseModelViewMatrix; mat4 g_texToView = in_modelViewMatrix * in_volumeMatrix[0] *in_textureDatasetMatrix[0]; uniform vec2 in_scalarsRange[]; uniform vec3 in_cellSpacing[]; // Sample distance uniform float in_sampleDistance; // Scales uniform vec2 in_windowLowerLeftCorner; uniform vec2 in_inverseOriginalWindowSize; uniform vec2 in_inverseWindowSize; uniform vec3 in_textureExtentsMax; uniform vec3 in_textureExtentsMin; // Material and lighting uniform vec3 in_diffuse[4]; uniform vec3 in_ambient[4]; uniform vec3 in_specular[4]; uniform float in_shininess[4]; // Others vec3 g_rayJitter = vec3(0.0); uniform vec2 in_averageIPRange; vec4 g_eyePosObjs[uniform bool in_twoSidedLighting; uniform float in_giReach; uniform float in_anisotropy; uniform float in_volumetricScatteringBlending; #define TOTAL_NUMBER_LIGHTS #define NUMBER_POS_LIGHTS vec4 g_fragWorldPos; uniform vec3 in_lightAmbientColor[TOTAL_NUMBER_LIGHTS]; uniform vec3 in_lightDiffuseColor[TOTAL_NUMBER_LIGHTS]; uniform vec3 in_lightSpecularColor[TOTAL_NUMBER_LIGHTS]; uniform vec3 in_lightDirection[TOTAL_NUMBER_LIGHTS]; uniform vec3 in_lightPosition[NUMBER_POS_LIGHTS]; uniform vec3 in_lightAttenuation[NUMBER_POS_LIGHTS]; uniform float in_lightConeAngle[NUMBER_POS_LIGHTS]; uniform float in_lightExponent[NUMBER_POS_LIGHTS]; vec3 g_lightDirectionTex[TOTAL_NUMBER_LIGHTS];vec3 g_lightPositionTex[NUMBER_POS_LIGHTS];uniform vec3 in_lightAmbientColor[1]; uniform vec3 in_lightDiffuseColor[1]; uniform vec3 in_lightSpecularColor[1]; vec4 g_lightPosObj[]; vec3 g_ldir[]; vec3 g_vdir[]; vec3 g_h[uniform vec4 in_componentWeight; uniform sampler2D in_depthPassSampler; #if NUMBER_OF_CONTOURS uniform float in_isosurfacesValues[NUMBER_OF_CONTOURS]; int findIsoSurfaceIndex(float scalar, float array[NUMBER_OF_CONTOURS+2]) { int index = NUMBER_OF_CONTOURS >> 1; while (scalar > array[index]) ++index; while (scalar < array[index]) --index; return index; } #endif vtkPlaneuniform vec3 in_slicePlaneOrigin; uniform vec3 in_slicePlaneNormal; vec3 g_intersection; float intersectRayPlane(vec3 rayOrigin, vec3 rayDir) { vec4 planeNormal = in_inverseVolumeMatrix[0] * vec4(in_slicePlaneNormal, 0.0); float denom = dot(planeNormal.xyz, rayDir); if (abs(denom) > 1e-6) { vec4 planeOrigin = in_inverseVolumeMatrix[0] * vec4(in_slicePlaneOrigin, 1.0); return dot(planeOrigin.xyz - rayOrigin, planeNormal.xyz) / denom; } return -1.0; } // vec2 fragTexCoord2 = (gl_FragCoord.xy - in_windowLowerLeftCorner) * in_inverseWindowSize; vec4 depthValue = texture2D(in_depthPassSampler, fragTexCoord2); vec4 rayOrigin = WindowToNDC(gl_FragCoord.x, gl_FragCoord.y, depthValue.x); // From normalized device coordinates to eye coordinates. // in_projectionMatrix is inversed because of way VT // From eye coordinates to texture coordinates rayOrigin = in_inverseTextureDatasetMatrix[0] * in_inverseVolumeMatrix[0] * in_inverseModelViewMatrix * in_inverseProjectionMatrix * rayOrigin; rayOrigin /= rayOrigin.w; g_rayOrigin = rayOrigin.xyz; // Get the 3D texture coordinates for lookup into the in_volume dataset g_rayOrigin = ip_textureCoords.xyz; // Eye position in dataset space g_eyePosObj = in_inverseVolumeMatrix[0] * vec4(in_cameraPos, 1.0); g_eyePosObjs[] = in_inverseVolumeMatrix[] * vec4(in_cameraPos, 1.0); // Getting the ray marching direction (in dataset space) vec3 rayDir = computeRayDirection(); // 2D Texture fragment coordinates [0,1] from fragment coordinates. // The frame buffer texture has the size of the plain buffer but // we use a fraction of it. The texture coordinate is less than 1 if // the reduction factor is less than 1. // Device coordinates are between -1 and 1. We need texture // coordinates between 0 and 1. The in_depthSampler // buffer has the original size buffer. vec2 fragTexCoord = (gl_FragCoord.xy - in_windowLowerLeftCorner) * in_inverseWindowSize; // Multiply the raymarching direction with the step size to get the // sub-step size we need to take at each raymarching step g_dirStep = (ip_inverseTextureDataAdjusted * vec4(rayDir, 0.0)).xyz * in_sampleDistance; g_lengthStep = length(g_dirStep); float jitterValue = 0.0; jitterValue = texture2D(in_noiseSampler, gl_FragCoord.xy / vec2(textureSize(in_noiseSampler, 0))).x; g_rayJitter = g_dirStep * jitterValue; g_rayJitter = g_dirStep; g_rayOrigin += g_rayJitter; // Flag to determine if voxel should be considered for the rendering g_skip = false; // Light position in dataset space g_lightPosObj[] = (in_inverseVolumeMatrix[] * vec4(in_cameraPos, 1.0)); g_ldir[] = normalize(g_lightPosObj[].xyz - ip_vertexPos); g_vdir[] = normalize(g_eyePosObjs[].xyz - ip_vertexPos); g_h[] = normalize(g_ldir[] + g_vdir[]); g_skip = false; // Check whether the neighboring points/cells are blank. // Note the half cellStep because texels are point centered. vec3 xvec = vec3(in_cellStep[0].x/2.0, 0.0, 0.0); vec3 yvec = vec3(0.0, in_cellStep[0].y/2.0, 0.0); vec3 zvec = vec3(0.0, 0.0, in_cellStep[0].z/2.0); vec3 texPosPVec[3]; texPosPVec[0] = g_dataPos + xvec; texPosPVec[1] = g_dataPos + yvec; texPosPVec[2] = g_dataPos + zvec; vec3 texPosNVec[3]; texPosNVec[0] = g_dataPos - xvec; texPosNVec[1] = g_dataPos - yvec; texPosNVec[2] = g_dataPos - zvec; vec4 blankValue = texture3D(in_blanking, g_dataPos); vec4 blankValueXP = texture3D(in_blanking, texPosPVec[0]); vec4 blankValueYP = texture3D(in_blanking, texPosPVec[1]); vec4 blankValueZP = texture3D(in_blanking, texPosPVec[2]); vec4 blankValueXN = texture3D(in_blanking, texPosNVec[0]); vec4 blankValueYN = texture3D(in_blanking, texPosNVec[1]); vec4 blankValueZN = texture3D(in_blanking, texPosNVec[2]); vec3 blankValuePx; blankValuePx[0] = blankValueXP.x; blankValuePx[1] = blankValueYP.x; blankValuePx[2] = blankValueZP.x; vec3 blankValuePy; blankValuePy[0] = blankValueXP.y; blankValuePy[1] = blankValueYP.y; blankValuePy[2] = blankValueZP.y; vec3 blankValueNx; blankValueNx[0] = blankValueXN.x; blankValueNx[1] = blankValueYN.x; blankValueNx[2] = blankValueZN.x; vec3 blankValueNy; blankValueNy[0] = blankValueXN.y; blankValueNy[1] = blankValueYN.y; blankValueNy[2] = blankValueZN.y; // If the current or neighboring points // (that belong to cells that share this texel) are blanked, // skip the texel. In other words, if point 1 were blank, // texels 0, 1 and 2 would have to be skipped. if (blankValue.x > 0.0 || any(greaterThan(blankValueNx, vec3(0.0))) || any(greaterThan(blankValuePx, vec3(0.0)))) { // skip this texel g_skip = true; } // If the current or previous cells (that share this texel) // are blanked, skip the texel. In other words, if cell 1 // is blanked, texels 1 and 2 would have to be skipped. else if (blankValue.y > 0.0 || any(greaterThan(blankValuePy, vec3(0.0))) || any(greaterThan(blankValueNy, vec3(0.0)))) { // skip this texel g_skip = true; } // If the current or previous cells (that share this texel) // are blanked, skip the texel. In other words, if cell 1 // is blanked, texels 1 and 2 would have to be skipped. if (blankValue.x > 0.0 || any(greaterThan(blankValueNx, vec3(0.0))) || any(greaterThan(blankValuePx, vec3(0.0)))) { // skip this texel g_skip = true; } g_dataPos = g_intersection; uniform sampler2D [uniform sampler2D in_labelMapGradientOpacity; float computeGradientOpacity(vec4 grad) { return texture2D(, vec2(grad.w, 0.0)).r; } float computeGradientOpacity(vec4 grad, int component) { if (component == ) { return texture2D(, vec2(grad.w, 0.0)).r; } } float computeGradientOpacityForLabel(vec4 grad, float label) { return texture2D(in_labelMapGradientOpacity, vec2(grad.w, label)).r; }// c is short for component vec4 computeGradient(in vec3 texPos, in int c, in sampler3D volume,in int index) { // Approximate Nabla(F) derivatives with central differences. vec3 g1; // F_front vec3 g2; // F_back vec3 xvec = vec3(in_cellStep[index].x, 0.0, 0.0); vec3 yvec = vec3(0.0, in_cellStep[index].y, 0.0); vec3 zvec = vec3(0.0, 0.0, in_cellStep[index].z); vec3 texPosPvec[3]; texPosPvec[0] = texPos + xvec; texPosPvec[1] = texPos + yvec; texPosPvec[2] = texPos + zvec; vec3 texPosNvec[3]; texPosNvec[0] = texPos - xvec; texPosNvec[1] = texPos - yvec; texPosNvec[2] = texPos - zvec; g1.x = texture3D(volume, vec3(texPosPvec[0]))[c]; g1.y = texture3D(volume, vec3(texPosPvec[1]))[c]; g1.z = texture3D(volume, vec3(texPosPvec[2]))[c]; g2.x = texture3D(volume, vec3(texPosNvec[0]))[c]; g2.y = texture3D(volume, vec3(texPosNvec[1]))[c]; g2.z = texture3D(volume, vec3(texPosNvec[2]))[c]; vec4 g1ObjDataPos[3], g2ObjDataPos[3]; for (int i = 0; i < 3; ++i) { g1ObjDataPos[i] = clip_texToObjMat * vec4(texPosPvec[i], 1.0); if (g1ObjDataPos[i].w != 0.0) { g1ObjDataPos[i] /= g1ObjDataPos[i].w; } g2ObjDataPos[i] = clip_texToObjMat * vec4(texPosNvec[i], 1.0); if (g2ObjDataPos[i].w != 0.0) { g2ObjDataPos[i] /= g2ObjDataPos[i].w; } } for (int i = 0; i < clip_numPlanes && !g_skip; i = i + 6) { vec3 planeOrigin = vec3(in_clippingPlanes[i + 1], in_clippingPlanes[i + 2], in_clippingPlanes[i + 3]); vec3 planeNormal = normalize(vec3(in_clippingPlanes[i + 4], in_clippingPlanes[i + 5], in_clippingPlanes[i + 6])); for (int j = 0; j < 3; ++j) { if (dot(vec3(planeOrigin - g1ObjDataPos[j].xyz), planeNormal) > 0) { g1[j] = in_clippedVoxelIntensity; } if (dot(vec3(planeOrigin - g2ObjDataPos[j].xyz), planeNormal) > 0) { g2[j] = in_clippedVoxelIntensity; } } } // Apply scale and bias to the fetched values. g1 = g1 * in_volume_scale[index][c] + in_volume_bias[index][c]; g2 = g2 * in_volume_scale[index][c] + in_volume_bias[index][c]; // Central differences: (F_front - F_back) / 2h // This version of computeGradient() is only used for lighting // calculations (only direction matters), hence the difference is // not scaled by 2h and a dummy gradient mag is returned (-1.). return vec4((g1 - g2) / in_cellSpacing[index], -1.0); } // Scale values the actual scalar range. float range = in_scalarsRange[4*index+c][1] - in_scalarsRange[4*index+c][0]; g1 = in_scalarsRange[4*index+c][0] + range * g1; g2 = in_scalarsRange[4*index+c][0] + range * g2; // Central differences: (F_front - F_back) / 2h g2 = g1 - g2; float avgSpacing = (in_cellSpacing[index].x + in_cellSpacing[index].y + in_cellSpacing[index].z) / 3.0; vec3 aspect = in_cellSpacing[index] * 2.0 / avgSpacing; g2 /= aspect; float grad_mag = length(g2); // Handle normalizing with grad_mag == 0.0 g2 = grad_mag > 0.0 ? normalize(g2) : vec3(0.0); // Since the actual range of the gradient magnitude is unknown, // assume it is in the range [0, 0.25 * dataRange]. range = range != 0 ? range : 1.0; grad_mag = grad_mag / (0.25 * range); grad_mag = clamp(grad_mag, 0.0, 1.0); return vec4(g2.xyz, grad_mag); } vec4 computeGradient(in vec3 texPos, in int c, in sampler3D volume, in int index) { return vec4(0.0); } for(int i=0; i= 0.0) { opacity *= computeGradientOpacity(gradient opacity *= computeGradientOpacityForLabel(gradient, label); color = texture2D(, vec2(scalar, 0.0)).xyz; vec4 lutRes = computeRGBAWithGrad(vec4(scalar), gradient); opacity = lutRes.a; color = lutRes.xyz vec4 computeDensityGradient(in vec3 texPos, in int c, in sampler3D volume, const in sampler2D opacityTF, const in sampler2D gradTF, in int index, float label) vec4 computeDensityGradient(in vec3 texPos, in int c, in sampler3D volume, const in sampler2D opacityTF, in int index, float label) vec4 computeDensityGradient(in vec3 texPos, in int c, in sampler3D volume, in int index, float label) g1.xtexPosPvec[0] g1.ytexPosPvec[1] g1.ztexPosPvec[2] g2.xtexPosNvec[0] g2.ytexPosNvec[1] g2.ztexPosNvec[2]// c is short for component { // Approximate Nabla(F) derivatives with central differences. vec3 g1; // F_front vec3 g2; // F_back vec3 xvec = vec3(in_cellStep[index].x, 0.0, 0.0); vec3 yvec = vec3(0.0, in_cellStep[index].y, 0.0); vec3 zvec = vec3(0.0, 0.0, in_cellStep[index].z); vec3 texPosPvec[3]; texPosPvec[0] = texPos + xvec; texPosPvec[1] = texPos + yvec; texPosPvec[2] = texPos + zvec; vec3 texPosNvec[3]; texPosNvec[0] = texPos - xvec; texPosNvec[1] = texPos - yvec; texPosNvec[2] = texPos - zvec; float scalar; float opacity; vec4 gradient; scalar = texture3D(volume,)[c]; scalar = scalar * in_volume_scale[index][c] + in_volume_bias[index][c]; = opacity; { return vec4(0.0); } float phase_function(float cos_angle) { return 1.0; } float g_anisotropy2 = in_anisotropy * in_anisotropy; float phase_function(float cos_angle) { float d = 1.0 + g_anisotropy2 - 2.0 * in_anisotropy * cos_angle; return (1.0 - g_anisotropy2) / (d * sqrt(d)); } vec4 computeLighting(vec4 color, int component, float label) { vec4 finalColor = vec4(0.0); vol_shadow = volumeShadow(g_dataPos, tex_light.xyz, 0.0, component, in_volume[0], 0, label); float vol_shadow = 1.0; vec4 tex_light = vec4(0.0); vec4 shading_gradient = computeDensityGradient(g_dataPos, component, in_volume[0], 0, label); vec4 shading_gradient = computeGradient(g_dataPos, component, in_volume[0], 0); vec4 gradient = computeGradient(g_dataPos, component, in_volume[0], 0); vec4 gradient = shading_gradient; vec3 diffuse = vec3(0.0); vec3 specular = vec3(0.0); vec3 normal = shading_gradient.xyz; float normalLength = length(normal); if (normalLength > 0.0) { normal = normalize(normal); } else { normal = vec3(0.0, 0.0, 0.0); } // XXX: normal is oriented inside the volume, so we take -g_ldir/-g_vdir float nDotL = dot(normal, -g_ldir[0]); vec3 r = normalize(2.0 * nDotL * normal + g_ldir[0]); float vDotR = dot(r, -g_vdir[0]); if (nDotL < 0.0 && in_twoSidedLighting) { nDotL = -nDotL; } if (nDotL > 0.0) { diffuse = nDotL * in_diffuse[component] * in_lightDiffuseColor[0] * color.rgb; vDotR = max(vDotR, 0.0); specular = pow(vDotR, in_shininess[component]) * in_specular[component] * in_lightSpecularColor[0]; } // For the headlight, ignore the light's ambient color // for now as it is causing the old mapper tests to fail finalColor.xyz = in_ambient[component] * color.rgb + diffuse + specular; g_fragWorldPos = g_texToView * vec4(g_dataPos, 1.0); if (g_fragWorldPos.w != 0.0) { g_fragWorldPos /= g_fragWorldPos.w; } vec3 viewDirection = normalize(-g_fragWorldPos.xyz); vec3 ambient = vec3(0,0,0); vec3 diffuse = vec3(0,0,0); vec3 specular = vec3(0,0,0); vec3 vertLightDirection; vec3 normal = normalize((in_textureToEye[0] * vec4(shading_gradient.xyz, 0.0)).xyz); vec3 lightDir; for (int posNum = 0; posNum < NUMBER_POS_LIGHTS; posNum++) { float attenuation = 1.0; lightDir = in_lightDirection[posNum]; vertLightDirection = (g_fragWorldPos.xyz - in_lightPosition[posNum]); float distance = length(vertLightDirection); vertLightDirection = normalize(vertLightDirection); attenuation = 1.0 / (in_lightAttenuation[posNum].x + in_lightAttenuation[posNum].y * distance + in_lightAttenuation[posNum].z * distance * distance); // per OpenGL standard cone angle is 90 or less for a spot light if (in_lightConeAngle[posNum] <= 90.0) { float coneDot = dot(vertLightDirection, lightDir); // if inside the cone if (coneDot >= cos(radians(in_lightConeAngle[posNum]))) { attenuation = attenuation * pow(coneDot, in_lightExponent[posNum]); } else { attenuation = 0.0; } } float nDotL = dot(normal, vertLightDirection); if (nDotL < 0.0 && in_twoSidedLighting) { nDotL = -nDotL; } if (nDotL > 0.0) { float df = max(0.0, attenuation * nDotL); diffuse += (df * in_lightDiffuseColor[posNum]); vec3 r = normalize(2.0 * nDotL * normal - vertLightDirection); float rDotV = dot(-viewDirection, r); if (rDotV < 0.0 && in_twoSidedLighting) { rDotV = -rDotV; } if (rDotV > 0.0) { float sf = attenuation * pow(rDotV, in_shininess[component]); specular += (sf * in_lightSpecularColor[posNum]); } } ambient += in_lightAmbientColor[posNum]; } for (int dirNum = NUMBER_POS_LIGHTS; dirNum < TOTAL_NUMBER_LIGHTS; dirNum++) { vertLightDirection = in_lightDirection[dirNum]; float nDotL = dot(normal, vertLightDirection); if (nDotL < 0.0 && in_twoSidedLighting) { nDotL = -nDotL; } if (nDotL > 0.0) { float df = max(0.0, nDotL); diffuse += (df * in_lightDiffuseColor[dirNum]); vec3 r = normalize(2.0 * nDotL * normal - vertLightDirection); float rDotV = dot(-viewDirection, r); if (rDotV > 0.0) { float sf = pow(rDotV, in_shininess[component]); specular += (sf * in_lightSpecularColor[dirNum]); } } ambient += in_lightAmbientColor[dirNum]; } finalColor.xyz = in_ambient[component] * ambient + in_diffuse[component] * diffuse * color.rgb + in_specular[component] * specular; finalColor = vec4(color.rgb, 0.0); float vol_coef = 2.0 * in_volumetricScatteringBlending * exp( - 2.0 * in_volumetricScatteringBlending * shading_gradient.w * color.a)2.0 * (1.0 - in_volumetricScatteringBlending) * exp( - 2.0 * in_volumetricScatteringBlending * shading_gradient.w * color.a) + 2.0 * in_volumetricScatteringBlending - 1.0vec3 view_tdir = normalize((g_eyeToTexture * vec4(viewDirection, 0.0)).xyz); vec3 secondary_contrib = vec3(0.0); vec3 tex_light = vec3(0.0); shading_gradient.w = length(shading_gradient.xyz); vec3 diffuse_light = vec3(0.0); float attenuation = 0.0; float vol_shadow = 0.0; float phase = 1.0; tex_light = (in_inverseTextureDatasetMatrix[0] * in_inverseVolumeMatrix[0] * vec4(in_cameraPos, 1.0)).xyz; phase = phase_function(-1); // always angle of pi vol_shadow = volumeShadow(g_dataPos, tex_light, 1.0, component, in_volume[0], 0, label); secondary_contrib += vol_shadow * phase * color.rgb * in_diffuse[component] * in_lightDiffuseColor[0]; secondary_contrib += in_ambient[component] * in_lightAmbientColor[0]; float dist_light = 0.0; for(int posNum = 0; posNum < NUMBER_POS_LIGHTS; posNum++) { tex_light = g_lightPositionTex[posNum]; vec3 light_vert = g_fragWorldPos.xyz - in_lightPosition[posNum]; dist_light = length(light_vert); float light_angle = dot(normalize(light_vert), normalize(in_lightDirection[posNum])); phase = phase_function(dot(normalize(g_dataPos - tex_light), view_tdir)); attenuation = 1.0 / (in_lightAttenuation[posNum].x + in_lightAttenuation[posNum].y * dist_light + in_lightAttenuation[posNum].z * dist_light * dist_light); attenuation *= max(0.0, sign(light_angle - cos(radians(in_lightConeAngle[posNum])))) * pow(light_angle, in_lightExponent[posNum]); vol_shadow = volumeShadow(g_dataPos, tex_light, 1.0, component, in_volume[0], 0, label); secondary_contrib += vol_shadow * phase * attenuation * color.rgb * in_diffuse[component] * in_lightDiffuseColor[posNum]; secondary_contrib += in_ambient[component] * in_lightAmbientColor[posNum]; } for(int dirNum = NUMBER_POS_LIGHTS; dirNum < TOTAL_NUMBER_LIGHTS; dirNum++) { tex_light = g_lightDirectionTex[dirNum]; phase = phase_function(dot(normalize(-tex_light), view_tdir)); vol_shadow = volumeShadow(g_dataPos, tex_light, 0.0, component, in_volume[0], 0, label); secondary_contrib += vol_shadow * phase * color.rgb * in_diffuse[component] * in_lightDiffuseColor[dirNum]; secondary_contrib += in_ambient[component] * in_lightAmbientColor[dirNum]; } finalColor.xyz = (1.0 - vol_coef) * finalColor.xyz + vol_coef * secondary_contrib; if (gradient.w >= 0.0 && label == 0.0) { color.a *= computeGradientOpacity(gradient); } if (gradient.w >= 0.0 && label > 0.0) { color.a *= computeGradientOpacityForLabel(gradient, label); } if (gradient.w >= 0.0) { for (int i = 0; i < in_noOfComponents; ++i) { color.a = color.a * computeGradientOpacity(gradient, i) * in_componentWeight[i]; } } finalColor.a = color.a; return finalColor; } vec4 computeLighting(vec3 texPos, vec4 color, const in sampler2D gradientTF, const in sampler3D volume, const in sampler2D opacityTF, const int volIdx, int component) { vec4 finalColor = vec4(0.0); vec4 computeLighting(vec3 texPos, vec4 color, const in sampler3D volume, const in sampler2D opacityTF, const int volIdx, int component) { vec4 finalColor = vec4(0.0); vec4 shading_gradient = computeDensityGradient(texPos, component, volume, opacityTF, gradientTF, volIdx, 0.0); vec4 shading_gradient = computeDensityGradient(texPos, component, volume, opacityTF, volIdx, 0.0); vec4 shading_gradient = computeGradient(texPos, component, volume, volIdx); vec4 gradient = computeGradient(texPos, component, volume, volIdx); vec3 diffuse = vec3(0.0); vec3 specular = vec3(0.0); vec3 normal = shading_gradient.xyz; float normalLength = length(normal); if (normalLength > 0.0) { normal = normalize(normal); } else { normal = vec3(0.0, 0.0, 0.0); } // normal is oriented inside the volume (because normal = gradient, oriented inside the volume) // thus we have to take minus everything float nDotL = dot(normal, -g_ldir[volIdx]); vec3 r = normalize(2.0 * nDotL * normal + g_ldir[volIdx]); float vDotR = dot(r, -g_vdir[volIdx]); if (nDotL < 0.0 && in_twoSidedLighting) { nDotL = -nDotL; } if (nDotL > 0.0) { diffuse = nDotL * in_diffuse[component] * in_lightDiffuseColor[0] * color.rgb; vDotR = max(vDotR, 0.0); specular = pow(vDotR, in_shininess[component]) * in_specular[component] * in_lightSpecularColor[0]; } finalColor.xyz = in_ambient[component] * color.rgb * in_lightAmbientColor[0] + diffuse + specular; if (gradient.w >= 0.0) { color.a = color.a * computeGradientOpacity(gradient, gradientTF); } finalColor.a = color.a; return clamp(finalColor, 0.0, 1.0); } vec3 computeRayDirection() { return normalize(ip_vertexPos.xyz - g_eyePosObj.xyz); } uniform vec3 in_projectionDirection; vec3 computeRayDirection() { return normalize((in_inverseVolumeMatrix[0] * vec4(in_projectionDirection, 0.0)).xyz); } vec4 computeColor(vec4 scalar, float opacity) { return clamp(computeLighting(vec4(texture2D(, vec2(scalar.w, 0.0)).xyz, opacity), 0, 0.0), 0.0, 1.0); } vec4 computeColor(vec4 scalar, float opacity, int component) { { return clamp(computeLighting(vec4(texture2D( , vec2( scalar[],0.0)).xyz, opacity),, 0.0), 0.0, 1.0); }, vec2(scalar.x, 0.0)).xyz, opacity), 0, 0.0), 0.0, 1.0); } vec4 computeColor(vec4 scalar, float opacity) { return clamp(computeLighting(vec4(scalar.xyz, opacity), 0, 0.0), 0.0, 1.0); }vec4 computeColor(vec4 scalar, const in sampler2D colorTF) { return clamp(computeLighting(vec4(texture2D(colorTF, vec2(scalar.w, 0.0)).xyz, opacity), 0), 0.0, 1.0); } vec4 computeColor(vec3 texPos, vec4 scalar, float opacity, const in sampler2D colorTF, const in sampler2D gradientTF, const in sampler3D volume, const in sampler2D opacityTF, const int volIdx) { return clamp(computeLighting(texPos, vec4(texture2D(colorTF, vec2(scalar.w, 0.0)).xyz, opacity), gradientTF, volume, opacityTF,volIdx, 0), 0.0, 1.0); } vec4 computeColor(vec3 texPos, vec4 scalar, float opacity, const in sampler2D colorTF, const in sampler3D volume, const in sampler2D opacityTF, const int volIdx) { return clamp(computeLighting(texPos, vec4(texture2D(colorTF, vec2(scalar.w, 0.0)).xyz, opacity), volume, opacityTF,volIdx, 0), 0.0, 1.0); } float computeOpacity(vec4 scalar, const in sampler2D opacityTF) { return texture2D(opacityTF, vec2(scalar.w, 0)).r; } float computeGradientOpacity(vec4 grad, const in sampler2D gradientTF) { return texture2D(gradientTF, vec2(grad.w, 0.0)).r; } float computeOpacity(vec4 scalar, int component) { if (component == { return texture2D(,vec2(scalar[], 0)).r; } float computeOpacity(vec4 scalar) { return texture2D(, vec2(scalar.y, 0)).r; }, vec2(scalar.w, 0)).r; }vec4 computeColor(vec4 scalar, float opacity) { vec4 yscalar = texture3D(in_transfer2DYAxis, g_dataPos); yscalar.r = yscalar.r * in_transfer2DYAxis_scale.r + in_transfer2DYAxis_bias.r; yscalar = vec4(yscalar.r); vec4 color = texture2D(, vec2(scalar.w, yscalar.w)); return computeLighting(color, 0, 0); } vec4 computeColor(vec4 scalar, float opacity) { return vec4(0, 0, 0, 0) } vec4 computeColor(vec4 scalar, float opacity) { vec4 color = texture2D(, vec2(scalar.w, g_gradients_0[0].w)); return computeLighting(color, 0, 0); } vec4 computeColor(vec4 scalar, float opacity, int component) { if (component == ) { vec4 color = texture2D(, vec2(scalar[], g_gradients_0[].w)); return computeLighting(color, , 0.0); } , vec2(scalar.x, g_gradients_0[0].w)); return computeLighting(color, 0, 0.0); } vec4 computeColor(vec4 scalar, float opacity) { return computeLighting(vec4(scalar.xyz, opacity), 0, 0.0); } uniform sampler3D in_transfer2DYAxis; uniform vec4 in_transfer2DYAxis_scale; uniform vec4 in_transfer2DYAxis_bias; float computeOpacity(vec4 scalar, int component) { ].w)).a; } ], yscalar[])).a; } float computeOpacity(vec4 scalar) { return texture2D(, vec2(scalar.y, g_gradients_0[0].w)).a; } , vec2(scalar.y, yscalar.y)).a; } , vec2(scalar.a, g_gradients_0[0].w)).a; } float computeOpacity(vec4 scalar) { vec4 yscalar = texture3D(in_transfer2DYAxis, g_dataPos); yscalar.r = yscalar.r * in_transfer2DYAxis_scale.r + in_transfer2DYAxis_bias.r; yscalar = vec4(yscalar.r); return texture2D(, vec2(scalar.a, yscalar.w)).a; } float volumeShadow(vec3 sample_position, vec3 light_pos_dir, float is_Pos, in int c, in sampler3D volume, in sampler2D opacityTF, in sampler2D gradTF, int index, float label) float shadow = 1.0; vec3 direction = vec3(0.0); vec3 norm_dir = vec3(0.0); float maxdist = 0.0; float scalar; vec4 gradient; float opacity = 0.0; vec3 color; Ray ray; Hit hit; float sampled_dist = 0.0; vec3 sampled_point = vec3(0.0); // direction is light_pos_dir when light is directional // and light_pos_dir - sample_position when positional direction = light_pos_dir - is_Pos * sample_position; norm_dir = normalize(direction); // introduce little offset to avoid sampling shadows at the exact // sample position sample_position += g_lengthStep * norm_dir; direction = light_pos_dir - is_Pos * sample_position; ray.origin = sample_position; ray.dir = norm_dir; safe_0_vector(ray); ray.invDir = 1.0/ray.dir; if(!BBoxIntersect(vec3(0.0), vec3(1.0), ray, hit)) { // it can happen around the bounding box return 1.0; } if(hit.tmax < g_lengthStep) { // if we're too close to the bounding box return 1.0; } // in case of directional light, we want direction not to be normalized but to go // all the way to the bbox direction *= pow(hit.tmax / length(direction), 1.0 - is_Pos); maxdist = min(hit.tmax, length(direction)); maxdist = min(in_giReach, maxdist); if(maxdist < EPSILON) return 1.0; scalar = texture3D(volume, sampled_point)[c]; scalar = scalar * in_volume_scale[index][c] + in_volume_bias[index][c]; sampled_point float current_dist = 0.0; float current_step = g_lengthStep; float clamped_step = 0.0; while(current_dist < maxdist) { clamped_step = min(maxdist - current_dist, current_step); sampled_dist = current_dist + clamped_step * g_jitterValue; sampled_point = sample_position + sampled_dist * norm_dir; shadow *= 1.0 - opacity; current_dist += current_step; } return shadow; } bool l_firstValue; vec4 l_maxValue; bool l_firstValue; vec4 l_minValue; uvec4 l_numSamples; vec4 l_avgValue; vec4 l_sumValue; int l_initialIndex = 0; float l_normValues[NUMBER_OF_CONTOURS + 2]; // We get data between 0.0 - 1.0 range l_firstValue = true; l_maxValue = vec4(0.0); //We get data between 0.0 - 1.0 range l_firstValue = true; l_minValue = vec4(1.0); //We get data between 0.0 - 1.0 range l_avgValue = vec4(0.0); // Keep track of number of samples l_numSamples = uvec4(0); //We get data between 0.0 - 1.0 range l_sumValue = vec4(0.0); #if NUMBER_OF_CONTOURS l_normValues[0] = -1e20; //-infinity l_normValues[NUMBER_OF_CONTOURS+1] = +1e20; //+infinity for (int i = 0; i < NUMBER_OF_CONTOURS; i++) { l_normValues[i+1] = (in_isosurfacesValues[i] - in_scalarsRange[0].x) / (in_scalarsRange[0].y - in_scalarsRange[0].x); } #endif vec4 g_gradients_0[0] = computeGradient(g_dataPos, 0, in_volume[0], 0); for (int comp = 0; comp < in_noOfComponents; comp++) { g_gradients_0[comp] = computeGradient(g_dataPos, comp, in_volume[0], 0); } if (!g_skip) { vec3 texPos; texPos = (in_cellToPoint[] * in_inverseTextureDatasetMatrix[] * in_inverseVolumeMatrix[] * in_volumeMatrix[0] * in_textureDatasetMatrix[0] * vec4(g_dataPos.xyz, 1.0)).xyz; if ((all(lessThanEqual(texPos, vec3(1.0))) && all(greaterThanEqual(texPos, vec3(0.0))))) { vec4 scalar = texture3D(in_volume[], texPos); scalar = scalar * in_volume_scale[] + in_volume_bias[]; scalar = vec4(scalar.r); g_srcColor = vec4(0.0); , g_srcColor.a = computeOpacity(scalar,); if (g_srcColor.a > 0.0) { g_srcColor = computeColor(texPos, scalar, g_srcColor.a, in_volume[ [0] = computeGradient(texPos, 0, ); if ([0].w >= 0.0) { g_srcColor.a *= computeGradientOpacity([0], ); } ); g_srcColor = texture2D(, vec2(scalar.r, [0].w)); if (g_srcColor.a > 0.0) { g_srcColor.rgb *= g_srcColor.a; g_fragColor = (1.0f - g_fragColor.a) * g_srcColor + g_fragColor; } } } if (!g_skip) { vec4 scalar; // Compute IJK vertex position for current sample in the rectilinear grid vec4 dataPosWorld = in_volumeMatrix[0] * in_textureDatasetMatrix[0] * vec4(g_dataPos, 1.0); dataPosWorld = dataPosWorld / dataPosWorld.w; dataPosWorld.w = 1.0; ivec3 ijk = ivec3(0); vec3 ijkTexCoord = vec3(0.0); vec3 pCoords = vec3(0.0); vec3 xPrev, xNext, tmp; int sz = textureSize(in_coordTexs, 0); vec4 dataPosWorldScaled = dataPosWorld * vec4(in_coordsScale, 1.0) + vec4(in_coordsBias, 1.0); for (int j = 0; j < 3; ++j) { xPrev = texture1D(in_coordTexs, 0.0).xyz; xNext = texture1D(in_coordTexs, (in_coordTexSizes[j] - 1) / sz).xyz; if (xNext[j] < xPrev[j]) { tmp = xNext; xNext = xPrev; xPrev = tmp; } for (int i = 0; i < int(in_coordTexSizes[j]); i++) { xNext = texture1D(in_coordTexs, (i + 0.5) / sz).xyz; if (dataPosWorldScaled[j] >= xPrev[j] && dataPosWorldScaled[j] < xNext[j]) { ijk[j] = i - 1; pCoords[j] = (dataPosWorldScaled[j] - xPrev[j]) / (xNext[j] - xPrev[j]); break; } else if (dataPosWorldScaled[j] == xNext[j]) { ijk[j] = i - 1; pCoords[j] = 1.0; break; } xPrev = xNext; } ijkTexCoord[j] = (ijk[j] + pCoords[j]) / in_coordTexSizes[j]; } scalar = texture3D(in_volume[0], sign(in_cellSpacing[0]) * ijkTexCoord); scalar = texture3D(in_volume[0], g_dataPos); scalar.r = scalar.r * in_volume_scale[0].r + in_volume_bias[0].r; scalar = vec4(scalar.r); scalar = scalar * in_volume_scale[0] + in_volume_bias[0]; if (l_maxValue.w < scalar.w || l_firstValue) { l_maxValue = scalar; } if (l_firstValue) { l_firstValue = false; } for (int i = 0; i < in_noOfComponents; ++i) { if (l_maxValue[i] < scalar[i] || l_firstValue) { l_maxValue[i] = scalar[i]; } } if (l_firstValue) { l_firstValue = false; } if (l_maxValue.w < scalar.x || l_firstValue) { l_maxValue.w = scalar.x; } if (l_firstValue) { l_firstValue = false; } if (l_minValue.w > scalar.w || l_firstValue) { l_minValue = scalar; } if (l_firstValue) { l_firstValue = false; } for (int i = 0; i < in_noOfComponents; ++i) { if (l_minValue[i] < scalar[i] || l_firstValue) { l_minValue[i] = scalar[i]; } } if (l_firstValue) { l_firstValue = false; } if (l_minValue.w > scalar.x || l_firstValue) { l_minValue.w = scalar.x; } if (l_firstValue) { l_firstValue = false; } for (int i = 0; i < in_noOfComponents; ++i) { // Get the intensity in volume scalar range float intensity = in_scalarsRange[i][0] + (in_scalarsRange[i][1] - in_scalarsRange[i][0]) * scalar[i]; if (in_averageIPRange.x <= intensity && intensity <= in_averageIPRange.y) { l_avgValue[i] += computeOpacity(scalar, i) * scalar[i]; ++l_numSamples[i]; } } // Get the intensity in volume scalar range float intensity = in_scalarsRange[0][0] + (in_scalarsRange[0][1] - in_scalarsRange[0][0]) * scalar.x; if (in_averageIPRange.x <= intensity && intensity <= in_averageIPRange.y) { l_avgValue.x += computeOpacity(scalar) * scalar.x; ++l_numSamples.x; } for (int i = 0; i < in_noOfComponents; ++i) { float opacity = computeOpacity(scalar, i); l_sumValue[i] = l_sumValue[i] + opacity * scalar[i]; } float opacity = computeOpacity(scalar); l_sumValue.x = l_sumValue.x + opacity * scalar.x; #if NUMBER_OF_CONTOURS int maxComp = 0; for (int i = 1; i < in_noOfComponents; ++i) { if (in_componentWeight[i] > in_componentWeight[maxComp]) maxComp = i; }, maxComp if (g_currentT == 0) { l_initialIndex = findIsoSurfaceIndex(scalar[maxComp], l_normValues); } else { float s; bool shade = false; l_initialIndex = clamp(l_initialIndex, 0, NUMBER_OF_CONTOURS); if (scalar[maxComp] < l_normValues[l_initialIndex]) { s = l_normValues[l_initialIndex]; l_initialIndex--; shade = true; } if (scalar[maxComp] > l_normValues[l_initialIndex+1]) { s = l_normValues[l_initialIndex+1]; l_initialIndex++; shade = true; } if (shade == true) { vec4 vs = vec4(s); g_srcColor.a = computeOpacity(vs ); g_srcColor = computeColor(vs, g_srcColor.a ); g_srcColor.rgb *= g_srcColor.a; g_fragColor = (1.0f - g_fragColor.a) * g_srcColor + g_fragColor; } } #endif // test if the intersection is inside the volume bounds if (any(greaterThan(g_dataPos, vec3(1.0))) || any(lessThan(g_dataPos, vec3(0.0)))) { discard; } float opacity = computeOpacity(scalar); g_fragColor = computeColor(scalar, opacity); g_fragColor.rgb *= opacity; g_exit = true; vec4 color[4]; vec4 tmp = vec4(0.0); float totalAlpha = 0.0; for (int i = 0; i < in_noOfComponents; ++i) { // Data fetching from the red channel of volume texture float opacity = computeOpacity(scalar, i); if (opacity > 0.0) { g_srcColor.a = opacity; } } // Data fetching from the red channel of volume texture color[i][3] = computeOpacity(scalar, i); color[i] = computeColor(scalar, color[i][3], i); totalAlpha += color[i][3] * in_componentWeight[i]; } if (totalAlpha > 0.0) { for (int i = 0; i < in_noOfComponents; ++i) { // Only let visible components contribute to the final color if (in_componentWeight[i] <= 0) continue; tmp.x += color[i].x * color[i].w * in_componentWeight[i]; tmp.y += color[i].y * color[i].w * in_componentWeight[i]; tmp.z += color[i].z * color[i].w * in_componentWeight[i]; tmp.w += ((color[i].w * color[i].w)/totalAlpha); } } g_fragColor = (1.0f - g_fragColor.a) * tmp + g_fragColor; g_srcColor = vec4(0.0); g_srcColor.a = computeOpacity(scalar); g_srcColor = vec4(0.0); g_srcColor.a = computeOpacity(scalar); if (g_srcColor.a > 0.0) { g_srcColor = computeColor(scalar, g_srcColor.a); // Opacity calculation using compositing: // Here we use front to back compositing scheme whereby // the current sample value is multiplied to the // currently accumulated alpha and then this product // is subtracted from the sample value to get the // alpha from the previous steps. Next, this alpha is // multiplied with the current sample colour // and accumulated to the composited colour. The alpha // value from the previous steps is then accumulated // to the composited colour alpha. g_srcColor.rgb *= g_srcColor.a; g_fragColor = (1.0f - g_fragColor.a) * g_srcColor + g_fragColor; } } // Special coloring mode which renders the Prop Id in fragments that // have accumulated certain level of opacity. Used during the selection // pass vtkHardwareSelection::ACTOR_PASS. if (g_fragColor.a > 3.0/ 255.0) { gl_FragData[0] = vec4(in_propId, 1.0); } else { gl_FragData[0] = vec4(0.0); } return; // Special coloring mode which renders the voxel index in fragments that // have accumulated certain level of opacity. Used during the selection // pass vtkHardwareSelection::ID_LOW24. if (g_fragColor.a > 3.0/ 255.0) { uvec3 volumeDim = uvec3(in_textureExtentsMax - in_textureExtentsMin); uvec3 voxelCoords = uvec3(volumeDim * g_dataPos); // vtkHardwareSelector assumes index 0 to be empty space, so add uint(1). uint idx = volumeDim.x * volumeDim.y * voxelCoords.z + volumeDim.x * voxelCoords.y + voxelCoords.x + uint(1); gl_FragData[0] = vec4(float(idx % uint(256)) / 255.0, float((idx / uint(256)) % uint(256)) / 255.0, float((idx / uint(65536)) % uint(256)) / 255.0, 1.0); } else { gl_FragData[0] = vec4(0.0); } return; // Special coloring mode which renders the voxel index in fragments that // have accumulated certain level of opacity. Used during the selection // pass vtkHardwareSelection::ID_MID24. if (g_fragColor.a > 3.0/ 255.0) { uvec3 volumeDim = uvec3(in_textureExtentsMax - in_textureExtentsMin); uvec3 voxelCoords = uvec3(volumeDim * g_dataPos); // vtkHardwareSelector assumes index 0 to be empty space, so add uint(1). uint idx = volumeDim.x * volumeDim.y * voxelCoords.z + volumeDim.x * voxelCoords.y + voxelCoords.x + uint(1); idx = ((idx & 0xff000000) >> 24); gl_FragData[0] = vec4(float(idx % uint(256)) / 255.0, float((idx / uint(256)) % uint(256)) / 255.0, float(idx / uint(65536)) / 255.0, 1.0); } else { gl_FragData[0] = vec4(0.0); } return; g_srcColor = vec4(0); for (int i = 0; i < in_noOfComponents; ++i) { vec4 tmp = computeColor(l_maxValue, computeOpacity(l_maxValue, i), i); g_srcColor[0] += tmp[0] * tmp[3] * in_componentWeight[i]; g_srcColor[1] += tmp[1] * tmp[3] * in_componentWeight[i]; g_srcColor[2] += tmp[2] * tmp[3] * in_componentWeight[i]; g_srcColor[3] += tmp[3] * in_componentWeight[i]; } g_fragColor = g_srcColor; g_srcColor = computeColor(l_maxValue, computeOpacity(l_maxValue)); g_fragColor.rgb = g_srcColor.rgb * g_srcColor.a; g_fragColor.a = g_srcColor.a; g_srcColor = vec4(0); for (int i = 0; i < in_noOfComponents; ++i) { vec4 tmp = computeColor(l_minValue, computeOpacity(l_minValue, i), i); g_srcColor[0] += tmp[0] * tmp[3] * in_componentWeight[i]; g_srcColor[1] += tmp[1] * tmp[3] * in_componentWeight[i]; g_srcColor[2] += tmp[2] * tmp[3] * in_componentWeight[i]; g_srcColor[2] += tmp[3] * tmp[3] * in_componentWeight[i]; } g_fragColor = g_srcColor; g_srcColor = computeColor(l_minValue, computeOpacity(l_minValue)); g_fragColor.rgb = g_srcColor.rgb * g_srcColor.a; g_fragColor.a = g_srcColor.a; for (int i = 0; i < in_noOfComponents; ++i) { if (l_numSamples[i] == uint(0)) { continue; } l_avgValue[i] = l_avgValue[i] * in_componentWeight[i] / l_numSamples[i]; if (i > 0) { l_avgValue[0] += l_avgValue[i]; } } l_avgValue[0] = clamp(l_avgValue[0], 0.0, 1.0); g_fragColor = vec4(vec3(l_avgValue[0]), 1.0); if (l_numSamples.x == uint(0)) { discard; } else { l_avgValue.x /= l_numSamples.x; l_avgValue.x = clamp(l_avgValue.x, 0.0, 1.0); g_fragColor = vec4(vec3(l_avgValue.x), 1.0); } l_sumValue.x *= in_componentWeight.x; for (int i = 1; i < in_noOfComponents; ++i) { l_sumValue.x += l_sumValue[i] * in_componentWeight[i]; } l_sumValue.x = clamp(l_sumValue.x, 0.0, 1.0); g_fragColor = vec4(vec3(l_sumValue.x), 1.0); l_sumValue.x = clamp(l_sumValue.x, 0.0, 1.0); g_fragColor = vec4(vec3(l_sumValue.x), 1.0); const float g_opacityThreshold = 1.0 - 1.0 / 255.0; uniform vec3 in_propId; // Flag to indicate if the raymarch loop should terminate bool stop = false; g_terminatePointMax = 0.0; vec4 l_depthValue = texture2D(in_depthSampler, fragTexCoord); // Depth test if(gl_FragCoord.z >= l_depthValue.x) { discard; } // color buffer or max scalar buffer have a reduced size. fragTexCoord = (gl_FragCoord.xy - in_windowLowerLeftCorner) * in_inverseOriginalWindowSize; // Intersection with plane float t = intersectRayPlane(ip_vertexPos, rayDir); vec4 intersection = vec4(ip_vertexPos + t * rayDir, 1.0); g_intersection = (in_inverseTextureDatasetMatrix[0] * intersection).xyz; vec4 intersDC = in_projectionMatrix * in_modelViewMatrix * in_volumeMatrix[0] * intersection; intersDC.xyz /= intersDC.w; vec4 intersWin = NDCToWindow(intersDC.x, intersDC.y, intersDC.z); if(intersWin.z >= l_depthValue.x) { discard; } : (nullptr): Implicit function type is not supported by this mapper. // Compute max number of iterations it will take before we hit // the termination point // Abscissa of the point on the depth buffer along the ray. // point in texture coordinates vec4 rayTermination = WindowToNDC(gl_FragCoord.x, gl_FragCoord.y, l_depthValue.x); // From normalized device coordinates to eye coordinates. // in_projectionMatrix is inversed because of way VT // From eye coordinates to texture coordinates rayTermination = ip_inverseTextureDataAdjusted * in_inverseVolumeMatrix[0] * in_inverseModelViewMatrix * in_inverseProjectionMatrix * rayTermination; g_rayTermination = rayTermination.xyz / rayTermination.w; // Setup the current segment: g_dataPos = g_rayOrigin; g_terminatePos = g_rayTermination; g_terminatePointMax = length(g_terminatePos.xyz - g_dataPos.xyz) / length(g_dirStep); g_currentT = 0.0; if(any(greaterThan(max(g_dirStep, vec3(0.0))*(g_dataPos - in_texMax[0]),vec3(0.0))) || any(greaterThan(min(g_dirStep, vec3(0.0))*(g_dataPos - in_texMin[0]),vec3(0.0)))) { break; } // Early ray termination // if the currently composited colour alpha is already fully saturated // we terminated the loop or if we have hit an obstacle in the // direction of they ray (using depth buffer) we terminate as well. if((g_fragColor.a > g_opacityThreshold) || g_currentT >= g_terminatePointMax) { break; } ++g_currentT; uniform float in_croppingPlanes[6]; uniform int in_croppingFlags [32]; float croppingPlanesTexture[6]; // X: axis = 0, Y: axis = 1, Z: axis = 2 // cp Cropping plane bounds (minX, maxX, minY, maxY, minZ, maxZ) int computeRegionCoord(float cp[6], vec3 pos, int axis) { int cpmin = axis * 2; int cpmax = cpmin + 1; if (pos[axis] < cp[cpmin]) { return 1; } else if (pos[axis] >= cp[cpmin] && pos[axis] < cp[cpmax]) { return 2; } else if (pos[axis] >= cp[cpmax]) { return 3; } return 0; } int computeRegion(float cp[6], vec3 pos) { return (computeRegionCoord(cp, pos, 0) + (computeRegionCoord(cp, pos, 1) - 1) * 3 + (computeRegionCoord(cp, pos, 2) - 1) * 9); } // Convert cropping region to texture space mat4 datasetToTextureMat = in_inverseTextureDatasetMatrix[0]; vec4 tempCrop = vec4(in_croppingPlanes[0], 0.0, 0.0, 1.0); tempCrop = datasetToTextureMat * tempCrop; if (tempCrop[3] != 0.0) { tempCrop[0] /= tempCrop[3]; } croppingPlanesTexture[0] = tempCrop[0]; tempCrop = vec4(in_croppingPlanes[1], 0.0, 0.0, 1.0); tempCrop = datasetToTextureMat * tempCrop; if (tempCrop[3] != 0.0) { tempCrop[0] /= tempCrop[3]; } croppingPlanesTexture[1] = tempCrop[0]; tempCrop = vec4(0.0, in_croppingPlanes[2], 0.0, 1.0); tempCrop = datasetToTextureMat * tempCrop; if (tempCrop[3] != 0.0) { tempCrop[1] /= tempCrop[3]; } croppingPlanesTexture[2] = tempCrop[1]; tempCrop = vec4(0.0, in_croppingPlanes[3], 0.0, 1.0); tempCrop = datasetToTextureMat * tempCrop; if (tempCrop[3] != 0.0) { tempCrop[1] /= tempCrop[3]; } croppingPlanesTexture[3] = tempCrop[1]; tempCrop = vec4(0.0, 0.0, in_croppingPlanes[4], 1.0); tempCrop = datasetToTextureMat * tempCrop; if (tempCrop[3] != 0.0) { tempCrop[2] /= tempCrop[3]; } croppingPlanesTexture[4] = tempCrop[2]; tempCrop = vec4(0.0, 0.0, in_croppingPlanes[5], 1.0); tempCrop = datasetToTextureMat * tempCrop; if (tempCrop[3] != 0.0) { tempCrop[2] /= tempCrop[3]; } croppingPlanesTexture[5] = tempCrop[2]; // Determine region int regionNo = computeRegion(croppingPlanesTexture, g_dataPos); // Do & operation with cropping flags // Pass the flag that its Ok to sample or not to sample if (in_croppingFlags[regionNo] == 0) { // Skip this voxel g_skip = true; } /// We support only 8 clipping planes for now /// The first value is the size of the data array for clipping /// planes (origin, normal) uniform float in_clippingPlanes[49]; uniform float in_clippedVoxelIntensity; int clip_numPlanes; vec3 clip_rayDirObj; mat4 clip_texToObjMat; mat4 clip_objToTexMat; // Tighten the sample range as needed to account for clip planes. // Arguments are in texture coordinates. // Returns true if the range is at all valid after clipping. If not, // the fragment should be discarded. bool AdjustSampleRangeForClipping(inout vec3 startPosTex, inout vec3 stopPosTex) { vec4 startPosObj = vec4(0.0); { startPosObj = clip_texToObjMat * vec4(startPosTex - g_rayJitter, 1.0); startPosObj = startPosObj / startPosObj.w; startPosObj.w = 1.0; } vec4 stopPosObj = vec4(0.0); { stopPosObj = clip_texToObjMat * vec4(stopPosTex, 1.0); stopPosObj = stopPosObj / stopPosObj.w; stopPosObj.w = 1.0; } for (int i = 0; i < clip_numPlanes; i = i + 6) { vec3 planeOrigin = vec3(in_clippingPlanes[i + 1], in_clippingPlanes[i + 2], in_clippingPlanes[i + 3]); vec3 planeNormal = normalize(vec3(in_clippingPlanes[i + 4], in_clippingPlanes[i + 5], in_clippingPlanes[i + 6])); // Abort if the entire segment is clipped: // (We can do this before adjusting the term point, since it'll // only move further into the clipped area) float startDistance = dot(planeNormal, planeOrigin - startPosObj.xyz); float stopDistance = dot(planeNormal, planeOrigin - stopPosObj.xyz); bool startClipped = startDistance > 0.0; bool stopClipped = stopDistance > 0.0; if (startClipped && stopClipped) { return false; } float rayDotNormal = dot(clip_rayDirObj, planeNormal); bool frontFace = rayDotNormal > 0.0; // Move the start position further from the eye if needed: if (frontFace && // Observing from the clipped side (plane's front face) startDistance > 0.0) // Ray-entry lies on the clipped side. { // Scale the point-plane distance to the ray direction and update the // entry point. float rayScaledDist = startDistance / rayDotNormal; startPosObj = vec4(startPosObj.xyz + rayScaledDist * clip_rayDirObj, 1.0); vec4 newStartPosTex = clip_objToTexMat * vec4(startPosObj.xyz, 1.0); newStartPosTex /= newStartPosTex.w; startPosTex = newStartPosTex.xyz; startPosTex += g_rayJitter; } // Move the end position closer to the eye if needed: if (!frontFace && // Observing from the unclipped side (plane's back face) stopDistance > 0.0) // Ray-entry lies on the unclipped side. { // Scale the point-plane distance to the ray direction and update the // termination point. float rayScaledDist = stopDistance / rayDotNormal; stopPosObj = vec4(stopPosObj.xyz + rayScaledDist * clip_rayDirObj, 1.0); vec4 newStopPosTex = clip_objToTexMat * vec4(stopPosObj.xyz, 1.0); newStopPosTex /= newStopPosTex.w; stopPosTex = newStopPosTex.xyz; } } if (any(greaterThan(startPosTex, in_texMax[0])) || any(lessThan(startPosTex, in_texMin[0]))) { return false; } return true; } vec4 tempClip = in_volumeMatrix[0] * vec4(rayDir, 0.0); if (tempClip.w != 0.0) { tempClip = tempClip/tempClip.w; tempClip.w = 1.0; } clip_rayDirObj = normalize(tempClip.xyz); clip_rayDirObj = normalize(in_projectionDirection); clip_numPlanes = int(in_clippingPlanes[0]); clip_texToObjMat = in_volumeMatrix[0] * in_textureDatasetMatrix[0]; clip_objToTexMat = in_inverseTextureDatasetMatrix[0] * in_inverseVolumeMatrix[0]; // Adjust for clipping. if (!AdjustSampleRangeForClipping(g_rayOrigin, g_rayTermination)) { // entire ray is clipped. discard; } // Update the segment post-clip: g_dataPos = g_rayOrigin; g_terminatePos = g_rayTermination; g_terminatePointMax = length(g_terminatePos.xyz - g_dataPos.xyz) / length(g_dirStep); uniform sampler3D in_mask; vec4 maskValue = texture3D(in_mask, g_dataPos); if(maskValue.r <= 0.0) { g_skip = true; } uniform float in_maskBlendFactor; uniform sampler2D in_labelMapTransfer; uniform float in_mask_scale; uniform float in_mask_bias; uniform int in_labelMapNumLabels; vec4 scalar = texture3D(in_volume[0], g_dataPos); scalar.r = scalar.r * in_volume_scale[0].r + in_volume_bias[0].r; scalar = vec4(scalar.r); scalar = scalar * in_volume_scale[0] + in_volume_bias[0]; if (in_maskBlendFactor == 0.0) { g_srcColor.a = computeOpacity(scalar); if (g_srcColor.a > 0) { g_srcColor = computeColor(scalar, g_srcColor.a); } } else { float opacity = computeOpacity(scalar); // Get the mask value at this same location vec4 maskValue = texture3D(in_mask, g_dataPos); maskValue.r = maskValue.r * in_mask_scale + in_mask_bias; // Quantize the height of the labelmap texture over number of labels if (in_labelMapNumLabels > 0) { maskValue.r = floor(maskValue.r * in_labelMapNumLabels) / in_labelMapNumLabels; } else { maskValue.r = 0.0; } if(maskValue.r == 0.0) { g_srcColor.a = opacity; if (g_srcColor.a > 0) { g_srcColor = computeColor(scalar, g_srcColor.a); } } else { g_srcColor = texture2D(in_labelMapTransfer, vec2(scalar.r, maskValue.r)); if (g_srcColor.a > 0) { g_srcColor = computeLighting(g_srcColor, 0, maskValue.r); } if (in_maskBlendFactor < 1.0) { vec4 color = opacity > 0 ? computeColor(scalar, opacity) : vec4(0); g_srcColor = (1.0 - in_maskBlendFactor) * color + in_maskBlendFactor * g_srcColor; } } }uniform bool in_clampDepthToBackface; vec3 l_opaqueFragPos; bool l_updateDepth; l_opaqueFragPos = vec3(-1.0); if(in_clampDepthToBackface) { l_opaqueFragPos = g_dataPos; } l_updateDepth = true; if(!g_skip && g_srcColor.a > 0.0 && l_updateDepth) { l_opaqueFragPos = g_dataPos; l_updateDepth = false; } if (l_opaqueFragPos == vec3(-1.0)) { gl_FragData[1] = vec4(1.0); } else { vec4 depthValue = in_projectionMatrix * in_modelViewMatrix * in_volumeMatrix[0] * in_textureDatasetMatrix[0] * vec4(l_opaqueFragPos, 1.0); depthValue /= depthValue.w; gl_FragData[1] = vec4(vec3(0.5 * (gl_DepthRange.far - gl_DepthRange.near) * depthValue.z + 0.5 * (gl_DepthRange.far + gl_DepthRange.near)), 1.0); } vec3 l_isoPos = g_dataPos; if(!g_skip && g_srcColor.a > 0.0) { l_isoPos = g_dataPos; g_exit = true; g_skip = true; } vec4 depthValue = in_projectionMatrix * in_modelViewMatrix * in_volumeMatrix[0] * in_textureDatasetMatrix[0] * vec4(l_isoPos, 1.0); gl_FragData[0] = vec4(l_isoPos, 1.0); gl_FragData[1] = vec4(vec3((depthValue.z/depthValue.w) * 0.5 + 0.5), 1.0); initializeRayCast(); castRay(-1.0, -1.0); finalizeRayCast(); gl_FragData[] = texture2D(, texCoord); return; in_ambientin_diffusein_specularin_shininessin_twoSidedLightingin_giReachin_lightAmbientColorin_lightDiffuseColorin_lightSpecularColorin_lightDirectionin_lightAttenuationin_lightPositionin_lightExponentin_lightConeAnglein_vertexPosin_croppingPlanesin_croppingFlagsin_clippingPlanesin_clippedVoxelIntensityin_propIdrenderedTex_Failed to attach ImageSampleFBO!/Volumes/Data/workspace/med-macos-weekly/ExtProjs/VTK/Rendering/VolumeOpenGL2/vtkOpenGLGPUVolumeRayCastMapper.cxx//VTK::FSQ::Decl//VTK::FSQ::ImplFailed to initialize ImageSampleProgram!ReductionFactor: CurrentPass: //VTK::CustomUniforms::Dec//VTK::ComputeClipPos::Impl//VTK::ComputeTextureCoords::Impl//VTK::Base::Dec//VTK::CallWorker::Impl//VTK::Base::Init//VTK::Base::Impl//VTK::Base::Exit//VTK::Termination::Dec//VTK::Terminate::Init//VTK::Terminate::Impl//VTK::Terminate::Exit//VTK::Shading::Dec//VTK::Shading::Init//VTK::Shading::Impl//VTK::Shading::Exit//VTK::ComputeGradient::Dec//VTK::ComputeDensityGradient::Dec//VTK::PhaseFunction::Dec//VTK::ComputeVolumetricShadow::Dec//VTK::Matrices::Init//VTK::ComputeColor::Unif//VTK::GradientCache::Dec//VTK::Transfer2D::Dec//VTK::ComputeOpacity::Dec//VTK::ComputeGradientOpacity1D::Dec//VTK::ComputeColor::Dec//VTK::ComputeLighting::Dec//VTK::ComputeRGBA2DWithGradient::Dec//VTK::PreComputeGradients::Impl//VTK::ComputeRayDirection::Dec//VTK::Cropping::Dec//VTK::Cropping::Init//VTK::Cropping::Impl//VTK::Cropping::Exit//VTK::Clipping::Dec//VTK::Clipping::Init//VTK::Clipping::Impl//VTK::Clipping::Exit//VTK::BinaryMask::Dec//VTK::BinaryMask::Impl//VTK::CompositeMask::Dec//VTK::CompositeMask::Impl//VTK::Picking::Exit//VTK::Picking::Dec//VTK::RenderToImage::Dec//VTK::RenderToImage::Init//VTK::RenderToImage::Impl//VTK::RenderToImage::ExitNUMBER_OF_CONTOURSShader failed to compileCurrent implementation of vtkOpenGLGPUVolumeRayCastMapper does not support MultiVolume where some volumes have a gradient opacity function and some others don't. Rendering of the MultiVolume is disabled.3 dependent components (e.g. RGB) are not supported.Only 2 (LA) and 4 (RGBA) supported.in_depthPassSamplerin_coordTexsin_coordTexSizesin_coordsScalein_coordsBiasin_blankingin_volumeMatrixin_inverseVolumeMatrixin_textureDatasetMatrixin_inverseTextureDatasetMatrixin_textureToEyein_cellToPointin_texMinin_texMaxin_volume_scalein_volume_biasin_scalarsRangein_cellStepin_cellSpacingin_anisotropyin_volumetricScatteringBlendingin_depthSamplerin_noiseSamplerin_noOfComponentsin_sampleDistancein_scalein_biasin_transfer2DYAxisin_transfer2DYAxis_scalein_transfer2DYAxis_biasin_projectionMatrixin_inverseProjectionMatrixin_modelViewMatrixin_inverseModelViewMatrixin_projectionDirectionin_cameraPosin_windowLowerLeftCornerin_inverseOriginalWindowSizein_inverseWindowSizein_maskin_labelMapTransferin_labelMapGradientOpacityin_maskBlendFactorin_mask_scalein_mask_biasin_labelMapNumLabelsin_clampDepthToBackfacein_textureExtentsMinin_textureExtentsMaxin_componentWeightin_averageIPRangein_isosurfacesValuesin_slicePlaneOriginin_slicePlaneNormalvtkOpenGLRenderPass::PreReplaceShaderValues failed for vtkOpenGLRenderPass::PostReplaceShaderValues failed for RenderPass::SetShaderParameters failed for renderpass: vtkGPUVolumeRayCastMappervtkRectilinearGridvtkOpenGLGPUVolumeRayCastMappervtkDataSetvtkOpenGLRenderWindowvtkImageDatavtkOpenGLShaderPropertyvtkOpenGLCameravtkMultiVolumevtkVolumeMappervtkAbstractVolumeMappervtkAbstractMapper3DvtkAbstractMappervtkAlgorithmvtkObjectallocator::allocate(size_t n) 'n' exceeds maximum supported size???31vtkOpenGLGPUVolumeRayCastMapperNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEENSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEENSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE29vtkOpenGLResourceFreeCallbackI31vtkOpenGLGPUVolumeRayCastMapperE36vtkGenericOpenGLResourceFreeCallbackp@@pp@@h@h@ppI!PI!XA Pva XAH&XAXA b XA| %XA(@)g!A)@XA=XA?XAXXAg!Aph XAprXA 0v!vXAiXA4XAܪ0lXAXA8@'XAlpXA4'XAH@XA XA,T XA @O!!0/XA `XADXA` XAܮI!`I!I!X 0f@ A I!p  r!0r!r!0 P ps!!Al   r!0 r! a!A F!p I! I! I!` h I! I!pF!XAPXAaA!AH !AX>!@sAx  caPJXgXRXAp a0  @ XA/0XA 7&AP7bX8XA̳H H!@IA!I 0KXASa`T!T<0UUaV+XZX[X]c! ^cXAص_S XAk m+ nXAt) x!y!pz P~! !j!@*aAp&A$aA4  ЃY!0Ppz AP0' XAh`XAXAXApXAGXA@XA@^XA8XAx0XAԻXA$XA XA XAhUu `XAPPXA@!0I {!A6XA@XAȾ XpKXA%X- Xqap XA"$XA +TXAȿ- `0X1XA5AX 7XA9!X;`XP="= =Y= >>A!AL`> p>> >>> >??  ? 0?P?p?? ??? ? ?@@0@ @@`@ p@ @ @@ @@ @@A  A@`A pAA0AA A AB0BB.C CG`C pCGC C CD0D3pDD D D0DD D E E@E0pEE E EEE0F F 0F @F`FF0FF F FG G'PG`GLGGGGL0H@HPH`HLHHHH'I I'PI`I I ILIIJJ 0J @J PJ `JJ J>J JJK>@K PK`KpK>K KKKL L0LPLpL LL LLLM0M @M`M pMM Ma0O @OPO`OpO0OO O OOP  PaP~a0QaQ4R<@R{S%SA@T[ThXA\VaVa0WaWaPXaXXZXAt \lXAd&Ad&A$d&A4 enaeWae ADl:XApqB!q!r!As5uPv!wG!Aw*xRXA`ySXA<z-X}X_p7aTXAPaA` At@X`<! )!A!@А 3! XA RX,XQ!1X!P%zRx $@IAC C$DhIAC C$l@vAC F$X AC $]AC C$ AC $ OAC C$4AC C$\IAC C$8IAC C$`IAC C,AC J$h AC $,`AC B$TfAC B$|IAC C$( AC $ AC $rAC C$prAC C$DrAC C$l AC $ AC $sAC C$X AC $ P AC $4HAC B$\rAC C$rAC C$FAC C$IAC C$ IAC C$$HIAC C$LphAC B$tIAC C$IAC C$FAC C$AC F$8 AC $< >AC C$d AC $ AC $cAC F,JAC M, gAC M$< AC $dxAC F$ AC $AC ,bAC P$ ( AC $4(AC C$\@)AAC C,h)AC N$h3AC F$3AC C$ H4<AC B$, `4AC E$T 4AC I,| 5+AC M, 8AC P, p:AC M$ AC $!` AC $!HAC $"0AC $D">AC $l"0 AC $"AC $"AC $">AC $ # AC $4#AC $\#AC $#AC $# AC $#AC $#AC $$$AC $L$ AC $t$hAC $$` AC $$HAC $$@AC $%8AC $<%0AC $d%( AC $%AC $% AC $%AC $& AC $,&AC F$T&8 AC $|& AC $&AC $&AC $&0AC $'AC $D' AC $l' AC $'AC $'AC $' AC $ (pAC F$4(~AC F$\(0AC F$(4AC B$(<AC B$({AC A$( %AC B$$)(AAC $L)P[AC $t)AC F$)PAC F$)AC F$)0AC F$*AC F,<*AC J$l*#nAC F$*X#WAC F$*.AC B$*.BFC C$ + /AC G$4+05AC $\+2AC B$+(3!AC B$+4*AC B,+H7-AC J,,H:AC J$4,8<_AC $\,p=7AC F$,CAC ,,DAC J$,F<FC C$-FAC $,-F AC $T-F)AC C$|-GAAC C$-GAC A,-`KAC G$-@L3FC C,$.XMRAC M,T.O,AC J$.PQFC C,.P1AC M$.p}AC C$/S%AC zPLRx 4$[AC P4\ [AC P4 &G[AC P4[[AC J4b [AC P4<\AC M,tgW\AC C4@@3\AC P4H\AC M4 \AC P4L]AC P,^AC C4 _^AC P4(C_AC M4$,_AC P4\X5i_AC P4C4k`AC P4Fl[`AC P4JW`AC P4<8O'S`AC P4t0]`AC M4^'`AC P4m#aAC P48r 3aAC P4T}T aAC P4؋/aAC P4ЎaAC P4aAC P44 aAC P4lcAC K,cAC G,acAC G4dAC M4<HcAC P,t`AcAC C,cAC G,scAC B4@RcAC M4<8cAC P4t/dAC P,&3dAC 4dAC P4 P+eAC P4L ceAC J4 @S eAC P4 HeAC M, /*#fAC F,$ 0&#fAC ,T 0fAC F4 `3zeAC K4 6' eAC M4 ?eAC M4, DeAC M4d J/fAC M4 OCfAC M4 PTG_fAC P4 hmgAC M4D 0r^hAC M4| XvhAC M4 zChAC M4 8~[hAC M4$ hAC P4\ hAC P4 0 hAC P4 ȠoiAC P4P_iAC P,<x{kiAC G4lȮ6giAC M4аGiAC M4ȸK+iAC M4  iAC P4L$kiAC P4TgiAC M4XGiAC P4`CiAC M,,ACiAC C4\xh#iAC M4iAC J4lhAC M, &3iAC ,4 &iAC ,d &hAC 4 hAC K4:hAC M,hAC C,4GhAC C4dRhAC M4ShAC M4)ThAC M, 8,whAC F4<,[hAC K4t77hAC Mq-=0-8-V-Ιr-Y-V-V-V-zq-!q-8-)-Ҕ-Z-K---Z- -V-V-Β- -n -\Y-C-V--{Y-(-ƌV--V-V--5-----߉-׉Z-Y--V-y-@ -&Y--܆-ԆV--? -&Y--f--p-7--&-"--"--~-~-~-~-~-~Z-h~Y-}-{Y-{Y-z-zV-PzV-zs-yY-Ny-Dy--x-x;-mx-dx9=]x-"x%-wL=w-ww-w_-wb-w=wI=wb-w[-wC-vw-vvw-vvw-vvw-vvw-vvw-v{vw-svdvw-\v2vE- vw-v vw-vuw-uuw-uuw-uul-um=sm=ts-gsX-SsT-AsU--s]-sT-rV-rd=re=rX-rR-rV-rR-sr]-VrR-ArZ-,r[-rS-rS-qS-qV-qV-vq-hq-_q-Vq-Mq-Dq-7q-*q-q- qV-p-p-p-p-p-p-p-p-p-tp- p-o-,o-n-jn -/m-m-m-l-l-l-l-l-l-zlu-nlu-blu-Vlu-Jl->l-2l^-&l]-l-lw-lx-ky-k+-k+-k+-k+-k+-k+-k+-k+-k+-~k+-rk+-fk+-Zk+-Ik-;k-3k-+k-#k-k-k- k-j?-j)-j=j8-jV-j=j=yj-mj-i-i-iV-i-iV-wiV-KiV- i-hV-hV-zhV-bhV-JhV-2hV-hV-hV-gV-gV-gV-gV-gV-gg*-g-f-f-f-eV-e-eV-geV-e-d-d-zd-qd?-hd)-[d=Td8-KdV- d-d-d-c-c-c-[c-Rc-JcV--c-bV-bV-b-b-ub-Jb-#bV-bV-aV-aV-aV-aV-{aV-_aV-CaV-'aV- aV-`V-`V-_-^-^-^-^Z-t^-h^-\^f-L^-|]-m]-V]6-J]6->]6-2]6-]-]-\=\7-\=m\=-K\=\-Z-Z-Z-WZ-XV-X?-X/-X=X8-XV-X=hX=CXV-1X?-)X/-X=X8-XV-W=W=WV-W?-W/-W=W8-WV-lW=@W=W?- W/-W=V8-VV-V=V=V?-yV/-mV=fV8-^VV-;V=V=V^-U]-,U- U-8RV-*R8-"RV- R=Q8-QV-Q=QV-Q?-Q)-Q=Q8-QV-jQ=HQ=*QV-Q?-Q)-Q=P8-PV-P=P=P?-P)-P={P8-sPV-ZP=8P=NX-Mx-MU-Mw-MKKXKKJJIIIIHH|HpHHH8HGGGG|GpG@@?-K>-C>V-0>B-(>q->Y-=j-=-=w-==w-==w-==== -2=6-='-=?-<F-<A-<@-`<-8<-+<;-;-; -;6-};E-e;?-S;F->;:-;A-:@-:-g:-D:-8:-:-99-9-9V-S9V-@9-;9-19-)9- 9-8V-8-8r-888Y-8-8-8-88V-q8-l8b8-F8-:8-8H-7-7-7M-7-7J-7-v7-f76-6}-6-6-m6-+6}-"6-6}-5-5V-5-5l-p5m=i5o-^5W5o-L554V-4r-44:-4h-4-n4Z-W4Y-4g-4-3t-33w-33u- 32u-22p-212'-#2+- 2m=1n-11m-11m-w1c1m-[1G1n-=161-)1-1n-11-0-0n-00-0-X0l-=0m=60t-&0//t-///t-y/T/u-C//u-..x-..x-.l.7-L.8-3.x-+..x-.-7--8--m=n--f--Z-l-S-q-K-<-q-4--m= ---q-,,q-,,-,-,,n-,,-q,-Y,n-A,-,m=,m-, ,+m-+++m-++n-++n-++-w+n-m+f+-C+m=+-+?-*/-*8-*V-*V-f*l-F*m=?*m-7*0**m-*)-))u-))u-)|)t-n)`)w-V)H)w-7)(?-(/-(8-(V-P(-''V-&n-&-&-&-&&+-&-&<&7- &=%=-%=%-t%=b%=P%=A%=$-w$-*$-#-~#-!#--#m="-"-"-"-"-y"-@"-8"-0"-("- "l-"m=!u-!!u-!!{-!p!{-f!U!{-K!:!{-0!!{-!!{- :-7-e:-7-8-:--n-v-Mv-C-v-# u-n--s8---u8-a-K8--9-8-V8-|OrOZ6-Q6-B6-96-%--v-)---B--m=J--&-5-h--p-Y-n- -----%-g-^-H}-;-n- ---W-~7-e-/-;-%-g--i-h-ng-f-\-Q-----ZL-6N-&- H- - H- -| M-q -` J-U -6 M-+ - J- - - -m o-h 3-P -G -% - - !- 1- - n-  7-[ 7 - - 4- -R ;- ;- - L- y ;-n C-` 9-P -B )-" -  c-.-tj\C#9p-#-g--p^ -0-(-;---3-\-8-/-"--2-2-B0---V--V----c-RV-C-2r-% Y-----+V-->----{-n-a-E-----s-b-VV- -V-----V--r-tfY-\-TM-6------u-#---}-E-<------}-d--O-;-3--K-CV-;-2--w-G---F-,)--cYK3p-h-[-CV-+--V--s-f-S;--V------V--{r-n`OY-E-<5V- -----2V-#--Y-Ol-: -!-Y-V---iY-l- --Y--FY-Z---F-W--<-Y-y -i -\-Y- - -->Y- - --xV-cV-NV-@-- V-V-sV-UV-.--Y-W-C-Y--~-3Y-V------nV-_-Nr-I6(Y----------V--nr-iVHY->-3-(-#-V-----XV-E-@6- --H---oM-c-VJ-J-+ --Y-[ -C-Y- -~-3Y--?-)-=8-vV-+V-V-d-?-)-=8-V-{V-lV-Zk-B--Y-5+-'g--=7-==-d=:U-/]-$\-_-`-[-^-f-Y-g-d-Y--y-B-V-V--kV-\V-Mk-1r-$ Y-Y-V-V-k-r-wiY-<1Y-'V-V- k-r-Y-Y-V-vV-gk-Nr-A6(Y-Y--vY--V-V--gV-XV-Ik--r- Y-V-V-k-tiY-/k-r-Y-k-r-qY- -Y- -V- V--V-V-k-s-Y- V-V-k-r-Y-3(Y-V-V-k-r-Y-^SY-IV-:V-+k-Y-b-Y--V-vV-k-2V-#V-k-V-V-k-rV-cV-Tk-?}-V-V-k-r-Y-mV-^V-Kk--Y--"Y-,-$V-V--V-V-k-[V-LV-=k-r-Y-V-V-k-gr-ZOAY- V-V-k-r-Y-gV-XV-Ek--Y-q-Y---ȿ---g-9-1V-"V--UV-5V-V-V-V-V-V-V-k-Ӽr-ƼY-r-Y-o -$Y-V-V-k-ܻ-ncY-YV-JV-;k-&-V-ٺV-ʺk--f[Y-QV-BV-3k--۹йY-ƹV--V-k-y-?-,V-k---/-ҷǷY-V--V-k-p--j_Y-UV-F-3V-$k- --;-(´Y-V--V-yk-`--C8Y-.V-- V-k-ڲ-z--Y-k-}-Y-V-V-k-԰-{-گϯY-¯-YV-FV-ծʮY-V-V-k--;0Y-&V-V-k--Y-V-V-}k-h-*V-V-k--Y-nk-V-Y-V-V-ޫk-ɫ--LV-=V-k--Y-yV-jV-[k-F-=4-+Y-bV-SV-Dk-/-ŨY-V-V-ek-P-Y-§-yY-ۦ-ӦV-ĦV--RV-CV-4k-z-V-V-ץk-¥-jV-[V-Mk-8-k-ܤ{-V-V-k--cV-TV-Ak-ʣ-Y-E-Y--V-ҡV-ǡ-xV-iV-Zk-V- V-k-ޠr-ѠƠY-V-V-rk-]-$V-V-k-vY-YNY-DV-5V-&k-ўƞY--kY-A-Y--V-ϜV-Ĝ-NV-?V-0k-V-V-қk--V-V-wk-b-+V-V-k--V-V-~k-er-XM?Y-Y-V-ݙV-Ιk--sV-dV-Uk-9r-,!Y-ȘY-V-V-k-ur-h]OY- Y-ї-Y-U-Y--V-V-Օ-V-V-wk-b-Y--Y-}V-nV- k--Y--1Y-V-V-k--K@Y--ՑY-Q-IV-/-V---Y--ՏY-_V-L-:r-Y-َx-Ύu=--r-uY-9x--Y-FY---EY-ҋV--r-Y-Mx-Bv=2- -r-Y-x--<Y-Y---Y-$---;-p*-d-P-5-,-- -J-D*K-Nh=+g=d=g=d=>->--+--W-t-d]*-L-?8W-)-V-t-t-ׂC-҂]---v-7---]-6-V-N--z-f-\-T-/-V-߀̀Y-M-Y-]K-UN-6U-%}-}- ^-_---;-U-}-}-^-w_-`-T-.-l~F~R-1~Q-$~Y-~-}-}-}-}-}-,}|-}~-|-|-|-|~-l|-M|-6|-)|a-!|`- |-{-{{zkz}-[z}-Oz}-Cz^-;z_-$z-z- z-y-y-x|x|-\x~-Bx"x-w|-w~-w-}wQ-\w-PwY-?w+w-w-w-v-v-v-v-Vv-?v~--v-u-u-ua-u`-u-u-tuK-Dutt-t-tV-}t-utV-ftV-LtV-At-s-sV-s-s-s-xs-gsV-Xs-Gsr-:s/s!sY-s-ss-sr-r-rV-rV-rV-r}-rr-er-`r-rn-r-qU-q]-qR-qW-Mq-2q-p-qp-Yp-;p-3pV-$pV-pl-o-oV-oV-ol-o-]o-Eo^-*o- o-nn0-nV-nV-mY-m0-rmV-Xm-2lY-k-k-k?-k/-k8-kV-KkV-jV-jV-j-jV-5j0-.j0-'j-j- jl-im=iJ-i-iV-i-i-i-i-wiV-bi-Kir->i0iiY-i- ii-hh-h-hm=h-h^-h_-dh}-?h-&h-g-g-ga-g`-g-g-gV-tgV-*gV-gV-Wf -8fY-e -eV-4e-/e#e-e,-d7-d=}d=-Fd=1dV-d-b-bY-:b-a|-a~-a-{a-Ua-Fa?-:a/-$a8-`=`=`=`-`-7`W-__m=}_-u_-g_V-^-^-^-^-C^]H-]-]M-]-]Q-]-t]Y-T]-H]-5]-$]`-]-\<-\\J-\-\Q\H-A\-9\M-.\-[l-[m=[4-[-[j-F[-6[-Z4-|Z-'Zm=Zl-Ym=YY2mYe-YXXW-W-pW1WW W-Vm=Vl-Vm=OV)VV-Um=Ul-Um=Up-U?Um=T;-T;-=TJ-2T- TG-TP-SI-SP-S-SV-iS0-bS0-[S0-TS0-MS0-FS0-?S-1S-#S-S-S-R-Rl-Rm=RV-Rm-RRr-tR3RV-Rr-QY-UQV-)Qr-PY-UPV-)Pr-OY-UOV-)Or-NY-ONV-#Nr-MY-_MV-@Mr-MY-KY-QKm=%Kl-Km=Ks-JJZ-Jr-wJIm=_Ii=MIj=Ih=Hg=Hd=Hg=Hd=H-H-zH-rH-hH-H-H-G-G-G-G-IG-G-F-F-F-F-F-F-F-F-Fl-mFm=TFd=IFe=BFn-Ed=Ey-cEUEz-IEDf=Dd=De=Di=Dj=tDh=KDg==Dd=Dg=Dd=C1-C~-{B-sB -IB-:B-.B-B-A-A-Ae=SA-IA->A-,A-'A=-A<-A-@@j@-e@5-F@7-.@:-@?:->> -> ->6->-{>-P> -F=.<.;.:.r:.k:-+9 -90-9-8=-8m=_8-7-7-B7-7-7-6-6l-76m=r35- 35-25-:25-15-t15-15-05-X0 -M0 -,06- 0m=/V-/-/V-/V-/V-s/V-@/V-$/V-/V-.V-.-y--k--]--O--A--3--'-l--V--V-,V-,V-,r-,,r-,,v-,z,v-a,+-+-7+-*Z-*Y-n*Z-H*Y-)Y-A)Y-(m=(V-(V-(V-(V-(v-w(e(v-](K(v-C(1(v-)('-y'"'-'-%-$Y-f$Y-#Y-<#Y-" -"m-"""t-"""k"`""n-"!-!r-!!u-!!u-!{!u-e!A!-!- - -^ m=" ^- \-----{`-g-X-Q`-6-%-|---~- ~---v-\-T-;-----w-n-a-Q-,-(--]--O-?,-%(-------t-i-`-P-5----;-------z-j-A*-9-%-q--V-B-q-Y-?-~/-r=k8-cV-L= =/--V-?-/-8-V-_V--V-V-V-V--sZV-GV-.V-V-V-V-|-*-%-g-b)-$-,-7-=w=-&?-/-8-====C-;V-!V-V--V-V----(B-r-Y-Vr-I>0Y-r-   Y-z o Y-F r-9 .  Y- r-   Y- r-   Y-V r-I > 0 Y- - V- V- - V- V-P -$ r-   Y- V- - r-  Y- - r-v l Y-  Y-u r-h ^ P Y-r-Y-D9Y--V-V-xV-p-Xr-KAY- r-Y-RGY-) -r-Y-r-Y-ur-h^PY-r-Y-Vr-I>0Y--V-V--V-V--mr-`VY-L-CV-4-/-%---V--r-Y--V-}-un-T-C-9V-1-r- Y-V--r-uY-Y-J?Y-r-Y-r-Y-fr-YN@Y-r-Y-r-Y-dr-WL>Y-(r-Y-r-Y-&r-Y-r-~pY-Fr-9. Y--V-V-*V-V-V-V--HV-f-Or-B8Y- -Y-V--r-Y-zV-r-[r-NDY--r-Y--r-{Y-FV->-&r-Y-V-V-V-V-s-#---wV-h-3V-+-r-Y--r-Y--r-vlY--B--V--r-Y-V-}-Y--r-Y--r-tjY-[-Dr-7-Y--r-Y--r-Y-H-1r-$Y--r-Y--r-zpY-:V-2-r-Y--r-Y-V--*Y--r-Y-V--r-Y-L-?-)-=8-V-V-V-E?-9)-)="8-V---T-O;V-,-'--Y------zk+-_-ZK+-?-:+-&---+--|m-F-Y-a-\M+-A-<-- ---yY----aY--V-x-.------6Y-Y-4-/ +--+------+--+-t-o`+-T-O@+-4-/ +--+--r-a=7-==-=q-i?-])-M=F8-:V-?-)-=8-V---uh-WN-==7-==-=Y-Q?-E)-5=.8-"V-?-)-=8-V-g--+----<5=7-==-t=r-Y-r-Y-nr-aVHY-$r- Y-r-Y-fr-YN@Y-Y-RGY-Y-odY--V-V-V-V-V--_V-<V-'V- V-V-V-_V-PV-AV-V-V-l-m=V-V-pV-WV->V-%V-V-V-V-V-m=%---"---U-B;V-&V--V-V-V--J->7-+$-V--wB--}Y-m=-?-)-=8-V-8V-$V-?-)-=8-V--yV-jV-[--B---w-ngB-[L-;--B---W-NGB-;,-Y-[Y-Y-yY-T-C-+--+--~-Y-4-/ +--+----Y--+--ֿY--+--H-7*-=7-=m=-O=- ?-)-=8-޽V-V-}V-V-- ,--ۼ-!--Y--?-)-=8-V-V-V-v-ar-TFY-<-й=ɹ7-==-k=1-)--V-?-)-ݸ8-ѸV-V-V-mV- V-V-V-V-_V-4V- V-޶V-:-2V- V-޵-ֵϵB--SY-%V--شѴB--r-sY-Y--VV-=V-$V- V-V-ٲV-V-V-V-uV-`V- V--)-$߰-y-t/-ɯ-į--Ӯ--QY--B-|k-\+-7-ڬ==-?-{)-k8-K=<==V--iY-*--ƪ--V-֩V--B-|m-Y-r-٨˨Y-a-Y?-M)-==68-*V-V-?-ڧ)-ǧ8-V-c)-V-V-V-VV-FV-!V- V-ץ?-˥)-=8-V-rV-cV-N--ߤؤB-̤--D-;4B-(-Y-EY--V-V-V-V--/-*-ڠ-ˠV--B-l-Y-ԟV-V-V--ʞ-Ş-u-f+-7-=-?-)-8-n=JV-B--r- Y--V-Ԝ-ǜ+---o!-?-ЛY-B-1=ޚ7-==-p=2-*?-)-=8-V-V-V--r,-f-aR-0!--Y-ȗ-×?- )-=8-V---0=)7-==-˕=-?-)-r=k8-_V-$V-V--|,-p-k\-:!- -Y--?-)-=8-}V-G-8- =7-=y=-[=-?- )-=8-V--)-=e?-])-M=F8->V- ---ߏҏ-->-=7-]=?=-=-ۍ?-ύ)-=8-V-vV-d?-X)-H=A8-9V-V-׌V-V->V-)V-V-V-׋V-NV-4V-ÊV-?-)-v=o8-cV--V-V- --B-x-Y---B-}n-Z-Br-5+Y-҇Y-?-)-=8-V-OV-@-V-V-qV-XV-EV-)>- V--V--@-;-΄-->-9--V- -B-كƃ-ZY-V-V-ՂV--<-7--ہ+-V--r-{Y-07-=-h-=7-==-=k-cV-3V-V-~V-~V-~V-~V-w~-}V-}V-}V-}V-s}V-T}V-}-|-||-]|@-#|-||B-{{!-{-i{Y-z-zzV-zV-vzV-czV-JzV-yV-y-Hy-Cyx-xA-x-xxB-xnx!-Ax-wY-vvr-vvY-vovr-bvXvY->v -$v-vV-vV-uV-u-ur-uuY-`uV-Xu-Dur-7u-uY-uV-u-tY-t-tr-ttY-nt-ft]t-Utt-tt-ts-ss-vsV-ns-Vsr-Is?sY-3s-sr-ssY-rer-]rV-GrV-2rV-$r-qV-wqV-cqV-OqV-pV-pV-pV-p-pr-ypopY-epV-]p-Fpr-9p/pY-pV-p-or-ooY-o-or-ooY--o-oV-oV-n-n-nn-nn-nnV-nV-{n-sn[n- n-nmr-mmmY-mV-mV-Qm-Hmm-mlll-ll-xlkl-blTl-Kl?lV-7l-kY-kV-k-mkY-ZkV-Rk-=kr-0k&kY-jV-j-jr-jjY-j-ujr-hj^jY-2jr-jiiiY-ir-iY-ixi i-hr-hhhY-h_h-WhV->h-6h-h-%hh hgV-g-gV-gV-ygV-jgV-\g-4gV-gV-gV-fV-fV-RfV-eV-eV-eV-}eV-ieV->eV-d-da-d d dd dd dd dd dd dxd qdjd cd\d UdNd Gd@d 9d2d +dd`-d cV-cV-cV-c-~c-\cV-Tc-=cr-0c&cY-c-cr-bbY-bV-b-br-bbY-hbV-ObV-GbV-aV-aV-laV-daV-OaV-:aV-%aV-aV-`-`-|`7`-_-_-u_r-p_^_Y-_-^^Y-^V-^V-t^-7^r-^Y-]x-] ]V-P]V->]-\-\r-\\Y-z\-\\Y-[[Y-[ H[r-;[0["[Y-[r-[ZZY-Zr-ZZZY-KY-X-XV-X-XV-lXV-KXV-7XV-(XV-XV-WV-WV-WV-vWV-cWV-.WV-WV-WV-VV-VV-UV-UV-UV-UV-sUV-\UV-TUV-?UV- UV-TV-TV-TV-TV-TTV-7TV-\SV-MSV->SV-/S-R-RRB-RR-RV-}RV-dRV- RY-QV-QV-QV-2Q-QPV-PV-PV-uPV-`PV-KPV-6PV-'PV-PV-O-{O- O-]NONY-N-M-MDM-L-LL-KKY-K-KY-J-JV-JV-JV-}JV-hJV-JJV-5J--J!J-JJV-I-I-FI-HHY-HV-pH- H-HG-GV-GV-GV-sGV-`GV-FFY-FV-|F-(F-FE-E-+E-DDY-DV-yDV-hD-\DV-MD-CD-7D-D-DV-C-Cr-CCCY-C-CC-CC-C-rC-jCcCV-=C-B-BB-3B(BY-B-BAAY-0A%AY-&@-@>->V->->Y->-|>r-A>x-0>x-=-<V-<V-<V-<V-<V-<V-<V-k<V-R<V-9<V- <V-<V-;V-;V-;V-:V-:V-:V-e:V- :V- :V-9V-9V-g9V-L9l->9m=79V-"9V-9V- 9V-8m=8V-{8-r8=8-8-77V-7V-7-z7-q7j7B-^7N7-<7-6-66B-66-6V-6V-r6V-c6V-16-5-55-C5-7505B-!55-4Y-@4Y-3Y-2r-22U2V-B2V-)2V-2V-1V-1V-1V-1V-1V-z1V-a1V-H1V-51V-0-'0-"0/-//--1*+-- +--+--+--+--y-hB0--------sbF-92+-'-+---+--q=j7-E=)=- =?-)-=8-V-~=`=G-??-3)-#=8-V-?-)-=8-V-a-R-E>+-4-' +-- +---+--U=N7-,==-=-r-yn`Y-6r-)Y-\-=-yor\-g=`-XnQ\-F=?-7m0-+\- c=- l   K  J      G  K Q R F 'x (p FX OP PH E0 #( $ E S T G M N G - . G   x p h ` X P H @ 8 0    HK5246x0pVh`3X1PH@0F( KQRF'(FxpXDPHK@R80( nVmOPxph`XPH@80 (  Xxph`XPH@80( xp h `XPH@80( xph`X PdHb@c80( ex+p!hr`#X(P"H)@8}0(   ,./-{|*xp%h$`'X&PqHw@y8z0p(u svxt  xrpsh`?XFPAH@@o8>0D(i kk@0 00/////k/`/@/ //....`.@.8.0.k ...k.--k----`-X-P-k@-8-0-k --,,k,,,,x,p,k`,@, ,,++k+++k+++x+p+k`+X+P+k@+8+0+k +++k+**k****`*@* ***k*))))`)@) ))((((`(@( ((''''`'@' ''&&&&`&@& &&%%%%`%@% %%$$$$`$@$ $$####`#@# ##""""`"@" ""!!!!`!@! !!    ` @   `@ `@ `@ `@ `@ `@ `@ `@ `@ `@ k`@ kk`XPk@80k kxpk`@80k kkkxpk`@ kkkkkxpk`XPk@80k kkkkkxpk`XPk@ `@80k kk`@    k   x p k` X P k@       ` @    k     x p k` @ 8 0 k   k    k   ` X P k@        k ` X P k@    k kk`@ k`@ k`@ k`@ kxpk`XPk@80k kkxpk`XPk@80k kkkkkxpk`@80k kkkkkxpk`XPk@80k kkkk`XPk@ ;/kM  H|G(=BlNKZJxZ tܪ/Y8lx4Hj,2 DQ`ܮP)l9lHX?x,:/YL U̳]wlص}Z>p$4PhEdpV8`xԻ$w=hB@ <Ⱦ |ȿfRLbS\ct)$.4= e >eDzwL<PP`%thΖpZXqZrZZV>1 ?[?>`>#>;+>%?%{p>/?">Ip?pIP??ZoXLs9H9p?>QA"BAJzAK1A}@%Aj)ADw0DpA0`AC C A)B0BaC!D9 CԣCƚpCx`C`$D'pD??͡q!6r?E@=l5p0^Аw4p@U/`@10@l}@0@8}@@x@E@|@0@Ϟu?n#Oq1O}pO-J{`JPJF@FF0FLvFyE!Gu"`F0L:#0L}K.0M!0JN2PGs|M J G&O1*OyPIJh I3E0?J IIÄH_`IJ0I?L2GT`G#L?3L-pL 0O%$F'F% F/)F~L{PLMm.`M6|@M}`K$Jk(JKE..M{pM" ED%I(IwD2H2PH`HφG&Gg*G K܅pK^%PK(@KuE !E"Eoz@E$D#(D'H*Hg'@H*0H &K)KW&E)pE@O ,d@09d`OSO F`PO0PUOTR0UVPN-Rn0QNpzz5Q[~P`TxSM X90KN`{@AI_PpQ@IHPyTYp=MX;f8*QtTRVc`0N)S_P7?Zn-e +U" Y y1=s@ ʕ]g0 P~  ^M xO \5epEP=xPR-P-07rmL70@Jqlpno00p%n@vm@HЃu N<l` 7=ePv;=@_@ORG?47@:@'85G? 79 9d{9d8dhƐÎ}z040= ` .p@i0P p zf Dd@)Bvpk 0C@^ `hw ڍAh`*kg؊ P@\P,  %ph\8@pg " X >>?Ӊ[Pp0r0v-0mprj0  WgXM~) >?>=Yzb@pAa@RuTx@T SCRf=Q`yC0W=BP+<PZxE  $ߴ}@` iq[k[mۃ# ( W x 4 S `a^ = e < 8 S ]  $ f  `  S  P [ xBWw<V4CPX<VCB0Q; PAЂ݇Hu $ n p:5ctPuYvdVtLI9}ED7Ig!HzxZDv#UƱi fvU/wiVK{L,; @tt(!ޙۛu4x{} d@8F_^76n j,?u8!zg?8AzIKzdx'DUU0wrٝuuW 4 ,2\D"vDi<@V>EuF7_5'^dHri aX``{ xb3jT z3,+D +?8A?Q8 c #wjBj ["3 OR///M4i7KWVќ2B;7A0;6\_wZ)A:n65ѹY Y]]]4|768  a>6y[^ S%'M|M@C:Ae;_A:@:  EZVTTGTȇYT-zJ1JhJJ ]@XJ T G"LKJTV__ZN31vtkOpenGLGPUVolumeRayCastMapper11DoGPURenderEP11vtkRendererP15vtkOpenGLCameraP16vtkShaderProgramP23vtkOpenGLShaderProperty__ZN31vtkOpenGLGPUVolumeRayCastMapper27ReplaceShaderCustomUniformsERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP23vtkOpenGLShaderProperty__ZN31vtkOpenGLGPUVolumeRayCastMapper17GetShaderTemplateERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP23vtkOpenGLShaderProperty__ZN31vtkOpenGLGPUVolumeRayCastMapper17IsRenderSupportedEP15vtkRenderWindowP17vtkVolumeProperty__ZN9vtkvolume20ComputeColorUniformsERNSt3__13mapIi20vtkVolumeInputHelperNS0_4lessIiEENS0_9allocatorINS0_4pairIKiS2_EEEEEEiP17vtkVolumeProperty__ZN16vtkVolumeTexture12UpdateVolumeEP17vtkVolumeProperty_memcpy__ZN14vtkInformation3HasEP33vtkInformationObjectBaseVectorKey__ZN14vtkInformation6LengthEP33vtkInformationObjectBaseVectorKey__ZN14vtkInformation3GetEP24vtkInformationIntegerKey__ZN14vtkInformation3HasEP24vtkInformationIntegerKey___glewBindVertexArray__ZN11vtkPolyData8SetPolysEP12vtkCellArray__ZNK31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal16GetComponentModeEP17vtkVolumePropertyP12vtkDataArray__GLOBAL__sub_I_vtkOpenGLGPUVolumeRayCastMapper.cxxl___const._ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal19BindTransformationsEP16vtkShaderProgramP12vtkMatrix4x4.defaultTexMax__ZN25vtkGPUVolumeRayCastMapper19SetMaxMemoryInBytesEx__ZN9vtkIdList14SetNumberOfIdsEx__ZN23vtkAOSDataArrayTemplateIxE10GetPointerEx__ZN23vtkAOSDataArrayTemplateIiE10GetPointerEx___cxa_throw_pow__ZN26vtkOpenGLFramebufferObject10SetContextEP15vtkRenderWindow__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal33LoadRequireDepthTextureExtensionsEP15vtkRenderWindow__ZN16vtkTextureObject10SetContextEP21vtkOpenGLRenderWindow__ZN29vtkOpenGLResourceFreeCallbackI31vtkOpenGLGPUVolumeRayCastMapperE25RegisterGraphicsResourcesEP21vtkOpenGLRenderWindow__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal18ClearRemovedInputsEP9vtkWindow__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal33ReleaseDepthPassGraphicsResourcesEP9vtkWindow__ZN31vtkOpenGLGPUVolumeRayCastMapper24ReleaseGraphicsResourcesEP9vtkWindow__ZN20vtkVolumeInputHelper24ReleaseGraphicsResourcesEP9vtkWindow__ZN16vtkVolumeTexture24ReleaseGraphicsResourcesEP9vtkWindow__ZN26vtkOpenGLVolumeLookupTable24ReleaseGraphicsResourcesEP9vtkWindow__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal39ReleaseRenderToTextureGraphicsResourcesEP9vtkWindow__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal35ReleaseImageSampleGraphicsResourcesEP9vtkWindow__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal27ReleaseGraphicsMaskTransferEP9vtkWindow__Z38vtkRenderingOpenGL2_AutoInit_Constructv_glGetIntegerv__ZSt9terminatev__ZN9vtkObject11InvokeEventEmPv__ZdlPv__ZdaPv__ZN18vtkLightCollection12GetNextLightERPv__ZNSt3__18ios_base4initEPv__ZN15vtkVolumeMapper27GetComputeNormalFromOpacityEv__ZN10vtkDataSet18GetPointGhostArrayEv__ZN10vtkDataSet17GetCellGhostArrayEv__ZN25vtkGPUVolumeRayCastMapper23GetTransfer2DYAxisArrayEv__ZN9vtkObject23GetGlobalWarningDisplayEv__ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv__ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5uflowEv__ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9underflowEv__ZN25vtkGPUVolumeRayCastMapper19GetFinalColorWindowEv__ZN19vtkUnsignedIntArray3NewEv__ZN12vtkCellArray3NewEv__ZN26vtkOpenGLVertexArrayObject3NewEv__ZN26vtkOpenGLFramebufferObject3NewEv__ZN16vtkTextureObject3NewEv__ZN9vtkPoints3NewEv__ZN8vtkActor3NewEv__ZN16vtkContourFilter3NewEv__ZN31vtkOpenGLGPUVolumeRayCastMapper3NewEv__ZN17vtkPolyDataMapper3NewEv__ZN9vtkShader3NewEv__ZN18vtkPlaneCollection3NewEv__ZN14vtkInformation3NewEv__ZN16vtkVolumeTexture3NewEv__ZN8vtkPlane3NewEv__ZN18vtkDensifyPolyData3NewEv__ZN21vtkClipConvexPolyData3NewEv__ZN11vtkPolyData3NewEv__ZN12vtkImageData3NewEv__ZN52vtkOpenGLVolumeMaskGradientOpacityTransferFunction2D3NewEv__ZN37vtkOpenGLVolumeMaskTransferFunction2D3NewEv__ZN12vtkMatrix4x43NewEv__ZN17vtkAbstractMapper13GetTimeToDrawEv__ZN26vtkOpenGLFramebufferObject10GetContextEv__ZN12vtkAlgorithm15GetProgressTextEv__ZN20vtkPolyDataAlgorithm9GetOutputEv__ZN23vtkAbstractVolumeMapper15GetDataSetInputEv__ZN25vtkGPUVolumeRayCastMapper8GetInputEv__ZN23vtkAbstractVolumeMapper18GetDataObjectInputEv__ZN25vtkGPUVolumeRayCastMapper12GetMaskInputEv__ZN25vtkGPUVolumeRayCastMapper13GetInputCountEv__ZN8vtkLight24GetTransformedFocalPointEv__ZN12vtkAlgorithm21PropagateUpdateExtentEv__ZN12vtkAlgorithm17UpdateWholeExtentEv__ZN26vtkOpenGLFramebufferObject21RemoveDepthAttachmentEv__ZN16vtkTextureObject14GetTextureUnitEv__ZN26vtkOpenGLVolumeLookupTable14GetTextureUnitEv__ZN21vtkOpenGLRenderWindow19GetNoiseTextureUnitEv__ZN20vtkVolumeInputHelper17ForceTransferInitEv__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal17ForceTransferInitEv__ZN12vtkAlgorithm16GetProgressShiftEv__ZN12vtkAlgorithm16UpdateDataObjectEv__ZN11vtkPolyData8GetPolysEv__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal19DeleteBufferObjectsEv__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal19CreateBufferObjectsEv__ZN25vtkGPUVolumeRayCastMapper17GetReportProgressEv__ZN12vtkAlgorithm11GetProgressEv__ZN31vtkOpenGLGPUVolumeRayCastMapper14GetCurrentPassEv__ZN31vtkOpenGLGPUVolumeRayCastMapper29SetShaderParametersRenderPassEv__ZN25vtkGPUVolumeRayCastMapper15GetUseDepthPassEv__ZN16vtkContourValues19GetNumberOfContoursEv__ZN26vtkOpenGLFramebufferObject21DeactivateDrawBuffersEv__ZN16vtkVolumeTexture16GetLoadedScalarsEv__ZN17vtkOpenGLUniforms15GetDeclarationsEv__ZN13vtkCollection14RemoveAllItemsEv__ZN15vtkVolumeMapper22GetCroppingRegionFlagsEv__ZN25vtkGPUVolumeRayCastMapper25GetDepthPassContourValuesEv__ZN17vtkVolumeProperty19GetIsoSurfaceValuesEv__ZN25vtkGPUVolumeRayCastMapper19GetMaxMemoryInBytesEv__ZN19vtkOpenGLRenderPass12RenderPassesEv__ZN15vtkVolumeMapper23GetCroppingRegionPlanesEv__ZN25vtkGPUVolumeRayCastMapper24ClipCroppingRegionPlanesEv__ZN15vtkVolumeMapper28GetVoxelCroppingRegionPlanesEv__ZN17vtkAbstractMapper17GetClippingPlanesEv__ZN25vtkGPUVolumeRayCastMapper28GetAutoAdjustSampleDistancesEv__ZN23vtkAbstractVolumeMapper9GetBoundsEv__ZN23vtkAbstractVolumeMapper24GetGradientMagnitudeBiasEv__ZN20vtkOStrStreamWrapper3strEv__ZNKSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE3strEv__ZNK12vtkAlgorithm20UsesGarbageCollectorEv__ZN25vtkGPUVolumeRayCastMapper18GetMaskBlendFactorEv__ZNKSt3__121__basic_string_commonILb1EE20__throw_length_errorEv__ZNKSt3__120__vector_base_commonILb1EE20__throw_length_errorEv__ZN9vtkObject12BreakOnErrorEv__ZN12vtkAlgorithm19GetProgressObserverEv__ZN19vtkAbstractMapper3D16IsARayCastMapperEv__ZN19vtkAbstractMapper3D24IsARenderIntoImageMapperEv__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal18DeleteMaskTransferEv__ZN24vtkOpenGLRenderUtilities31GetFullScreenQuadGeometryShaderEv__ZN24vtkOpenGLRenderUtilities29GetFullScreenQuadVertexShaderEv__ZN14vtkInformation5ClearEv__ZN11vtkRenderer19GetTiledAspectRatioEv__ZNK9vtkObject20GetObjectDescriptionEv__ZN8vtkLight22GetTransformedPositionEv__ZN25vtkGPUVolumeRayCastMapper20GetMaxMemoryFractionEv__ZN12vtkAlgorithm14GetInformationEv__ZN12vtkAlgorithm17UpdateInformationEv__ZN15vtkVolumeMapper26ComputeNormalFromOpacityOnEv__ZN25vtkGPUVolumeRayCastMapper14UseDepthPassOnEv__ZN25vtkGPUVolumeRayCastMapper27AutoAdjustSampleDistancesOnEv__ZN9vtkObject7DebugOnEv__ZN25vtkGPUVolumeRayCastMapper14UseJitteringOnEv__ZN15vtkVolumeMapper10CroppingOnEv__ZN25vtkGPUVolumeRayCastMapper34LockSampleDistanceToInputSpacingOnEv__ZN12vtkAlgorithm14AbortExecuteOnEv__ZN25vtkGPUVolumeRayCastMapper15RenderToImageOnEv__ZN25vtkGPUVolumeRayCastMapper9AMRModeOnEv__ZN25vtkGPUVolumeRayCastMapper22ClampDepthToBackfaceOnEv__ZN25vtkGPUVolumeRayCastMapper18GetFinalColorLevelEv__ZNK31vtkOpenGLGPUVolumeRayCastMapper20GetClassNameInternalEv__ZNK31vtkOpenGLGPUVolumeRayCastMapper19NewInstanceInternalEv__ZN16vtkVolumeTexture12GetNextBlockEv__ZN16vtkVolumeTexture15GetCurrentBlockEv__ZN25vtkGPUVolumeRayCastMapper26GetGlobalIlluminationReachEv__ZN25vtkGPUVolumeRayCastMapper15GetUseJitteringEv__ZN15vtkVolumeMapper11GetCroppingEv__ZN14vtkOpenGLState25PopDrawFramebufferBindingEv__ZN14vtkOpenGLState26PushDrawFramebufferBindingEv__ZN14vtkOpenGLState25PopReadFramebufferBindingEv__ZN14vtkOpenGLState26PushReadFramebufferBindingEv__ZN25vtkGPUVolumeRayCastMapper31GetVolumetricScatteringBlendingEv__ZN25vtkGPUVolumeRayCastMapper35GetLockSampleDistanceToInputSpacingEv__ZN12vtkAlgorithm18GetReleaseDataFlagEv__ZN20vtkOStrStreamWrapper5rdbufEv__ZN15vtkVolumeMapper27ComputeNormalFromOpacityOffEv__ZN25vtkGPUVolumeRayCastMapper15UseDepthPassOffEv__ZN25vtkGPUVolumeRayCastMapper28AutoAdjustSampleDistancesOffEv__ZN9vtkObject8DebugOffEv__ZN25vtkGPUVolumeRayCastMapper15UseJitteringOffEv__ZN15vtkVolumeMapper11CroppingOffEv__ZN25vtkGPUVolumeRayCastMapper35LockSampleDistanceToInputSpacingOffEv__ZN12vtkAlgorithm15AbortExecuteOffEv__ZN25vtkGPUVolumeRayCastMapper16RenderToImageOffEv__ZN25vtkGPUVolumeRayCastMapper10AMRModeOffEv__ZN25vtkGPUVolumeRayCastMapper23ClampDepthToBackfaceOffEv__ZN9vtkObject14ObjectFinalizeEv__ZN12vtkAlgorithm22CreateDefaultExecutiveEv__ZN25vtkGPUVolumeRayCastMapper23GetUseDepthPassMaxValueEv__ZN15vtkVolumeMapper30GetCroppingRegionFlagsMaxValueEv__ZN25vtkGPUVolumeRayCastMapper36GetAutoAdjustSampleDistancesMaxValueEv__ZN25vtkGPUVolumeRayCastMapper26GetMaskBlendFactorMaxValueEv__ZN25vtkGPUVolumeRayCastMapper28GetMaxMemoryFractionMaxValueEv__ZN25vtkGPUVolumeRayCastMapper34GetGlobalIlluminationReachMaxValueEv__ZN25vtkGPUVolumeRayCastMapper23GetUseJitteringMaxValueEv__ZN15vtkVolumeMapper19GetCroppingMaxValueEv__ZN25vtkGPUVolumeRayCastMapper39GetVolumetricScatteringBlendingMaxValueEv__ZN25vtkGPUVolumeRayCastMapper43GetLockSampleDistanceToInputSpacingMaxValueEv__ZN25vtkGPUVolumeRayCastMapper18GetAMRModeMaxValueEv__ZN25vtkGPUVolumeRayCastMapper30GetImageSampleDistanceMaxValueEv__ZN25vtkGPUVolumeRayCastMapper37GetMaximumImageSampleDistanceMaxValueEv__ZN25vtkGPUVolumeRayCastMapper37GetMinimumImageSampleDistanceMaxValueEv__ZN25vtkGPUVolumeRayCastMapper23GetUseDepthPassMinValueEv__ZN15vtkVolumeMapper30GetCroppingRegionFlagsMinValueEv__ZN25vtkGPUVolumeRayCastMapper36GetAutoAdjustSampleDistancesMinValueEv__ZN25vtkGPUVolumeRayCastMapper26GetMaskBlendFactorMinValueEv__ZN25vtkGPUVolumeRayCastMapper28GetMaxMemoryFractionMinValueEv__ZN25vtkGPUVolumeRayCastMapper34GetGlobalIlluminationReachMinValueEv__ZN25vtkGPUVolumeRayCastMapper23GetUseJitteringMinValueEv__ZN15vtkVolumeMapper19GetCroppingMinValueEv__ZN25vtkGPUVolumeRayCastMapper39GetVolumetricScatteringBlendingMinValueEv__ZN25vtkGPUVolumeRayCastMapper43GetLockSampleDistanceToInputSpacingMinValueEv__ZN25vtkGPUVolumeRayCastMapper18GetAMRModeMinValueEv__ZN25vtkGPUVolumeRayCastMapper30GetImageSampleDistanceMinValueEv__ZN25vtkGPUVolumeRayCastMapper37GetMaximumImageSampleDistanceMinValueEv__ZN25vtkGPUVolumeRayCastMapper37GetMinimumImageSampleDistanceMinValueEv__ZN12vtkAlgorithm15GetAbortExecuteEv__ZN13vtkObjectBase10FastDeleteEv__ZN13vtkObjectBase6DeleteEv__ZN16vtkTextureObject10DeactivateEv__ZN26vtkOpenGLVolumeLookupTable10DeactivateEv__ZN26vtkOpenGLVolumeLookupTable8ActivateEv__ZN24vtkOpenGLRenderUtilities39GetFullScreenQuadFragmentShaderTemplateEv__ZN20vtkAbstractTransform6UpdateEv__ZN12vtkAlgorithm6UpdateEv__ZN26vtkOpenGLVertexArrayObject7ReleaseEv__ZN29vtkOpenGLResourceFreeCallbackI31vtkOpenGLGPUVolumeRayCastMapperE7ReleaseEv__ZN13vtkObjectBase20InitializeObjectBaseEv__ZN31vtkOpenGLGPUVolumeRayCastMapper15GetColorTextureEv__ZN31vtkOpenGLGPUVolumeRayCastMapper15GetDepthTextureEv__ZN25vtkGPUVolumeRayCastMapper23GetDepthImageScalarTypeEv__ZN25vtkGPUVolumeRayCastMapper11GetMaskTypeEv__ZN25vtkGPUVolumeRayCastMapper27GetGradientOpacityRangeTypeEv__ZN25vtkGPUVolumeRayCastMapper25GetScalarOpacityRangeTypeEv__ZN25vtkGPUVolumeRayCastMapper17GetColorRangeTypeEv__ZN16vtkTextureObject14GetVTKDataTypeEv__ZN17vtkAbstractMapper8GetMTimeEv__ZN17vtkShaderProperty14GetShaderMTimeEv__ZN23vtkAbstractVolumeMapper12GetArrayNameEv__ZNK9vtkObject13GetObjectNameEv__ZNK13vtkObjectBase12GetClassNameEv__ZNK13vtkObjectBase17GetDebugClassNameEv__ZN12vtkAlgorithm16GetProgressScaleEv__ZN23vtkAbstractVolumeMapper25GetGradientMagnitudeScaleEv__ZN21vtkOpenGLRenderWindow14GetShaderCacheEv__ZN15vtkVolumeMapper23GetAverageIPScalarRangeEv__ZN25vtkGPUVolumeRayCastMapper16GetRenderToImageEv__ZN23vtkAbstractVolumeMapper18GetArrayAccessModeEv__ZN23vtkAbstractVolumeMapper13GetScalarModeEv__ZN15vtkVolumeMapper12GetBlendModeEv__ZN25vtkGPUVolumeRayCastMapper10GetAMRModeEv__ZN12vtkAlgorithm12GetErrorCodeEv__ZN17vtkShaderProperty19HasVertexShaderCodeEv__ZN17vtkShaderProperty21HasFragmentShaderCodeEv__ZN14vtkOpenGLActor19GLDepthMaskOverrideEv__ZN25vtkGPUVolumeRayCastMapper17GetSampleDistanceEv__ZN25vtkGPUVolumeRayCastMapper22GetImageSampleDistanceEv__ZN25vtkGPUVolumeRayCastMapper29GetMaximumImageSampleDistanceEv__ZN25vtkGPUVolumeRayCastMapper29GetMinimumImageSampleDistanceEv__ZN25vtkGPUVolumeRayCastMapper23GetClampDepthToBackfaceEv__ZN26vtkOpenGLVertexArrayObject4BindEv__ZN26vtkOpenGLFramebufferObject4BindEv__ZN16vtkTextureObject4BindEv__ZN9vtkObject8ModifiedEv__ZN12vtkTimeStamp8ModifiedEv__ZN24vtkOpenGLRenderUtilities18DrawFullScreenQuadEv__ZN16vtkTextureObject8DownloadEv__ZN23vtkAbstractVolumeMapper10GetArrayIdEv__ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE9showmanycEv__ZNKSt3__18ios_base6getlocEv__ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE4syncEv__ZN11vtkRenderer15GetActiveCameraEv__ZN25vtkGPUVolumeRayCastMapperD2Ev__ZN31vtkOpenGLGPUVolumeRayCastMapperD2Ev__ZN20vtkVolumeInputHelperD2Ev__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternalD2Ev__ZN19vtkSmartPointerBaseD2Ev__ZN18vtkVolumeStateRAIID2Ev__ZNSt3__19basic_iosIcNS_11char_traitsIcEEED2Ev__ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED2Ev__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED2Ev__ZNSt3__115basic_streambufIcNS_11char_traitsIcEEED2Ev__ZN25vtkGPUVolumeRayCastMapperC2Ev__ZN31vtkOpenGLGPUVolumeRayCastMapperC2Ev__ZN19vtkSmartPointerBaseC2Ev__ZNSt3__115basic_streambufIcNS_11char_traitsIcEEEC2Ev__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev__ZNSt12length_errorD1Ev__ZN20vtkOStrStreamWrapperD1Ev__ZN31vtkOpenGLGPUVolumeRayCastMapperD1Ev__ZN6vtksys18SystemToolsManagerD1Ev__ZN20vtkDebugLeaksManagerD1Ev__ZN31vtkObjectFactoryRegistryCleanupD1Ev__ZN18vtkTimerLogCleanupD1Ev__ZNSt3__16localeD1Ev__ZN6vtkNewI8vtkActorED1Ev__ZN6vtkNewI16vtkContourFilterED1Ev__ZN29vtkOpenGLResourceFreeCallbackI31vtkOpenGLGPUVolumeRayCastMapperED1Ev__ZN6vtkNewI17vtkPolyDataMapperED1Ev__ZN6vtkNewI14vtkInformationED1Ev__ZN15vtkSmartPointerI16vtkVolumeTextureED1Ev__ZN15vtkSmartPointerI11vtkPolyDataED1Ev__ZNSt3__16vectorIfNS_9allocatorIfEEED1Ev__ZThn16_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev__ZTv0_n24_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev__ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED1Ev__ZTv0_n24_NSt3__113basic_ostreamIcNS_11char_traitsIcEEED1Ev__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED1Ev__ZTv0_n24_NSt3__113basic_istreamIcNS_11char_traitsIcEEED1Ev__ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED1Ev__ZTv0_n24_NSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev__ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev__ZThn16_NSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev__ZTv0_n24_NSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev__ZNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev__ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev__ZNSt3__16vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEED1Ev__ZNSt3__16vectorI15vtkSmartPointerI16vtkTextureObjectENS_9allocatorIS3_EEED1Ev__ZNSt3__13mapIi20vtkVolumeInputHelperNS_4lessIiEENS_9allocatorINS_4pairIKiS1_EEEEED1Ev__ZN15vtkSmartPointerI52vtkOpenGLVolumeMaskGradientOpacityTransferFunction2DED1Ev__ZN15vtkSmartPointerI37vtkOpenGLVolumeMaskTransferFunction2DED1Ev__ZN6vtkNewI12vtkMatrix4x4ED1Ev__ZN20vtkOStrStreamWrapperC1Ev__ZN31vtkOpenGLGPUVolumeRayCastMapperC1Ev__ZN6vtksys18SystemToolsManagerC1Ev__ZN20vtkDebugLeaksManagerC1Ev__ZN31vtkObjectFactoryRegistryCleanupC1Ev__ZN18vtkTimerLogCleanupC1Ev__ZN31vtkOpenGLGPUVolumeRayCastMapperD0Ev__ZN29vtkOpenGLResourceFreeCallbackI31vtkOpenGLGPUVolumeRayCastMapperED0Ev__ZThn16_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev__ZTv0_n24_NSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev__ZNSt3__114basic_iostreamIcNS_11char_traitsIcEEED0Ev__ZTv0_n24_NSt3__113basic_ostreamIcNS_11char_traitsIcEEED0Ev__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEED0Ev__ZTv0_n24_NSt3__113basic_istreamIcNS_11char_traitsIcEEED0Ev__ZNSt3__113basic_istreamIcNS_11char_traitsIcEEED0Ev__ZTv0_n24_NSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEED0Ev__ZNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEED0Ev__ZThn16_NSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEED0Ev__ZTv0_n24_NSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEED0Ev__ZNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEED0Ev__ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEED0Ev__ZN12vtkAlgorithm21SetNthInputConnectionEiiP18vtkAlgorithmOutput__ZN25vtkGPUVolumeRayCastMapper18SetInputConnectionEiP18vtkAlgorithmOutput__ZN25vtkGPUVolumeRayCastMapper21RemoveInputConnectionEiP18vtkAlgorithmOutput__ZN12vtkAlgorithm18AddInputConnectionEiP18vtkAlgorithmOutput__ZN25vtkGPUVolumeRayCastMapper18SetInputConnectionEP18vtkAlgorithmOutput__ZN12vtkAlgorithm18AddInputConnectionEP18vtkAlgorithmOutput__ZN31vtkOpenGLGPUVolumeRayCastMapper13SetPartitionsEttt__ZlsRNSt3__113basic_ostreamIcNS_11char_traitsIcEEEERK9vtkIndent__ZN13vtkObjectBase12PrintTrailerERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEE9vtkIndent__ZN13vtkObjectBase11PrintHeaderERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEE9vtkIndent__ZN25vtkGPUVolumeRayCastMapper9PrintSelfERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEE9vtkIndent__ZN31vtkOpenGLGPUVolumeRayCastMapper9PrintSelfERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEE9vtkIndent___cxa_atexit_memset__ZN15vtkVolumeMapper12SetInputDataEP10vtkDataSet__Z31vtkOutputWindowDisplayErrorTextPKciS0_P9vtkObject__ZN13vtkCollection7AddItemEP9vtkObject__ZN26vtkOpenGLFramebufferObject18AddDepthAttachmentEP16vtkTextureObject__ZN31vtkOpenGLGPUVolumeRayCastMapper21SetSharedDepthTextureEP16vtkTextureObject__ZN12vtkAlgorithm18SetInputDataObjectEiP13vtkDataObject__ZN12vtkAlgorithm18AddInputDataObjectEiP13vtkDataObject__ZN12vtkAlgorithm18SetInputDataObjectEP13vtkDataObject__ZN12vtkAlgorithm18AddInputDataObjectEP13vtkDataObject__ZN20vtkPolyDataAlgorithm12SetInputDataEP13vtkDataObject___glewGenVertexArrays___glewDeleteVertexArrays_raycastervs_glDrawElements___glewGenBuffers___glewDeleteBuffers__ZZN9vtkvolume33ComputeDensityGradientDeclarationEP31vtkOpenGLGPUVolumeRayCastMapperRNSt3__13mapIi20vtkVolumeInputHelperNS2_4lessIiEENS2_9allocatorINS2_4pairIKiS4_EEEEEEiiiE14results_texPos__ZGVZN9vtkvolume33ComputeDensityGradientDeclarationEP31vtkOpenGLGPUVolumeRayCastMapperRNSt3__13mapIi20vtkVolumeInputHelperNS2_4lessIiEENS2_9allocatorINS2_4pairIKiS4_EEEEEEiiiE14results_texPosl___const._ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal20RenderVolumeGeometryEP11vtkRendererP16vtkShaderProgramP9vtkVolumePd.tris_raycasterfs__ZN12vtkAlgorithm16ReportReferencesEP19vtkGarbageCollector__ZN12vtkAlgorithm6UpdateEiP20vtkInformationVector__ZTVSt12length_error__ZTISt12length_error__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal19ShaderRebuildNeededEP9vtkCameraP9vtkVolumemP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal17RenderContourPassEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal13ExitDepthPassEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal14SetupDepthPassEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal23UpdateTransferFunctionsEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal17SetupMaskTransferEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11BuildShaderEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal8LoadMaskEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal12BeginPickingEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal10EndPickingEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal17CheckPickingStateEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal19ExitRenderToTextureEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal20SetupRenderToTextureEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal19CaptureDepthTextureEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal16BeginImageSampleEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal14EndImageSampleEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal22UpdateSamplingDistanceEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal12SetPickingIdEP11vtkRenderer__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal24InitializeImageSampleFBOEP11vtkRenderer__ZTI25vtkGPUVolumeRayCastMapper__ZTV31vtkOpenGLGPUVolumeRayCastMapper__ZTS31vtkOpenGLGPUVolumeRayCastMapper__ZTI31vtkOpenGLGPUVolumeRayCastMapper__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal19RefreshMaskTransferEP11vtkRendererR20vtkVolumeInputHelper___glewBindBuffer_strcmp_memcmp___bzero___cxa_allocate_exception___cxa_free_exception__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal21LastModifiedLightTimeEP18vtkLightCollection__ZN21vtkClipConvexPolyData9SetPlanesEP18vtkPlaneCollection__ZN17vtkAbstractMapper17SetClippingPlanesEP18vtkPlaneCollection__ZN12vtkAlgorithm22SetInputArrayToProcessEiP14vtkInformation__ZN12vtkAlgorithm25FillOutputPortInformationEiP14vtkInformation__ZN25vtkGPUVolumeRayCastMapper24FillInputPortInformationEiP14vtkInformation__ZN12vtkAlgorithm14SetInformationEP14vtkInformation__ZN12vtkAlgorithm6UpdateEP14vtkInformation_strlen__Znwm__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKcm__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKcm__ZN24vtkOpenGLRenderUtilities17PrepFullScreenVAOEP21vtkOpenGLRenderWindowP26vtkOpenGLVertexArrayObjectP16vtkShaderProgram__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal17RenderSingleInputEP11vtkRendererP15vtkOpenGLCameraP16vtkShaderProgram__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal20RenderMultipleInputsEP11vtkRendererP15vtkOpenGLCameraP16vtkShaderProgram__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal26SetRenderToImageParametersEP16vtkShaderProgram__ZN17vtkOpenGLUniforms11SetUniformsEP16vtkShaderProgram__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal19RenderWithDepthPassEP11vtkRendererP15vtkOpenGLCameram__Znam__ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m__ZN12vtkAlgorithm20ComputePipelineMTimeEP14vtkInformationPP20vtkInformationVectorS3_iPm__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEm__ZNSt3__19to_stringEm__ZNSt3__16vectorINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEENS4_IS6_EEE7reserveEm__ZNSt3__16vectorI15vtkSmartPointerI16vtkTextureObjectENS_9allocatorIS3_EEE7reserveEm__ZN12vtkAlgorithm12SetErrorCodeEm__ZN9vtkvolume29ImageSampleImplementationFragERKNSt3__16vectorINS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEENS5_IS7_EEEEm__ZN9vtkvolume26ImageSampleDeclarationFragERKNSt3__16vectorINS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEENS5_IS7_EEEEm___stack_chk_fail__ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6xsgetnEPcl__ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6setbufEPcl__ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE6xsputnEPKcl__ZTS36vtkGenericOpenGLResourceFreeCallback__ZN21vtkOpenGLRenderWindow25RegisterGraphicsResourcesEP36vtkGenericOpenGLResourceFreeCallback__ZTI36vtkGenericOpenGLResourceFreeCallback__ZN26vtkOpenGLFramebufferObject18AddColorAttachmentEjP16vtkTextureObjectjjj__ZN14vtkOpenGLState22vtkglBlendFuncSeparateEjjjj__ZN14vtkOpenGLState20vtkglBlitFramebufferEiiiiiiiijj__ZN16vtkTextureObject20AllocateDepthStencilEjj__ZN16vtkTextureObject6ResizeEjj__ZN31vtkOpenGLGPUVolumeRayCastMapper9PreRenderEP11vtkRendererP9vtkVolumePdS4_ij__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal18UpdateMaskTransferEP11vtkRendererP9vtkVolumej__ZN31vtkOpenGLGPUVolumeRayCastMapper11RenderBlockEP11vtkRendererP9vtkVolumej__ZN26vtkOpenGLFramebufferObject21RemoveColorAttachmentEj__ZN26vtkOpenGLFramebufferObject22CheckFrameBufferStatusEj__ZN26vtkOpenGLFramebufferObject19ActivateDrawBuffersEj__ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE7seekoffExNS_8ios_base7seekdirEj__ZNSt3__18ios_base5clearEj__ZN14vtkOpenGLState10vtkglClearEj__ZN14vtkOpenGLState12GetEnumStateEj__ZN14vtkOpenGLState12vtkglDisableEj__ZN14vtkOpenGLState11vtkglEnableEj__ZN14vtkOpenGLState13vtkglCullFaceEj__ZN26vtkOpenGLFramebufferObject4BindEj__ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE7seekposENS_4fposI11__mbstate_tEEj__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal23SetMaskShaderParametersEP16vtkShaderProgramP17vtkVolumePropertyi__ZN14vtkInformation9CopyEntryEPS_P33vtkInformationObjectBaseVectorKeyi__ZN14vtkInformation3GetEP33vtkInformationObjectBaseVectorKeyi__ZN31vtkOpenGLGPUVolumeRayCastMapper10PostRenderEP11vtkRendereri__ZN9vtkvolume19ComputeMatricesInitEP31vtkOpenGLGPUVolumeRayCastMapperi__ZN12vtkAlgorithm13ModifyRequestEP14vtkInformationi__ZN20vtkVolumeInputHelper24ActivateTransferFunctionEP16vtkShaderProgrami__ZN16vtkTextureObject13AllocateDepthEjji__ZN16vtkVolumeTexture10LoadVolumeEP11vtkRendererP10vtkDataSetP12vtkDataArrayii__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal25SetMapperShaderParametersEP16vtkShaderProgramP11vtkRendererii__ZN16vtkTextureObject10Allocate2DEjjiii__ZN12vtkAlgorithm22SetInputArrayToProcessEiiiii__ZN14vtkOpenGLState13vtkglViewportEiiii__ZN9vtkvolume18ShadingSingleInputEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeP12vtkImageDataP16vtkVolumeTextureiii__ZN16vtkVolumeTexture13SetPartitionsEiii__ZN9vtkvolume33ComputeDensityGradientDeclarationEP31vtkOpenGLGPUVolumeRayCastMapperRNSt3__13mapIi20vtkVolumeInputHelperNS2_4lessIiEENS2_9allocatorINS2_4pairIKiS4_EEEEEEiii__ZN9vtkvolume27CompositeMaskImplementationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeP12vtkImageDataP16vtkVolumeTextureii__ZN9vtkvolume23PreComputeGradientsImplEP11vtkRendererP9vtkVolumeii__ZN9vtkvolume11ShadingExitEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeii__ZN9vtkvolume23BaseDeclarationFragmentEP11vtkRendererP15vtkVolumeMapperRNSt3__13mapIi20vtkVolumeInputHelperNS4_4lessIiEENS4_9allocatorINS4_4pairIKiS6_EEEEEEiibii__ZN26vtkOpenGLFramebufferObject18InitializeViewportEii__ZN12vtkAlgorithm27SetNumberOfInputConnectionsEii__ZN25vtkGPUVolumeRayCastMapper21RemoveInputConnectionEii__ZN26vtkOpenGLFramebufferObject6ResizeEii__ZN9vtkObject18UnRegisterInternalEP13vtkObjectBasei__ZN9vtkObject16RegisterInternalEP13vtkObjectBasei__ZN9vtkvolume32CompositeMaskDeclarationFragmentEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeP12vtkImageDataP16vtkVolumeTexturei__ZN9vtkvolume24BinaryMaskImplementationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeP12vtkImageDataP16vtkVolumeTexturei__ZN9vtkvolume21BinaryMaskDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeP12vtkImageDataP16vtkVolumeTexturei__ZN31vtkOpenGLGPUVolumeRayCastMapper19ReplaceShaderValuesERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP11vtkRendererP9vtkVolumei__ZN31vtkOpenGLGPUVolumeRayCastMapper24ReplaceShaderTerminationERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP11vtkRendererP9vtkVolumei__ZN31vtkOpenGLGPUVolumeRayCastMapper21ReplaceShaderCroppingERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP11vtkRendererP9vtkVolumei__ZN31vtkOpenGLGPUVolumeRayCastMapper21ReplaceShaderClippingERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP11vtkRendererP9vtkVolumei__ZN31vtkOpenGLGPUVolumeRayCastMapper20ReplaceShaderMaskingERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP11vtkRendererP9vtkVolumei__ZN31vtkOpenGLGPUVolumeRayCastMapper20ReplaceShaderPickingERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP11vtkRendererP9vtkVolumei__ZN31vtkOpenGLGPUVolumeRayCastMapper20ReplaceShaderShadingERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP11vtkRendererP9vtkVolumei__ZN31vtkOpenGLGPUVolumeRayCastMapper20ReplaceShaderComputeERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP11vtkRendererP9vtkVolumei__ZN31vtkOpenGLGPUVolumeRayCastMapper17ReplaceShaderBaseERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP11vtkRendererP9vtkVolumei__ZN31vtkOpenGLGPUVolumeRayCastMapper16ReplaceShaderRTTERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP11vtkRendererP9vtkVolumei__ZN9vtkvolume30ComputeRayDirectionDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumei__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal27SetLightingShaderParametersEP11vtkRendererP16vtkShaderProgramP9vtkVolumei__ZN16vtkShaderProgram11SetUniformiEPKci__ZN17vtkAbstractMapper10GetScalarsEP10vtkDataSetiiiPKcRi__ZN12vtkFieldData8GetArrayEPKcRi__ZN12vtkFieldData16GetAbstractArrayEPKcRi__ZN14vtkOpenGLState16vtkglGetIntegervEjPi__ZN15vtkVolumeMapper29SpacingAdjustedSampleDistanceEPdPi__ZN12vtkAlgorithm14UpdateTimeStepEdiiiPKi__ZN12vtkAlgorithm11UpdatePieceEiiiPKi__ZN16vtkShaderProgram13SetUniform1ivEPKciPKi__ZN12vtkAlgorithm12UpdateExtentEPKi__ZN23vtkAbstractVolumeMapper17SelectScalarArrayEi__ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE8overflowEi__ZN25vtkGPUVolumeRayCastMapper8GetInputEi__ZN25vtkGPUVolumeRayCastMapper19GetTransformedInputEi__ZN12vtkAlgorithm13GetOutputPortEi__ZN17vtkVolumeProperty10GetAmbientEi__ZN12vtkAlgorithm22SetNumberOfOutputPortsEi__ZN12vtkAlgorithm21SetNumberOfInputPortsEi__ZN25vtkGPUVolumeRayCastMapper15SetUseDepthPassEi__ZN12vtkAlgorithm25RemoveAllInputConnectionsEi__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEi__ZN15vtkVolumeMapper22SetCroppingRegionFlagsEi__ZN25vtkGPUVolumeRayCastMapper28SetAutoAdjustSampleDistancesEi__ZN23vtkAbstractVolumeMapper24GetGradientMagnitudeBiasEi__ZN17vtkVolumeProperty16GetSpecularPowerEi__ZN17vtkVolumeProperty11GetSpecularEi__ZN20vtkVolumeInputHelper26DeactivateTransferFunctionEi__ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE9pbackfailEi__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal27SetAdvancedShaderParametersEP11vtkRendererP16vtkShaderProgramP9vtkVolumePN16vtkVolumeTexture11VolumeBlockEi__ZNSt3__19to_stringEi__ZN25vtkGPUVolumeRayCastMapper15SetUseJitteringEi__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal15FinishRenderingEi__ZN15vtkVolumeMapper11SetCroppingEi__ZN25vtkGPUVolumeRayCastMapper35SetLockSampleDistanceToInputSpacingEi__ZN12vtkAlgorithm18SetReleaseDataFlagEi__ZN20vtkOStrStreamWrapper6freezeEi__ZN16vtkContourValues8GetValueEi__ZN12vtkAlgorithm15SetAbortExecuteEi__ZN12vtkAlgorithm6UpdateEi__ZN17vtkVolumeProperty10GetDiffuseEi__ZN25vtkGPUVolumeRayCastMapper23SetDepthImageScalarTypeEi__ZN25vtkGPUVolumeRayCastMapper11SetMaskTypeEi__ZN25vtkGPUVolumeRayCastMapper27SetGradientOpacityRangeTypeEi__ZN25vtkGPUVolumeRayCastMapper25SetScalarOpacityRangeTypeEi__ZN25vtkGPUVolumeRayCastMapper17SetColorRangeTypeEi__ZN14vtkMultiVolume9GetVolumeEi__ZN23vtkAbstractVolumeMapper25GetGradientMagnitudeScaleEi__ZN25vtkGPUVolumeRayCastMapper16SetRenderToImageEi__ZN23vtkAbstractVolumeMapper18SetArrayAccessModeEi__ZN23vtkAbstractVolumeMapper13SetScalarModeEi__ZN15vtkVolumeMapper12SetBlendModeEi__ZN25vtkGPUVolumeRayCastMapper10SetAMRModeEi__ZN17vtkVolumeProperty8GetShadeEi__ZN25vtkGPUVolumeRayCastMapper23SetClampDepthToBackfaceEi__ZN9vtkvolume36ComputeRGBA2DWithGradientDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeiiNSt3__13mapIiNS6_12basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEENS6_4lessIiEENSB_INS6_4pairIKiSD_EEEEEEi__ZN9vtkvolume27ComputeOpacity2DDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeiiNSt3__13mapIiNS6_12basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEENS6_4lessIiEENSB_INS6_4pairIKiSD_EEEEEEi__ZN9vtkvolume25ComputeColor2DDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeiiNSt3__13mapIiNS6_12basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEENS6_4lessIiEENSB_INS6_4pairIKiSD_EEEEEEi__ZN9vtkvolume26ComputeVolumetricShadowDecEP31vtkOpenGLGPUVolumeRayCastMapperP9vtkVolumeiiRNSt3__13mapIi20vtkVolumeInputHelperNS4_4lessIiEENS4_9allocatorINS4_4pairIKiS6_EEEEEEi__ZN9vtkvolume16GradientCacheDecEP11vtkRendererP9vtkVolumeRNSt3__13mapIi20vtkVolumeInputHelperNS4_4lessIiEENS4_9allocatorINS4_4pairIKiS6_EEEEEEi_glFinish___cxa_begin_catch___cxa_end_catch__ZN14vtkOpenGLState16vtkglGetBooleanvEjPh__ZN14vtkOpenGLState14vtkglDepthMaskEh__ZN20vtkVolumeInputHelper23RefreshTransferFunctionEP11vtkRendereriif__ZN14vtkOpenGLState15vtkglClearColorEffff__ZN16vtkShaderProgram11SetUniformfEPKcf__ZN16vtkShaderProgram20SetUniformMatrix4x4vEPKciPf__ZN16vtkShaderProgram13SetUniform4fvEPKciPA4_Kf__ZN16vtkShaderProgram13SetUniform3fvEPKciPA3_Kf__ZN16vtkShaderProgram13SetUniform2fvEPKciPA2_Kf__ZNSt3__16vectorIfNS_9allocatorIfEEE8__appendEmRKf__ZN16vtkShaderProgram13SetUniform3fvEPKciPKf__ZN16vtkShaderProgram13SetUniform1fvEPKciPKf__ZN16vtkShaderProgram12SetUniform4fEPKcPKf__ZN16vtkShaderProgram12SetUniform3fEPKcPKf__ZN25vtkGPUVolumeRayCastMapper19SetFinalColorWindowEf__ZN25vtkGPUVolumeRayCastMapper18SetMaskBlendFactorEf__ZN25vtkGPUVolumeRayCastMapper20SetMaxMemoryFractionEf__ZN25vtkGPUVolumeRayCastMapper18SetFinalColorLevelEf__ZN25vtkGPUVolumeRayCastMapper26SetGlobalIlluminationReachEf__ZN25vtkGPUVolumeRayCastMapper31SetVolumetricScatteringBlendingEf__ZN25vtkGPUVolumeRayCastMapper17SetSampleDistanceEf__ZN25vtkGPUVolumeRayCastMapper22SetImageSampleDistanceEf__ZN25vtkGPUVolumeRayCastMapper29SetMaximumImageSampleDistanceEf__ZN25vtkGPUVolumeRayCastMapper29SetMinimumImageSampleDistanceEf__ZN12vtkAlgorithm12SetExecutiveEP12vtkExecutive___clang_call_terminate___cxa_guard_release__ZN19vtkSmartPointerBaseaSEP13vtkObjectBase__ZN19vtkSmartPointerBaseC2EP13vtkObjectBase___cxa_guard_acquire__Unwind_Resume__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal26UpdateTransfer2DYAxisArrayEP11vtkRendererP9vtkVolume__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal12UpdateInputsEP11vtkRendererP9vtkVolume__ZN25vtkGPUVolumeRayCastMapper14ValidateRenderEP11vtkRendererP9vtkVolume__ZN31vtkOpenGLGPUVolumeRayCastMapper9GPURenderEP11vtkRendererP9vtkVolume__ZN25vtkGPUVolumeRayCastMapper6RenderEP11vtkRendererP9vtkVolume__ZN31vtkOpenGLGPUVolumeRayCastMapper11PreLoadDataEP11vtkRendererP9vtkVolume__ZN9vtkvolume28TerminationDeclarationVertexEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume25CroppingDeclarationVertexEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume25ClippingDeclarationVertexEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume24ShadingDeclarationVertexEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume30TerminationDeclarationFragmentEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume27CroppingDeclarationFragmentEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume27ClippingDeclarationFragmentEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume26ShadingDeclarationFragmentEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume32RenderToImageDeclarationFragmentEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume20PickingActorPassExitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume13DepthPassExitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume22PickingIdLow24PassExitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume23PickingIdHigh24PassExitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume15TerminationExitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume12CroppingExitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume12ClippingExitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume8BaseExitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume17RenderToImageExitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume13DepthPassInitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume15TerminationInitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume12CroppingInitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume12ClippingInitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume11ShadingInitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume17RenderToImageInitEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume25ComputeTextureCoordinatesEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume23DepthPassImplementationEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume20WorkerImplementationEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume33ComputeClipPositionImplementationEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume25TerminationImplementationEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume22CroppingImplementationEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume22ClippingImplementationEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume18BaseImplementationEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume27RenderToImageImplementationEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume27PickingActorPassDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN9vtkvolume24PhaseFunctionDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolume__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal17SetClippingPlanesEP11vtkRendererP16vtkShaderProgramP9vtkVolume__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal17CheckPropertyKeysEP9vtkVolume__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal28GetNumImageSampleDrawBuffersEP9vtkVolume__ZN20vtkVolumeInputHelperC1E15vtkSmartPointerI16vtkVolumeTextureEP9vtkVolume__ZN31vtkOpenGLGPUVolumeRayCastMapper23GetRenderPassStageMTimeEP9vtkVolume___dso_handle__ZL28vtkDebugLeaksManagerInstance__ZL39vtkObjectFactoryRegistryCleanupInstance__ZL26vtkTimerLogCleanupInstance___stack_chk_guard__ZN15vtkVolumeMapper12SetInputDataEP18vtkRectilinearGrid__ZN16vtkContourValues8SetValueEid__ZN15vtkVolumeMapper23SetCroppingRegionPlanesEdddddd__ZN12vtkDataArray16InsertNextTuple3Eddd__ZN15vtkVolumeMapper23SetAverageIPScalarRangeEdd__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal18SetCroppingRegionsEP16vtkShaderProgramPd__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal14IsCameraInsideEP11vtkRendererP9vtkVolumePd__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal24IsGeometryUpdateRequiredEP11vtkRendererP9vtkVolumePd__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal20RenderVolumeGeometryEP11vtkRendererP16vtkShaderProgramP9vtkVolumePd__ZN12vtkMatrix4x46InvertEPKdPd__ZN12vtkMatrix4x49TransposeEPKdPd__ZN12vtkMatrix4x413MultiplyPointEPKdS1_Pd__ZN12vtkMatrix4x411Multiply4x4EPKdS1_Pd__ZN12vtkMatrix4x48IdentityEPd__ZN15vtkVolumeMapper23GetCroppingRegionPlanesEPd__ZN15vtkVolumeMapper28GetVoxelCroppingRegionPlanesEPd__ZN10vtkDataSet9GetBoundsEPd__ZN23vtkAbstractVolumeMapper9GetBoundsEPd__ZN19vtkAbstractMapper3D9GetBoundsEPd__ZN31vtkOpenGLGPUVolumeRayCastMapper17GetReductionRatioEPd__ZN15vtkVolumeMapper23GetAverageIPScalarRangeEPd__ZN12vtkMatrix4x48DeepCopyEPdPKd__ZN16vtkShaderProgram12SetUniform3fEPKcPKd__ZN15vtkVolumeMapper23SetCroppingRegionPlanesEPKd__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEd__ZN31vtkOpenGLGPUVolumeRayCastMapper22ComputeReductionFactorEd__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6resizeEmc__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6insertEmPKc__ZN12vtkAlgorithm22SetInputArrayToProcessEiiiiPKc__ZN25vtkGPUVolumeRayCastMapper23SetTransfer2DYAxisArrayEPKc__ZN23vtkAbstractVolumeMapper17SelectScalarArrayEPKc__ZN16vtkShaderProgram20EnableAttributeArrayEPKc__ZN17vtkOStreamWrapperlsEPKc__ZNSt3__1L20__throw_length_errorEPKc__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6assignEPKc__ZN23vtkAbstractVolumeMapper8IsTypeOfEPKc__ZN13vtkObjectBase8IsTypeOfEPKc__ZN31vtkOpenGLGPUVolumeRayCastMapper30GetNumberOfGenerationsFromBaseEPKc__ZN31vtkOpenGLGPUVolumeRayCastMapper34GetNumberOfGenerationsFromBaseTypeEPKc__ZN13vtkObjectBase34GetNumberOfGenerationsFromBaseTypeEPKc__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6appendEPKc__ZN31vtkOpenGLGPUVolumeRayCastMapper3IsAEPKc__ZNSt11logic_errorC2EPKc__ZNSt12length_errorC1EPKc__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9push_backEc__ZN14vtkOpenGLState12SetEnumStateEjb__ZN9vtkvolume26ComputeLightingDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeiiiib__ZN9vtkvolume31ComputeLightingMultiDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeiiib__ZN18vtkVolumeStateRAIIC2EP14vtkOpenGLStateb__ZN9vtkvolume21BaseDeclarationVertexEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeb__ZN31vtkOpenGLGPUVolumeRayCastMapper23ReplaceShaderRenderPassERNSt3__13mapIN9vtkShader4TypeEPS2_NS0_4lessIS3_EENS0_9allocatorINS0_4pairIKS3_S4_EEEEEEP9vtkVolumeb__ZN16vtkShaderProgram10SubstituteEP9vtkShaderRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_b__ZN16vtkShaderProgram10SubstituteERNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEERKS6_S9_b__ZN15vtkVolumeMapper27SetComputeNormalFromOpacityEb__ZN25vtkGPUVolumeRayCastMapper17SetReportProgressEb__ZN9vtkvolume28ComputeOpacityEvaluationCallEP31vtkOpenGLGPUVolumeRayCastMapperRNSt3__13mapIi20vtkVolumeInputHelperNS2_4lessIiEENS2_9allocatorINS2_4pairIKiS4_EEEEEEiiiNS2_12basic_stringIcNS2_11char_traitsIcEENS7_IcEEEEb__ZN9vtkvolume8BaseInitEP11vtkRendererP15vtkVolumeMapperRNSt3__13mapIi20vtkVolumeInputHelperNS4_4lessIiEENS4_9allocatorINS4_4pairIKiS6_EEEEEEb__ZN9vtkvolume28ComputeColorMultiDeclarationERNSt3__13mapIi20vtkVolumeInputHelperNS0_4lessIiEENS0_9allocatorINS0_4pairIKiS2_EEEEEEb___glewBufferData__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal25ConvertTextureToImageDataEP16vtkTextureObjectP12vtkImageData__ZN31vtkOpenGLGPUVolumeRayCastMapper13GetColorImageEP12vtkImageData__ZN31vtkOpenGLGPUVolumeRayCastMapper13GetDepthImageEP12vtkImageData__ZN15vtkVolumeMapper12SetInputDataEP12vtkImageData__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal25SetCameraShaderParametersEP16vtkShaderProgramP11vtkRendererP15vtkOpenGLCamera__ZNSt3__16__sortIRNS_6__lessIffEEPfEEvT0_S5_T___ZNSt3__16__treeINS_12__value_typeIiNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEENS_19__map_value_compareIiS8_NS_4lessIiEELb1EEENS5_IS8_EEE15__emplace_multiIJRKNS_4pairIKiS7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEDpOT___ZNSt3__16__treeINS_12__value_typeIiNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEENS_19__map_value_compareIiS8_NS_4lessIiEELb1EEENS5_IS8_EEE12__find_equalIiEERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_SH_EElEERPNS_15__tree_end_nodeISJ_EESK_RKT___ZNSt3__16__treeINS_12__value_typeIN9vtkShader15ReplacementSpecENS2_16ReplacementValueEEENS_19__map_value_compareIS3_S5_NS_4lessIS3_EELb1EEENS_9allocatorIS5_EEE12__find_equalIS3_EERPNS_16__tree_node_baseIPvEENS_21__tree_const_iteratorIS5_PNS_11__tree_nodeIS5_SF_EElEERPNS_15__tree_end_nodeISH_EESI_RKT___ZN17vtkAbstractMapper11ShallowCopyEPS___ZN13vtkObjectBase10UnRegisterEPS___ZN13vtkObjectBase8RegisterEPS___ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternalC2EPS___ZN20vtkVolumeInputHelperaSEOS___ZN20vtkVolumeInputHelperC2ERKS___ZN19vtkSmartPointerBaseC2ERKS___ZNSt3__16__treeINS_12__value_typeIiNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEENS_19__map_value_compareIiS8_NS_4lessIiEELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM___ZN12vtkCellArray5VisitIN19vtkCellArray_detail18InsertNextCellImplEJRiEvEEDTclclsr3stdE7declvalIT_EEclL_ZNSt3__17declvalIRNS_10VisitStateI17vtkTypeInt32ArrayEEEEDTclsr3std3__1E9__declvalIS4_ELi0EEEvEEspclsr3stdE7declvalIT0_EEEEOS4_DpOSC___ZNSt3__1plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9___ZNSt3__1plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EERKS9_PKS6___ZNSt3__127__tree_balance_after_insertIPNS_16__tree_node_baseIPvEEEEvT_S5___ZNSt3__113__tree_removeIPNS_16__tree_node_baseIPvEEEEvT_S5___ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEaSERKS5___ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5___ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1ERKS5_mmRKS4___ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4___ZN12vtkAlgorithm14ProcessRequestEP14vtkInformationPP20vtkInformationVectorS3___ZN16vtkPixelTransfer4BlitERK14vtkPixelExtentS2_S2_S2_iiPviiS3___ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC1ERS3___ZN12vtkAlgorithm22SetInputArrayToProcessEiiiPKcS1___ZN12vtkCellArray5VisitIN19vtkCellArray_detail15GetCellAtIdImplEJRxS3_RPKxR6vtkNewI9vtkIdListEEvEEvOT_DpOT0___ZNSt3__16__treeINS_12__value_typeIiNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEENS_19__map_value_compareIiS8_NS_4lessIiEELb1EEENS5_IS8_EEE30__emplace_hint_unique_key_argsIiJRKNS_4pairIKiS7_EEEEENS_15__tree_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEENS_21__tree_const_iteratorIS8_SP_lEERKT_DpOT0___ZNSt3__16__treeINS_12__value_typeIN9vtkShader15ReplacementSpecENS2_16ReplacementValueEEENS_19__map_value_compareIS3_S5_NS_4lessIS3_EELb1EEENS_9allocatorIS5_EEE30__emplace_hint_unique_key_argsIS3_JRKNS_4pairIKS3_S4_EEEEENS_15__tree_iteratorIS5_PNS_11__tree_nodeIS5_PvEElEENS_21__tree_const_iteratorIS5_SN_lEERKT_DpOT0___ZNSt3__16__treeINS_12__value_typeIi20vtkVolumeInputHelperEENS_19__map_value_compareIiS3_NS_4lessIiEELb1EEENS_9allocatorIS3_EEE25__emplace_unique_key_argsIiJRKNS_21piecewise_construct_tENS_5tupleIJOiEEENSF_IJEEEEEENS_4pairINS_15__tree_iteratorIS3_PNS_11__tree_nodeIS3_PvEElEEbEERKT_DpOT0___ZNSt3__16__treeINS_12__value_typeIi20vtkVolumeInputHelperEENS_19__map_value_compareIiS3_NS_4lessIiEELb1EEENS_9allocatorIS3_EEE25__emplace_unique_key_argsIiJRKNS_21piecewise_construct_tENS_5tupleIJRKiEEENSF_IJEEEEEENS_4pairINS_15__tree_iteratorIS3_PNS_11__tree_nodeIS3_PvEElEEbEERKT_DpOT0___Z40vtkOutputWindowDisplayGenericWarningTextPKciS0___ZNK9vtkShader15ReplacementSpecltERKS0___ZNSt3__1L19piecewise_constructE__ZTV29vtkOpenGLResourceFreeCallbackI31vtkOpenGLGPUVolumeRayCastMapperE__ZTS29vtkOpenGLResourceFreeCallbackI31vtkOpenGLGPUVolumeRayCastMapperE__ZTI29vtkOpenGLResourceFreeCallbackI31vtkOpenGLGPUVolumeRayCastMapperE__ZTVN10__cxxabiv120__si_class_type_infoE__ZTVN10__cxxabiv117__class_type_infoE__ZN16vtkShaderProgram17UseAttributeArrayEPKcimiiNS_15NormalizeOptionE__ZN17vtkOStreamWrapperlsERKNS_10std_stringE__ZN20vtkPixelBufferObject11UnmapBufferENS_10BufferTypeE__ZN20vtkPixelBufferObject9MapBufferENS_10BufferTypeE__ZN9vtkShader7SetTypeENS_4TypeE__ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5imbueERKNS_6localeE__ZN19vtkSmartPointerBaseC2EP13vtkObjectBaseRKNS_11NoReferenceE__ZN6vtksysL26SystemToolsManagerInstanceE__ZNKSt3__16locale9use_facetERNS0_2idE__ZNSt3__15ctypeIcE2idE__ZNSt3__16__treeINS_12__value_typeIiNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEENS_19__map_value_compareIiS8_NS_4lessIiEELb1EEENS5_IS8_EEE7destroyEPNS_11__tree_nodeIS8_PvEE__ZNSt3__16__treeINS_12__value_typeIN9vtkShader4TypeEPS2_EENS_19__map_value_compareIS3_S5_NS_4lessIS3_EELb1EEENS_9allocatorIS5_EEE7destroyEPNS_11__tree_nodeIS5_PvEE__ZNSt3__16__treeINS_12__value_typeIN9vtkShader15ReplacementSpecENS2_16ReplacementValueEEENS_19__map_value_compareIS3_S5_NS_4lessIS3_EELb1EEENS_9allocatorIS5_EEE7destroyEPNS_11__tree_nodeIS5_PvEE__ZNSt3__16__treeINS_12__value_typeIi20vtkVolumeInputHelperEENS_19__map_value_compareIiS3_NS_4lessIiEELb1EEENS_9allocatorIS3_EEE7destroyEPNS_11__tree_nodeIS3_PvEE__ZNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE3strERKNS_12basic_stringIcS2_S4_EE__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_14basic_iostreamIcS2_EE__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE16_NS_13basic_ostreamIcS2_EE__ZTCNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_ostreamIcS2_EE__ZTCNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE0_NS_13basic_istreamIcS2_EE__ZTINSt3__114basic_iostreamIcNS_11char_traitsIcEEEE__ZTINSt3__113basic_ostreamIcNS_11char_traitsIcEEEE__ZTINSt3__113basic_istreamIcNS_11char_traitsIcEEEE__ZTINSt3__115basic_streambufIcNS_11char_traitsIcEEEE__ZTVNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZTTNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZTSNSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZTINSt3__119basic_ostringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZTVNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZTTNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZTSNSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZTINSt3__118basic_stringstreamIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZTVNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZTSNSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZTINSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEEE__ZN6vtksys11SystemTools15GetFilenameNameERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE__ZN9vtkObject13SetObjectNameERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE__ZN9vtkShader9SetSourceERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE__ZN9vtkvolume25ComputeOpacityDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeiiNSt3__13mapIiNS6_12basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEENS6_4lessIiEENSB_INS6_4pairIKiSD_EEEEEE__ZN9vtkvolume23ComputeColorDeclarationEP11vtkRendererP15vtkVolumeMapperP9vtkVolumeiiNSt3__13mapIiNS6_12basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEENS6_4lessIiEENSB_INS6_4pairIKiSD_EEEEEE__ZN9vtkvolume28ComputeGradientOpacity1DDeclEP9vtkVolumeiiNSt3__13mapIiNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS2_4lessIiEENS7_INS2_4pairIKiS9_EEEEEE__ZN9vtkvolume30ComputeColor2DYAxisDeclarationEiiNSt3__13mapIiNS0_12basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEENS0_4lessIiEENS5_INS0_4pairIKiS7_EEEEEE__ZN9vtkvolume26ComputeGradientDeclarationEP31vtkOpenGLGPUVolumeRayCastMapperRNSt3__13mapIi20vtkVolumeInputHelperNS2_4lessIiEENS2_9allocatorINS2_4pairIKiS4_EEEEEE__ZN9vtkvolume21ShadingMultipleInputsEP15vtkVolumeMapperRNSt3__13mapIi20vtkVolumeInputHelperNS2_4lessIiEENS2_9allocatorINS2_4pairIKiS4_EEEEEE__ZN9vtkvolume30ComputeOpacityMultiDeclarationERNSt3__13mapIi20vtkVolumeInputHelperNS0_4lessIiEENS0_9allocatorINS0_4pairIKiS2_EEEEEE__ZN9vtkvolume21Transfer2DDeclarationERNSt3__13mapIi20vtkVolumeInputHelperNS0_4lessIiEENS0_9allocatorINS0_4pairIKiS2_EEEEEE__ZN9vtkvolume33ComputeGradientOpacityMulti1DDeclERNSt3__13mapIi20vtkVolumeInputHelperNS0_4lessIiEENS0_9allocatorINS0_4pairIKiS2_EEEEEEGCC_except_table9GCC_except_table89GCC_except_table69GCC_except_table369GCC_except_table149GCC_except_table139GCC_except_table29GCC_except_table19GCC_except_table8GCC_except_table88GCC_except_table368GCC_except_table168GCC_except_table348GCC_except_table148GCC_except_table138GCC_except_table28GCC_except_table118GCC_except_table347GCC_except_table337GCC_except_table137GCC_except_table27GCC_except_table17GCC_except_table107GCC_except_table6GCC_except_table96GCC_except_table86GCC_except_table76GCC_except_table176GCC_except_table166GCC_except_table356GCC_except_table156GCC_except_table346GCC_except_table36GCC_except_table136GCC_except_table26GCC_except_table16GCC_except_table106GCC_except_table5GCC_except_table345GCC_except_table145GCC_except_table35GCC_except_table135GCC_except_table25GCC_except_table15__ZN16vtkVolumeTexture21SortBlocksBackToFrontEP11vtkRendererP12vtkMatrix4x4__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal19BindTransformationsEP16vtkShaderProgramP12vtkMatrix4x4__ZN31vtkOpenGLGPUVolumeRayCastMapper11vtkInternal25SetVolumeShaderParametersEP16vtkShaderProgramiiP12vtkMatrix4x4__ZN16vtkShaderProgram16SetUniformMatrixEPKcP12vtkMatrix4x4GCC_except_table4GCC_except_table74GCC_except_table54GCC_except_table154GCC_except_table44GCC_except_table344GCC_except_table144GCC_except_table34GCC_except_table134GCC_except_table24GCC_except_table14LCPI102_3GCC_except_table363GCC_except_table163GCC_except_table153GCC_except_table143GCC_except_table33GCC_except_table133GCC_except_table23GCC_except_table13GCC_except_table2GCC_except_table82GCC_except_table72GCC_except_table362GCC_except_table162GCC_except_table352GCC_except_table152GCC_except_table142GCC_except_table132GCC_except_table22GCC_except_table12GCC_except_table91GCC_except_table381GCC_except_table161GCC_except_table351GCC_except_table141GCC_except_table131GCC_except_table21GCC_except_table121GCC_except_table11__ZNSt3__16__treeINS_12__value_typeIiNS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEEEENS_19__map_value_compareIiS8_NS_4lessIiEELb1EEENS5_IS8_EEE14__assign_multiINS_21__tree_const_iteratorIS8_PNS_11__tree_nodeIS8_PvEElEEEEvT_SM_.cold.1___gxx_personality_v0GCC_except_table70GCC_except_table370GCC_except_table60GCC_except_table360GCC_except_table140GCC_except_table20GCC_except_table120GCC_except_table10GCC_except_table110