
    Ui                    r   S SK r S SKrS SKrS SK7  S SKrS SKrSSKJr  S SKr	S SKJ
r
   " S S\5      r\" \5      S:w  a  \R                  " 5       S	;   a  \rO\r\" \5      S:X  ab  \R                  " 5       S
:X  a  SrO\R                  " 5       S:X  a  SrO\R                  " 5       S:X  a  SrO|\" S\R                  " 5       -   5      e\R                  " 5       S
:X  a  SrOJ\R                  " 5       S:X  a  SrO2\R                  " 5       S:X  a  SrO\" S\R                  " 5       -   5      e\R&                  " 5       r\ R*                  " \R,                  5        S\S\S\4S jr\" S\5      r\R4                  R7                  \5      r\R                  " 5       S
:X  a  \rO\rS r  " S S\5      r! " S S\5      r" " S S\5      r# " S S \5      r$ " S! S"\5      r% " S# S$\5      r&S%r'S&r(S'r)Sr*S(r+S)r,S r-S*r.S+r/S(r0S r1S r2S r3Sr4S%r5S,r6Sr7S-r8S.r9S/r:S0r;S1r<S2r=S3r>S4r?S5r@S6rAS7rBS8rCS9rDS:rES;rFS<rGS=rHS>rIS?rJS@rKSArLS)rMS rNS rOS rPS rQS-rRS rSSBrTSCrUS rVSrWS%rXSrYSCrZSDr[SEr\SFr]SGr^SHr_SIr`SJraSKrbSLrcSMrdSJreSNrfSOrgSPrhSQriSRrjSSrkSTrlSUrmSVrnSWroSXrpSYrqSZrrS[rsS\rtS]ruS^rvS_rwS`rxSarySbrzScr{Sdr|Ser}Sfr~SgrShrSirSjrSkrSlrSmrSnrSorSprSqrSrrSsrStrSurSvrSwrSxrSyrSzrS{rS|rS}rS~rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSGr SGrSGrSGrSGrSGrSGrSGrSGrSGr	SGr
SGrSGrSGrSGrSGrSGrSGrSGrSGrSGrSGrSGrSGrGS GrGSGrGSGrGSGrGSGrGSGrGSGrGSGrGSGr GS	Gr!GS
Gr"GSGr#GSGr$GSGr%GSGr&GSGr'GSGr(GSGr)GSGr*GSGr+GSGr,GSGr-GSGr.GSGr/GSGr0SGr1GSGr2GSGr3GSGr4GSGr5GSGr6GSGr7GSGr8GS Gr9GS!Gr:GS"Gr;GS#Gr<GS$Gr=GS%Gr>GS&Gr?GS'Gr@GS(GrAGS)GrBGS*GrCGS+GrDGS,GrEGS-GrFGS.GrGGS/GrHGS0GrIGS1GrJGS2GrKGS3GrLGS4GrMGS5GrNGS6GrOGS7GrPGS8GrQGS9GrRGS:GrSGS;GrTGS<GrUSEGrVGS=GrWGS>GrXGS?GrYSFGrZGS@Gr[SJGr\SJGr]SJGr^S8Gr_GSAGr`GSBGraGSCGrbGSDGrcGSEGrdGSFGreGSGGrfGSHGrgGSIGrhGSJGriSBGrjGSKGrkGSLGrlGSMGrmGSNGrnGSOGroGSPGrpS*GrqS*GrrGSQGrsS8GrtGSRGruGSSGrvGSTGrwGSUGrxS GryGSVGrzS Gr{GSWGr|GSXGr}GSYGr~G\GrG\GrG\GrG\" S 5      GrG\" S5      GrG\GrG\" SB5      GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\" S/5      GrG\" SC5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\GrG\" S5      GrG\" GSZ5      GrG\" GS[5      GrG\" GS\5      GrG\" GS]5      GrG\" GS^5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S-5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S5      GrG\GrG\" S 5      GrG\" S@5      GrG\" GS_5      GrG\" GS`5      GrG\" GSa5      GrG\" GSb5      GrG\" GSc5      GrG\" GSd5      GrG\" GSe5      GrG\" GSf5      GrG\" GSg5      GrG\" GSh5      GrG\" GSi5      GrG\" GSj5      GrG\" GSk5      GrG\" GSl5      GrG\" GSm5      GrG\" GSn5      GrG\" GSo5      GrG\" GSp5      GrG\" GSq5      GrG\" GSr5      GrG\" GSs5      GrG\" GSt5      GrG\" GSu5      GrG\" SH5      GrG\" GSv5      GrG\" GSw5      GrG\" GSx5      GrG\" GSy5      GrG\" GSz5      GrG\" GS{5      GrG\" GS|5      GrG\" GS}5      GrG\" GS~5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      Gr G\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      Gr	G\" GS5      Gr
G\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      Gr G\" GS5      Gr!G\" GS5      Gr"G\" GS5      Gr#G\" GS5      Gr$G\" GS5      Gr%G\" GS5      Gr&G\" GS5      Gr'G\" GS5      Gr(G\" GS5      Gr)G\" GS5      Gr*G\" GS5      Gr+G\" GS5      Gr,G\" GS5      Gr-G\" GS5      Gr.G\" GS5      Gr/G\" GS5      Gr0G\" GS5      Gr1G\" GS5      Gr2G\" GS5      Gr3G\" GS5      Gr4G\" GS5      Gr5G\" GS5      Gr6G\" GS5      Gr7G\" GS5      Gr8G\" GS5      Gr9G\" GS5      Gr:G\" GS5      Gr;G\" GS5      Gr<G\" GS5      Gr=G\" GS5      Gr>G\" GS5      Gr?G\" GS5      Gr@G\" GS5      GrAG\" GS5      GrBG\" GS5      GrCG\" GS5      GrDG\" GS5      GrEG\" GS5      GrFG\" GS5      GrGG\" GS5      GrHG\" GS5      GrIG\" GS5      GrJG\" GS5      GrKG\" GS5      GrLG\" GS5      GrMG\" GS5      GrNG\" GS5      GrOG\" GS5      GrPG\" GS5      GrQG\" GS5      GrRG\" GS5      GrSG\" GS5      GrTG\" GS5      GrUG\" GS5      GrVG\" GS5      GrWG\" GS5      GrXG\" GS5      GrYG\" GS 5      GrZG\" GS5      Gr[G\" GS5      Gr\G\" GS5      Gr]G\" GS5      Gr^G\" GS5      Gr_G\" GS5      Gr`G\" GS5      GraG\" GS5      GrbG\" GS	5      GrcG\" GS
5      GrdG\" GS5      GreG\" GS5      GrfG\" GS5      GrgG\" GS5      GrhG\" GS5      GriG\" GS5      GrjG\" GS5      GrkG\" GS5      GrlG\" GS5      GrmG\" GS5      GrnG\" GS5      GroG\" GS5      GrpG\" GS5      GrqG\" GS5      GrrG\" GS5      GrsG\" GS5      GrtG\" GS5      GruG\" GS5      GrvG\" GS5      GrwG\" GS5      GrxG\" GS5      GryG\" GS 5      GrzG\" GS!5      Gr{G\" GS"5      Gr|G\" GS#5      Gr}G\" GS$5      Gr~G\" GS%5      GrG\" GS&5      GrG\" GS'5      GrG\" GS(5      GrG\" GS)5      GrG\" GS*5      GrG\" GS+5      GrG\" GS,5      GrG\" GS-5      GrG\" GS.5      GrG\" GS/5      GrG\" GS05      GrG\" GS15      GrG\" GS25      GrG\" GS35      GrG\" GS45      GrG\" GS55      GrG\" GS65      GrG\" GS75      GrG\" GS85      GrG\" GS95      GrG\" GS:5      GrG\" GS;5      GrG\" GS<5      GrG\" GS=5      GrG\" GS>5      GrG\" GS?5      GrG\" GS@5      GrG\" GSA5      GrG\" GSB5      GrG\" GSC5      GrG\" GSD5      GrG\" GSE5      GrG\" GSF5      GrG\" GSG5      GrG\" GSH5      GrG\" SA5      GrG\" GSI5      GrG\" GSJ5      GrG\" GSK5      GrG\" GSL5      GrG\" GSM5      GrG\" GSN5      GrG\" GSO5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\" S/5      GrG\" SC5      GrG\" GSP5      GrG\" GSQ5      GrG\" GSR5      GrG\" S&5      GrG\" GSS5      GrG\" S'5      GrG\" GST5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S5      GrG\" SC5      GrG\" GSQ5      GrG\" S85      GrG\" S*5      GrG\" SJ5      GrG\" SF5      GrG\" S)5      GrG\" GSU5      GrG\" GSV5      GrG\" GSW5      GrG\GrG\" SB5      GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\" S/5      GrG\GrG\" S 5      GrG\" GSZ5      GrG\" GS[5      GrG\" GSX5      GrG\" GSY5      GrG\" GSZ5      GrG\" GS[5      GrG\" GS\5      GrG\" GS]5      GrG\" GS^5      GrG\" GS_5      GrG\" GS`5      GrG\" GSa5      GrG\" GSb5      GrG\" GSc5      GrG\" GSd5      GrG\" GSe5      GrG\" GS\5      GrG\" GS]5      GrG\" GSf5      GrG\" GSg5      GrG\" GSh5      GrG\" GS^5      GrG\" GSi5      GrG\" GSj5      GrG\" GSk5      GrG\" GSl5      GrG\" GSm5      GrG\" GSn5      GrG\" GSo5      GrG\" GSp5      GrG\" GSq5      GrG\" GSr5      GrG\" GSs5      GrG\" GSt5      GrG\" GSu5      GrG\" GSv5      GrG\" GSw5      Gr G\" GSx5      GrG\" GSy5      GrG\" GSz5      GrG\" GS{5      GrG\" GS|5      GrG\" GS}5      GrG\" GS~5      GrG\" GS5      GrG\" GS5      Gr	G\" GS5      Gr
G\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" SG5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      Gr G\" GS5      Gr!G\" GS5      Gr"G\" GS5      Gr#G\" GS5      Gr$G\" GS5      Gr%G\" GS5      Gr&G\" GS5      Gr'G\" GS5      Gr(G\" GS5      Gr)G\" GS5      Gr*G\" GS5      Gr+G\" GS5      Gr,G\" GS5      Gr-G\" GS5      Gr.G\" GS5      Gr/G\" GS5      Gr0G\" GS5      Gr1G\" GS5      Gr2G\" GS5      Gr3G\" GS5      Gr4G\" GS5      Gr5G\" GS5      Gr6G\" GS5      Gr7G\" GS5      Gr8G\" GS5      Gr9G\" GS5      Gr:G\" GS5      Gr;G\" GS5      Gr<G\" GS5      Gr=G\" GS5      Gr>G\" GS5      Gr?G\" GS5      Gr@G\" GS5      GrAG\" GS5      GrBG\" GS5      GrCG\" GS5      GrDG\" GS5      GrEG\" GS5      GrFG\" GS5      GrGG\" GS5      GrHG\" GS5      GrIG\" GS5      GrJG\" GS5      GrKG\" GS5      GrLG\" GS5      GrMG\" GS5      GrNG\" GS5      GrOG\" GS5      GrPG\" GS5      GrQG\" GS5      GrRG\" GS5      GrSG\" GS5      GrTG\" GS5      GrUG\" GS5      GrVG\" GS5      GrWG\" GS5      GrXG\" GS5      GrYG\" GS5      GrZG\" GS5      Gr[G\" GS5      Gr\G\" GS5      Gr]G\" GS5      Gr^G\" GS5      Gr_G\" GS5      Gr`G\" GS5      GraG\" GS5      GrbG\" GS5      GrcG\" GS5      GrdG\" S@5      GreG\" GS5      GrfG\" GS5      GrgG\" GS5      GrhG\" GS5      GriG\" GS5      GrjG\" GS5      GrkG\" GS5      GrlG\" GS5      GrmG\" GS5      GrnG\" GS5      GroG\" GS5      GrpG\" GS5      GrqG\" GS5      GrrG\" GS5      GrsG\" GS5      GrtG\" GS5      GruG\" GS5      GrvG\" GS5      GrwG\" GS5      GrxG\" GS5      GryG\" GS5      GrzG\" GS5      Gr{G\" GS5      Gr|G\" GS5      Gr}G\" GS5      Gr~G\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS 5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" SA5      GrG\" GS	5      GrG\GrG\" SB5      GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\" S/5      GrG\" S75      GrG\" S85      GrG\" S95      GrG\" S:5      GrG\" S;5      GrG\" S<5      GrG\" S85      GrG\" S95      GrG\" S%5      GrG\" S%5      GrG\" S5      GrG\" S;5      GrG\" GS
5      GrG\" GS5      GrG\" S*5      GrG\GrG\" S5      GrG\" S%5      GrG\" S5      GrG\GrG\" S 5      GrG\" S5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\" S/5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\GrG\" S5      GrG\" S%5      GrG\" S5      GrG\" SC5      GrG\" GSQ5      GrG\" S85      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\" S/5      GrG\" SC5      GrG\" GSP5      GrG\" GSQ5      GrG\" GSR5      GrG\" S&5      GrG\" GSS5      GrG\" S'5      GrG\" GST5      GrG\" GSQ5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" S05      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\" S/5      GrG\" SC5      GrG\" GSP5      GrG\" GSQ5      GrG\" GSR5      GrG\" S&5      GrG\" GSS5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\GrG\" S 5      Gr G\" S5      GrG\" S%5      GrG\" S,5      GrG\GrG\" S 5      GrG\" S5      GrG\GrG\" S 5      GrG\" S5      Gr	G\" S%5      Gr
G\" S,5      GrG\" S5      GrG\" S-5      GrG\GrG\" S 5      GrG\" GSQ5      GrG\" GSR5      GrG\" S&5      GrG\" GSS5      GrG\" S'5      GrG\" GST5      GrG\" GSQ5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" S05      GrG\" S15      GrG\" S25      GrG\" S35      GrG\" S45      GrG\" S55      GrG\" GS5      Gr G\" GS5      Gr!G\" GS5      Gr"G\" S65      Gr#G\" S75      Gr$G\" S85      Gr%G\" S95      Gr&G\" S:5      Gr'G\Gr(G\" S 5      Gr)G\" S5      Gr*G\" S%5      Gr+G\" S,5      Gr,G\" S5      Gr-G\" S-5      Gr.G\" S.5      Gr/G\" S/5      Gr0G\" SC5      Gr1G\" GSP5      Gr2G\" GSQ5      Gr3G\" GSR5      Gr4G\" S&5      Gr5G\" GSS5      Gr6G\" S'5      Gr7G\Gr8G\" S 5      Gr9G\" S5      Gr:G\" S%5      Gr;G\Gr<G\" S 5      Gr=G\" GSZ5      Gr>G\" GS[5      Gr?G\" GSX5      Gr@G\" GSY5      GrAG\" GSZ5      GrBG\GrCG\" S 5      GrDG\" S5      GrEG\GrFG\" S 5      GrGG\" S5      GrHG\" S%5      GrIG\" S,5      GrJG\" S%5      GrKG\GrLG\" S 5      GrMG\" S5      GrNG\" GSZ5      GrOG\" GS[5      GrPG\" GSX5      GrQG\" GSY5      GrRG\" GSZ5      GrSG\" GS[5      GrTG\" GS\5      GrUG\" GS]5      GrVG\" GS^5      GrWG\" GS_5      GrXG\" GS`5      GrYG\" GSa5      GrZG\" GSb5      Gr[G\" GSc5      Gr\G\" GSd5      Gr]G\" GSe5      Gr^G\" GS5      Gr_G\" GS5      Gr`G\" GS5      GraG\" GS5      GrbG\" GS5      GrcG\" GS5      GrdG\" GS5      GreG\" GS5      GrfG\" GS5      GrgG\" GS5      GrhG\" GS5      GriG\" GS5      GrjG\" SJ5      GrkG\" GS5      GrlG\" GS5      GrmG\" GS 5      GrnG\" GS!5      GroG\" GS"5      GrpG\" GS#5      GrqG\" GS$5      GrrG\" GS%5      GrsG\" GS&5      GrtG\" GS'5      GruG\" GS(5      GrvG\" GS)5      GrwG\" GS*5      GrxG\" GS+5      GryG\" GS,5      GrzG\" GS-5      Gr{G\" GS.5      Gr|G\" GS/5      Gr}G\" GS05      Gr~G\" GS15      GrG\" GS25      GrG\" GS35      GrG\" GS45      GrG\" GS55      GrG\" GS65      GrG\" GS75      GrG\" GS85      GrG\" GS95      GrG\" GS:5      GrG\" GS;5      GrG\" GS<5      GrG\" GS=5      GrG\" GS>5      GrG\" GS?5      GrG\" GS@5      GrG\" GSA5      GrG\" GSB5      GrG\" GSC5      GrG\" GSD5      GrG\" GS\5      GrG\" GS]5      GrG\" GSf5      GrG\" GSg5      GrG\" GSE5      GrG\" GSF5      GrG\" GSG5      GrG\" GSH5      GrG\" GSI5      GrG\" GSJ5      GrG\" GSK5      GrG\" GSL5      GrG\" GSM5      GrG\" GSN5      GrG\" GSO5      GrG\" GS^5      GrG\" GSi5      GrG\" GSj5      GrG\" GSk5      GrG\" GSl5      GrG\" GSm5      GrG\" GSn5      GrG\" GSo5      GrG\" GSp5      GrG\" GSq5      GrG\" GSr5      GrG\" GSt5      GrG\" GSu5      GrG\" GSP5      GrG\" GSQ5      GrG\" GSv5      GrG\" GSR5      GrG\" GSw5      GrG\" GSS5      GrG\" GSx5      GrG\" GSy5      GrG\" GSz5      GrG\" GS{5      GrG\" GS|5      GrG\" GS}5      GrG\" GST5      GrG\" GSU5      GrG\" GSV5      GrG\" GSW5      GrG\" GSX5      GrG\" GSY5      GrG\" GS~5      GrG\" GS5      GrG\" GSZ5      GrG\" GS[5      GrG\" GS\5      GrG\" GS]5      GrG\" GS^5      GrG\" GS_5      GrG\" GS`5      GrG\" GSa5      GrG\" GSb5      GrG\" GSc5      GrG\" GSd5      GrG\" GSe5      GrG\" GSf5      GrG\" GSg5      GrG\" GSh5      GrG\" GSi5      GrG\" GSj5      GrG\" GSk5      GrG\" GSl5      GrG\" GSm5      GrG\" GSn5      GrG\" GSo5      GrG\" GSp5      GrG\" GSq5      GrG\" GSr5      GrG\" GSs5      GrG\" GSt5      GrG\" GSu5      GrG\" GSv5      GrG\" GSw5      GrG\" GSx5      GrG\" GSy5      GrG\" GSz5      GrG\" GS{5      GrG\" GS|5      GrG\" GS}5      GrG\" GS~5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      Gr G\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      Gr	G\" GS5      Gr
G\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" S@5      GrG\" GS_5      GrG\" GS`5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      Gr G\" GS5      Gr!G\" GS5      Gr"G\" GS5      Gr#G\" GS5      Gr$G\" GS5      Gr%G\Gr&G\" S 5      Gr'G\" S5      Gr(G\" S%5      Gr)G\" S,5      Gr*G\" S5      Gr+G\" S-5      Gr,G\Gr-G\" S 5      Gr.G\" S5      Gr/G\Gr0G\" S 5      Gr1G\" GSZ5      Gr2G\" GS[5      Gr3G\" GSX5      Gr4G\" GSY5      Gr5G\" GSZ5      Gr6G\" GS[5      Gr7G\" GS\5      Gr8G\" GS]5      Gr9G\" GS^5      Gr:G\" GS_5      Gr;G\" GS`5      Gr<G\" GSa5      Gr=G\" GSb5      Gr>G\" GSc5      Gr?G\" GSd5      Gr@G\" GSe5      GrAG\GrBG\" S5      GrCG\" S%5      GrDG\" GSQ5      GrEG\" S85      GrFG\GrGG\" S 5      GrHG\" S5      GrIG\" S%5      GrJG\" S,5      GrKG\GrLG\" S 5      GrMG\" S5      GrNG\" S%5      GrOG\" S,5      GrPG\GrQG\" S 5      GrRG\" S5      GrSG\" S%5      GrTG\GrUG\" S 5      GrVG\" S5      GrWG\GrXG\" S5      GrYG\" S%5      GrZG\" S5      Gr[G\" SC5      Gr\G\" GSQ5      Gr]G\" S85      Gr^G\Gr_G\" S 5      Gr`G\" GSZ5      GraG\" GS[5      GrbG\" GSX5      GrcG\" GSY5      GrdG\" GSZ5      GreG\" GS[5      GrfG\" GS\5      GrgG\" GS]5      GrhG\" GS^5      GriG\" GS_5      GrjG\" GS`5      GrkG\" GSa5      GrlG\" GSb5      GrmG\" GSc5      GrnG\" GSd5      GroG\" GSe5      GrpG\" GS\5      GrqG\" GS]5      GrrG\" GSf5      GrsG\" GSg5      GrtG\" GS^5      GruG\GrvG\" S 5      GrwG\" GSR5      GrxG\" S&5      GryG\" GSS5      GrzG\" S'5      Gr{G\" GST5      Gr|G\" GS
5      Gr}G\" GS5      Gr~G\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" S*5      GrG\" GS5      GrG\" GS5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\GrG\" S5      GrG\" GSZ5      GrG\" GS[5      GrG\" GSX5      GrG\" GSY5      GrG\" GS\5      GrG\" GS]5      GrG\" GSf5      GrG\" GSg5      GrG\" GSE5      GrG\GrG\" S5      GrG\" S%5      GrG\GrG\" S5      GrG\GrG\" S 5      GrG\" S5      GrG\" GSZ5      GrG\" GS[5      GrG\" GSX5      GrG\" GSY5      GrG\" GSZ5      GrG\" GS[5      GrG\" GS\5      GrG\" GS]5      GrG\" GS^5      GrG\" GS_5      GrG\" GS`5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\GrG\" S 5      GrG\" GSZ5      GrG\" GS\5      GrG\" GS]5      GrG\" GSf5      GrG\GrG\" S 5      GrG\" S5      GrG\GrG\" SB5      GrG\" S 5      GrG\" S5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\" S/5      GrG\" SC5      GrG\" GSP5      GrG\GrG\" SC5      GrG\" S*5      GrG\" SJ5      GrG\" SF5      GrG\" SG5      GrG\" SH5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" S)5      GrG\" GSU5      GrG\" GSV5      GrG\" GSW5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\" GSR5      GrG\" GST5      GrG\" GS5      GrG\" GS5      GrG\" GS5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      GrG\" S5      GrG\" S-5      GrG\" S.5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\GrG\" S 5      Gr G\" S5      GrG\GrG\" S 5      GrG\" S5      GrG\GrG\" S5      GrG\" S%5      GrG\" S5      GrG\" SC5      Gr	G\Gr
G\" SB5      GrG\" S 5      GrG\" S5      GrG\GrG\" S 5      GrG\" GSZ5      GrG\" GS\5      GrG\" GS^5      GrG\" GSi5      GrG\" GSj5      GrG\" GSk5      GrG\" GSl5      GrG\" GSm5      GrG\" GSn5      GrG\" GSo5      GrG\" GSp5      GrG\" GSt5      GrG\GrG\" S 5      GrG\" S5      GrG\" S%5      GrG\" S,5      Gr G\" S5      Gr!G\" S-5      Gr"G\Gr#G\" S 5      Gr$G\" S5      Gr%G\" GSZ5      Gr&G\" GS[5      Gr'G\" GSX5      Gr(G\" GS^5      Gr)G\Gr*G\" S 5      Gr+G\" S5      Gr,G\Gr-G\" S 5      Gr.G\" S5      Gr/G\" S%5      Gr0G\" S,5      Gr1G\Gr2G\" S 5      Gr3G\" S5      Gr4G\" S%5      Gr5G\" S,5      Gr6G\" S5      Gr7G\" S-5      Gr8G\Gr9G\" S 5      Gr:G\" S5      Gr;G\" S%5      Gr<G\" S,5      Gr=G\" S5      Gr>G\Gr?G\" S 5      Gr@G\" S5      GrAG\GrBG\" S 5      GrCG\" S5      GrDG\GrEG\" S5      GrFG\" S%5      GrGG\" S5      GrHG\" SB5      GrIG\GrJG\" S 5      GrKG\" GSZ5      GrLG\" GS[5      GrMG\" GSX5      GrNG\" GSY5      GrOG\" GSZ5      GrPG\" GS[5      GrQG\GrRG\" S5      GrSG\" S%5      GrTG\" SG5      GrUG\GrVG\" S 5      GrWG\" S5      GrXG\YGrZG\Gr[G\\Gr]G\^Gr_G\Gr`\GraG\bGrcG\GrdG\\GreG\GrfG\GrgG\\GrhG\\GriG\Gr[G\iGrjG\\GrkG\\GrlG\\GrmG\\GrnG\GroG\\GrpG\bGrqG\\GrrG\GrsG\GrtG\bGruG\\GrvG\\GrwG\LGrxG\GryG\GrzG\Gr{G\Gr|G\Gr}G\Gr~G\GrG\GrG\GrG\GrG\GrG\8GrG\GrG\#Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\\5      Gr " GS GSG\\5      Gr " GS GSG\\5      Gr " GS GSG\\5      Gr " GS GSG\\5      Gr " GS GSG\\5      Gr " GS GSG\\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS \5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS	 GS
\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS \5      Gr " GS! GS"\5      Gr " GS# GS$\5      Gr " GS% GS&\5      Gr " GS' GS(\5      Gr " GS) GS*\5      Gr " GS+ GS,\5      Gr " GS- GS.\5      Gr " GS/ GS0\5      Gr " GS1 GS2\5      Gr " GS3 GS4\5      Gr " GS5 GS6\5      Gr " GS7 GS8\5      Gr " GS9 GS:\5      Gr " GS; GS<\5      Gr " GS= GS>\5      Gr " GS? GS@\5      Gr " GSA GSB\5      Gr " GSC GSDG\5      Gr " GSE GSF\5      Gr " GSG GSH\5      Gr " GSI GSJ\5      Gr " GSK GSL\5      Gr " GSM GSN\5      Gr " GSO GSP\5      Gr " GSQ GSR\5      Gr " GSS GST\5      Gr " GSU GSV\5      Gr " GSW GSX\5      Gr " GSY GSZ\5      Gr " GS[ GS\\5      Gr " GS] GS^\5      Gr " GS_ GS`\5      Gr " GSa GSb\5      Gr " GSc GSd\5      Gr " GSe GSf\5      Gr " GSg GSh\5      Gr " GSi GSjG\5      Gr " GSk GSl\5      Gr " GSm GSn\5      Gr " GSo GSp\5      Gr " GSq GSr\5      Gr " GSs GSt\5      Gr " GSu GSv\5      Gr " GSw GSx\5      Gr " GSy GSz\5      Gr " GS{ GS|\5      Gr " GS} GS~\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GS\5      Gr " GS GSG\5      GrSGqG\" 5       GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS GrGS Gr GS GrGS Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr	 " GS GSG\5      Gr
 " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr " GS GS\5      Gr " GS GSG\5      Gr  " GS GS\5      Gr! " GS GSG\5      Gr" " GS GS\5      Gr# " GS GSG\5      Gr$ " GS GS\5      Gr% " GS GSG\5      Gr& " GS GS\5      Gr' " GS GSG\5      Gr( " GS GS\5      Gr) " GS GSG\5      Gr* " GS GS\5      Gr+ " GS GSG\5      Gr,GS Gr-GS	GS jGr.GS Gr/G\Z\GR`                  Gl1        / \GR`                  Gl2        GS Gr3G\Z\GRh                  Gl1        / \GRh                  Gl2        GS Gr5G\Z\GRl                  Gl1        G\7G\G\8" G\5      /\GRl                  Gl2        GS Gr9G\7\GRt                  Gl1        G\L/\GRt                  Gl2        GS  Gr;G\7\GRx                  Gl1        G\L/\GRx                  Gl2        GS Gr=\\GR|                  Gl1        G\7G\8" G\L5      /\GR|                  Gl2        GS\4GS jGr?G\Z\GR                  Gl1        G\7/\GR                  Gl2        GS\4GS jGrAG\\GR                  Gl1        / \GR                  Gl2        GS GrCG\\GR                  Gl1        G\8" G\L5      G\(G\7/\GR                  Gl2        GS\4GS jGrES\GR                  Gl1        / \GR                  Gl2        GS
GS jGrGg(      N)*   )__version__)OpenVRErrorc                       \ rS rSrSrSrg)Pack4Structure       N)__name__
__module____qualname____firstlineno___pack___static_attributes__r       I/home/james-whalen/.local/lib/python3.13/site-packages/openvr/__init__.pyr   r      s    Fr   r   r
   )LinuxDarwinWindowslibopenvr_api_32r   zlibopenvr_api_32.sor   zlibopenvr_api_32.dylibz+Libraries not available for this platform: libopenvr_api_64zlibopenvr_api_64.sopackageresource_namereturnc                     [         R                  R                  U 5      U-  n[        R	                  [         R                  R                  U5      5      n[        U5      $ )z/Replacement for pkg_resources.resource_filename)	importlib	resourcesfiles_exit_stackenter_contextas_filestr)r   r   refpaths       r   resource_filenamer&   9   sH    



#
#G
,}
<C$$Y%8%8%@%@%EFDt9r   openvrc                 6    U c  g [         R                  " U 5      $ N)ctypesbyref)args    r   r+   r+   K   s    
{||C  r   c                       \ rS rSrSrg)
VkDevice_TS   r   Nr   r   r   r   r   r   r   r   r.   r.   S       r   r.   c                       \ rS rSrSrg)VkPhysicalDevice_TW   r   Nr0   r   r   r   r3   r3   W   r1   r   r3   c                       \ rS rSrSrg)VkInstance_T[   r   Nr0   r   r   r   r6   r6   [   r1   r   r6   c                       \ rS rSrSrg)	VkQueue_T_   r   Nr0   r   r   r   r9   r9   _   r1   r   r9   c                       \ rS rSrSrg)ID3D12Resourced   r   Nr0   r   r   r   r<   r<   d   r1   r   r<   c                       \ rS rSrSrg)ID3D12CommandQueueh   r   Nr0   r   r   r   r?   r?   h   r1   r   r?            l    i   @   l                                            !   "   #   $   (   )   *   i  i'        i      i   i   IVRSystem_023   zvr/homezvr/game_theaterIVRApplications_007IVRSettings_003steamvr
requireHmdforcedDriver	forcedHmddisplayDebugdebugProcessPipedisplayDebugXdisplayDebugYsendSystemButtonToAllAppsloglevelipd
backgroundbackgroundUseDomeProjectionbackgroundCameraHeightbackgroundDomeRadius	gridColorplayAreaColortrackingLossColor	showStagedrawTrackingReferencesactivateMultipleDriversusingSpeakersspeakersForwardYawOffsetDegreesbasestationPowerManagement!ShowBaseStationPowerManagementTipneverKillProcessessupersampleScalemaxRecommendedResolutionmotionSmoothingmotionSmoothingOverrideframesToThrottleadditionalFramesToPredict
worldScalefovScalefovScaleInnerfovScaleUpperfovScaleLowerfovScaleFormatfovScaleLetterboxeddisableAsyncforceFadeOnBadTracking
mirrorViewshowLegacyMirrorViewshowMirrorViewmirrorViewDisplayModemirrorViewEyemirrorViewGeometrymirrorViewGeometryMaximizedshowPerfGraphstartMonitorFromAppLaunchstartCompositorFromAppLaunchstartDashboardFromAppLaunchstartOverlayAppsFromDashboardenableHomeAppCycleBackgroundImageTimeSec
retailDemo	ipdOffsetallowSupersampleFilteringsupersampleManualOverrideenableLinuxVulkanAsyncallowDisplayLockedMode+haveStartedTutorialForNativeChaperoneDriverdebugInputBindingdoNotFadeToGridenableSharedResourceJournalingenableSafeModepreferredRefreshRatelastVersionNoticelastVersionNoticeDatehmdDisplayColorGainRhmdDisplayColorGainGhmdDisplayColorGainBcustomIconStylecustomOffIconStylecustomIconForceUpdateglobalActionSetPriorityoverlayRenderQuality_2"blockOculusSDKOnOpenVRLaunchOptionblockOculusSDKOnAllLauncheshdcp14legacyCompatibilitydisplayPortTrainingModeusePrismallowFallbackMirrorWindowLinuxdisableKeyboardPrivacyopenxrmetaUnityPluginCompatibilitydirect_modeenablecountedidVidedidPiddriver_lighthouse
disableimudisableimuexcepthmdusedisambiguationdisambiguationdebugprimarybasestation	dbhistoryenableBluetoothPowerManagedBaseStationsPowerManagedBaseStations2 InactivityTimeoutForBaseStationsenableImuFallbackdriver_nullserialNumbermodelNumberwindowXwindowYwindowWidthwindowHeightrenderWidthrenderHeightsecondsFromVsyncToPhotonsdisplayFrequencydriver_holographicuserinterfaceStatusAlwaysOnTopMinimizeToTrayHidePopupsWhenStatusMinimizedscreenshotsscreenshotTypevrmStatusCheckIntervalvrmCheckForSteamnotificationsDoNotDisturbkeyboardTutorialCompletionsScaleXScaleYOffsetLeftXOffsetRightXOffsetY	Smoothing	perfcheckperfGraphInHMDallowTimingStoresaveTimingsOnExitperfTestDataGPUProfilinggpuBusMonitoringcollisionBoundsCollisionBoundsStyle CollisionBoundsGroundPerimeterOnCollisionBoundsCenterMarkerOnCollisionBoundsPlaySpaceOnCollisionBoundsFadeDistanceCollisionBoundsWallHeightCollisionBoundsColorGammaRCollisionBoundsColorGammaGCollisionBoundsColorGammaBCollisionBoundsColorGammaAenableDriverBoundsImportcameraenableCamerashowOnControllerenableCameraForCollisionBoundsroomViewcameraBoundsColorGammaRcameraBoundsColorGammaGcameraBoundsColorGammaBcameraBoundsColorGammaAcameraBoundsStrengthroomViewStyleaudiosetOsDefaultPlaybackDeviceenablePlaybackDeviceOverrideplaybackDeviceOverrideplaybackDeviceOverrideNamesetOsDefaultRecordingDeviceenableRecordingDeviceOverriderecordingDeviceOverriderecordingDeviceOverrideNameenablePlaybackMirrorplaybackMirrorDeviceplaybackMirrorDeviceNameonPlaybackMirrorDeviceactivePlaybackMirrorDevice%enablePlaybackMirrorIndependentVolumelastHmdPlaybackDeviceIdviveHDMIGaindualSpeakerAndJackOutputmuteMicMonitorpowerpowerOffOnExitturnOffScreensTimeoutturnOffControllersTimeoutreturnToWatchdogTimeoutautoLaunchSteamVROnButtonPresspauseCompositorOnStandby	dashboardenableDashboard
arcadeModepositiondesktopScaledashboardScalestandaloneSystemLayerallowSteamOverlaysallowVRGamepadUIallowVRGamepadUIViaGamescopesteamMatchesHMDFramerategrabHandleAcceleration
modelskinsblocked_by_safe_modeloadPriority$hmdAllowsClientToControlTextureIndexforceSystemLayerUseAppPosesWebInterfaceVRWebHelperDebuggerEnabledDebuggerPortTrackingOverridesAutosaveURL_legacy_steamvrinput_openxr
CurrentURLPreviousURLNeedToUpdateAutosaveDominantHandblockOculusSDKtrackers	DesktopUI	LastKnownHMDManufacturerHMDModelActualHMDDriverHMDSerialNumberRemoteClientIDDismissedWarningsinputleftThumbstickRotationrightThumbstickRotationthumbstickDeadzoneGpuSpeedXRRenderModelUuidCacheIVRChaperone_004IVRChaperoneSetup_006IVRCompositor_029ip  zsystem.HeadsetViewIVRHeadsetView_001IVRNotifications_002IVROverlay_028IVROverlayView_003gdc2015basetip
openxr_aimhandgripopenxr_gripopenxr_handmodelstatusIVRRenderModels_006IVRExtendedDisplay_001IVRTrackedCamera_006IVRScreenshots_001IVRResources_001IVRDriverManager_001   i   ii   IVRInput_010IVRIOBuffer_002IVRSpatialAnchors_001IVRDebug_001IVRIPCResourceManagerClient_002r=   e         i,  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i	  i
  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i   i!  i"  i    i  i  i  i  i  i  i  i  i  i  i  i  i    i  i  i  i  i  i  i    i  i  i  i  i  i  i    i  i  i  i  i    i  i  i  i  i    i  i  i   i  i    i  i  i  i  i  i	  i
  i  i  i  i  i  i  i  i    i  i  i  i  i  i  i  i  i  i  i     i!  i"  i#  i$  i%  i&  i'  i(  i)  i+  i-  i.  i/  i0  i1  i2  i4  5  i6  i7  i8  i9  i:  i;  i<  i>  i?  i@  iA  B  iC  iD  iE  i  i  i  i  i  i    i  i  i  i    i  i 	  i	  i	  i	  i	  i	  i`	  ia	  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i   ip  iq  ir  is  it  iu  iv  iw  ix  iy  iz  i{  iX  iZ  i*  i*  i*  i*  i*  i*  i@B 	   
            i   i   i   f   g   r@   i   j   k   l   m   n   o   p   q   r   s         i  i-  i.  i/  i0  i1  i2  i3  i4  i5  i6  i7  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i	  i
  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i0  i1  i2  i3  iX  iY  iZ  i[  i  i  i  i  i  i  i  i   i!  i"  i#  i$  i%  i&  i'  i(  i)  i*  i+  i4  iR  iS  iT  iU  iV  iW  iX  iY  iZ  i[  i\  i]  i^  i_  i`  ia  ib  ic  id  ie  if  ig  ih  i  i  iL  iM  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i@  iA  iB  ir  is  i  i  i  i  i  i  i  i  i  i  i	  i
  i  il  iN  2   3         r	            t   u   v   w   x   y   z   {   |   }   ~                                                                                                                                                            i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  iN  iO  iP  iQ  iR  iS  iT  iU  iV  iW  iX  iY  iZ  i[  4   7   5   6   <   =   >   ?   A   F   i   i    i @  i   i   i    i  @ i   i   i   i   c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)_VectorMixini,  c                 \    U R                  U R                  5       R                  " U6 5        g r)   )	_setArray	_getArray	__class__)selfargss     r   __init___VectorMixin.__init__-  s     t~~'11489r   c                     U R                   $ r)   vr  s    r   r  _VectorMixin._getArray0      vvr   c                 (    US S  U R                   S S & g r)   r  r  arrays     r   r  _VectorMixin._setArray3      !Hq	r   c                 (    U R                  5       U   $ r)   r  )r  keys     r   __getitem___VectorMixin.__getitem__6  s    ~~$$r   c                 4    [        U R                  5       5      $ r)   )lenr  r  s    r   __len___VectorMixin.__len__9  s    4>>#$$r   c                 (    X R                  5       U'   g r)   r  )r  r  values      r   __setitem___VectorMixin.__setitem__<  s     %r   c                 *    [        [        U 5      5      $ r)   r#   listr  s    r   __str___VectorMixin.__str__?  s    4:r   r   N)r   r   r   r   r  r  r  r  r  r  r  r   r   r   r   r  r  ,  s%    :%%&r   r  c                   &    \ rS rSrS rS rS rSrg)_MatrixMixiniC  c                     U R                   $ r)   mr  s    r   r  _MatrixMixin._getArrayD  r  r   c                 (    US S  U R                   S S & g r)   r  r  s     r   r  _MatrixMixin._setArrayG  r  r   c                 8    [        [        S U  5       5      5      $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr)   )r  ).0es     r   	<genexpr>'_MatrixMixin.__str__.<locals>.<genexpr>K  s     .AQs   r  r  s    r   r  _MatrixMixin.__str__J  s    4...//r   r   N)r   r   r   r   r  r  r  r   r   r   r   r  r  C  s    0r   r  c                   .    \ rS rSrSrS\S-  S-  4/rSrg)HmdMatrix34_tiN  zX
right-handed system
+y is up
+x is to the right
-z is forward
Distance unit is  meters
r  r
   rE   r   Nr   r   r   r   __doc__c_float_fields_r   r   r   r   r  r  N  s!     
w{a Hr   r  c                   *    \ rS rSrS\S-  S-  4/rSrg)HmdMatrix33_ti\  r  rE   r   Nr   r   r   r   r  r  r   r   r   r   r  r  \      	w{a Hr   r  c                   *    \ rS rSrS\S-  S-  4/rSrg)HmdMatrix44_tib  r  r
   r   Nr  r   r   r   r  r  b  r  r   r  c                   $    \ rS rSrS\S-  4/rSrg)HmdVector3_tih  r  rE   r   Nr  r   r   r   r  r  h      	gkHr   r  c                   $    \ rS rSrS\S-  4/rSrg)HmdVector4_tin  r  r
   r   Nr  r   r   r   r   r   n  r  r   r   c                   $    \ rS rSrS\S-  4/rSrg)HmdVector3d_tit  r  rE   r   Nr   r   r   r   c_doubler  r   r   r   r   r"  r"  t  s    	hlHr   r"  c                   $    \ rS rSrS\S-  4/rSrg)HmdVector2_tiz  r  rA   r   Nr  r   r   r   r&  r&  z  r  r   r&  c                   0    \ rS rSrS\4S\4S\4S\4/rSrg)HmdQuaternion_ti  wxyzr   Nr#  r   r   r   r(  r(    s%    	h	h	h	h	Hr   r(  c                   0    \ rS rSrS\4S\4S\4S\4/rSrg)HmdQuaternionf_ti  r)  r*  r+  r,  r   Nr  r   r   r   r.  r.    %    	g	g	g	g	Hr   r.  c                   0    \ rS rSrS\4S\4S\4S\4/rSrg)
HmdColor_ti  rgbar   Nr  r   r   r   r1  r1    r/  r   r1  c                   $    \ rS rSrS\S-  4/rSrg)	HmdQuad_ti  vCornersr
   r   N)r   r   r   r   r  r  r   r   r   r   r7  r7    s    	\A%&Hr   r7  c                   $    \ rS rSrS\4S\4/rSrg)
HmdRect2_ti  vTopLeftvBottomRightr   N)r   r   r   r   r&  r  r   r   r   r   r:  r:    s    	\"	&Hr   r:  c                   (    \ rS rSrSrS\4S\4/rSrg)VRBoneTransform_ti  z%Holds the transform for a single boner!  orientationr   N)	r   r   r   r   r  r   r.  r  r   r   r   r   r>  r>    s    / 
\"	()Hr   r>  c                   6    \ rS rSrS\4S\4S\4S\4S\4/rSrg)	VREyeTrackingData_ti  bActivebValidbTrackedvGazeOriginvGazeTargetr   N)r   r   r   r   openvr_boolr  r  r   r   r   r   rA  rA    s1    	K 	;	[!	%	%Hr   rA  c                   @    \ rS rSrSrS\S-  4S\S-  4S\S-  4/rSrg)	DistortionCoordinates_ti  z
Used to return the post-distortion UVs for each color channel.
UVs range from 0 to 1 with 0,0 in the upper left corner of the
source render target. The 0,0 to 1,1 range covers a single eye.
rfRedrA   rfGreenrfBluer   Nr  r   r   r   rI  rI    s4     
'A+	GaK 	7Q;Hr   rI  c                   *    \ rS rSrS\4S\4S\4/rSrg)	Texture_ti  handleeTypeeColorSpacer   N)	r   r   r   r   c_void_pETextureTypeEColorSpacer  r   r   r   r   rN  rN    s!    	8	,	$Hr   rN  c                   4    \ rS rSrSrS\4S\4S\4S\4/rSrg)	VRTextureBounds_trj  zg
Allows the application to control what part of the provided texture will be used in the
frame buffer.
uMinvMinuMaxvMaxr   Nr  r   r   r   rV  rV    s0     
				Hr   rV  c                   "    \ rS rSrSrS\4/rSrg)VRTextureWithPose_trk  zpAllows specifying pose used to render provided scene texture (if different from value returned by WaitGetPoses).mDeviceToAbsoluteTrackingr   N)r   r   r   r   r  r  r  r   r   r   r   r\  r\    s    z 
%m4Hr   r\  c                   *    \ rS rSrS\4S\4S\4/rSrg)VRTextureDepthInfo_trl  rO  mProjectionvRanger   N)	r   r   r   r   rR  r  r&  r  r   r   r   r   r_  r_    s!    	8	&	< Hr   r_  c                       \ rS rSrS\4/rSrg)VRTextureWithDepth_trm  depthr   Nr   r   r   r   r_  r  r   r   r   r   rc  rc        	&'Hr   rc  c                       \ rS rSrS\4/rSrg)VRTextureWithPoseAndDepth_trn  rd  r   Nre  r   r   r   rh  rh    rf  r   rh  c                   *    \ rS rSrS\4S\4S\4/rSrg)DmabufPlane_tro  unOffsetunStridenFdr   N)r   r   r   r   c_uint32c_int32r  r   r   r   r   rj  rj    s!    	X	X	Hr   rj  c                   `    \ rS rSrS\4S\4S\4S\4S\4S\4S\4S	\4S
\4S\4S\S-  4/rSr	g)DmabufAttributes_trp  pNextunWidthunHeightunDepthunMipLevelsunArrayLayersunSampleCountunFormat
ulModifierunPlaneCountplaner
   r   N)
r   r   r   r   rR  rn  c_uint64rj  r  r   r   r   r   rq  rq    sf    	(	H	X	H	!	(#	(#	X	x 	"	-!#$Hr   rq  c                   @    \ rS rSrSrS\4S\4S\4S\4S\4S\4/r	S	r
g
)TrackedDevicePose_trq  z,describes a single pose for a tracked objectr]  	vVelocityvAngularVelocityeTrackingResultbPoseIsValidbDeviceIsConnectedr   N)r   r   r   r   r  r  r  ETrackingResultrG  r  r   r   r   r   r  r    s>    6 
%m4	l#	\*	O,	%	{+Hr   r  c                       \ rS rSrSrS\4S\" \5      4S\" \5      4S\" \	5      4S\" \
5      4S\4S	\4S
\4S\4S\4/
rSrg)VRVulkanTextureData_trr  z
Data required for passing Vulkan textures to IVRCompositor::Submit.
Be sure to call OpenVR_Shutdown before destroying these resources.
Please see https://github.com/ValveSoftware/openvr/wiki/Vulkan for Vulkan-specific documentation
m_nImage	m_pDevicem_pPhysicalDevicem_pInstancem_pQueuem_nQueueFamilyIndexm_nWidth	m_nHeight	m_nFormatm_nSampleCountr   N)r   r   r   r   r  r}  POINTERr.   r3   r6   r9   rn  r  r   r   r   r   r  r     su     
X	gj)*	g&89:	-.	WY'(	)	X	h	h	8$Hr   r  c                   (    \ rS rSrSrS\4S\4/rSrg)VRVulkanTextureArrayData_trs  z
Data required for passing Vulkan texture arrays to IVRCompositor::Submit.
Be sure to call OpenVR_Shutdown before destroying these resources.
Please see https://github.com/ValveSoftware/openvr/wiki/Vulkan for Vulkan-specific documentation
m_unArrayIndexm_unArraySizer   Nr   r   r   r   r  rn  r  r   r   r   r   r  r  5  s      
8$	(#Hr   r  c                   F    \ rS rSrSrS\" \5      4S\" \5      4S\4/r	Sr
g)D3D12TextureData_trt  z
Data required for passing D3D12 textures to IVRCompositor::Submit.
Be sure to call OpenVR_Shutdown before destroying these resources.
m_pResourcem_pCommandQueuem_nNodeMaskr   N)r   r   r   r   r  r  r<   r?   rn  r  r   r   r   r   r  r  B  s3     
/0	G$678	!Hr   r  c                   "    \ rS rSrSrS\4/rSrg)VREvent_Controller_tiO  z!used for controller button eventsbuttonr   Nr  r   r   r   r  r  O  s    + 
8Hr   r  c                   4    \ rS rSrSrS\4S\4S\4S\4/rSrg)	VREvent_Mouse_tiW  z0used for simulated mouse events in overlay spacer*  r+  r  cursorIndexr   N	r   r   r   r   r  r  rn  r  r   r   r   r   r  r  W  s,    : 
g	g	8	!	Hr   r  c                   :    \ rS rSrSrS\4S\4S\4S\4S\4/rSrg	)
VREvent_Scroll_tib  z%used for simulated mouse wheel scrollxdeltaydeltaunusedviewportscaler  r   Nr  r   r   r   r  r  b  s6    / 
7	7	8	'"	!Hr   r  c                   @    \ rS rSrSrS\4S\4S\4S\4S\4S\4/rS	rg
)VREvent_TouchPadMove_tin  z
when in mouse input mode you can receive data from the touchpad, these events are only sent if the users finger
is on the touchpad (or just released from it). These events are sent to overlays with the VROverlayFlags_SendVRTouchpadEvents
flag set.
bFingerDownflSecondsFingerDownfValueXFirstfValueYFirst
fValueXRaw
fValueYRawr   N)	r   r   r   r   r  rG  r  r  r   r   r   r   r  r  n  s@     
$	(	!	!	w	wHr   r  c                   (    \ rS rSrSrS\4S\4/rSrg)VREvent_Notification_ti  zDnotification related events. Details will still change at this pointulUserValuenotificationIdr   N	r   r   r   r   r  r}  rn  r  r   r   r   r   r  r    s    N 
!	8$Hr   r  c                   4    \ rS rSrSrS\4S\4S\4S\4/rSrg)	VREvent_Process_ti  zUsed for events about processespidoldPidbForcedbConnectionLostr   N)	r   r   r   r   r  rn  rG  r  r   r   r   r   r  r    s.    ) 
	8	K 	K(	Hr   r  c                   4    \ rS rSrSrS\4S\4S\4S\4/rSrg)	VREvent_Overlay_ti  $Used for a few events about overlaysoverlayHandle
devicePathmemoryBlockIdr  r   Nr  r   r   r   r  r    s.    . 
(#	x 	(#	!	Hr   r  c                   "    \ rS rSrSrS\4/rSrg)VREvent_Status_tru  r  statusStater   Nr  r   r   r   r  r    s    . 
!Hr   r  c                   4    \ rS rSrSrS\S-  4S\4S\4/rSrg)	VREvent_Keyboard_ti  zUsed for keyboard events	cNewInputrZ   
uUserValuer  r   N)	r   r   r   r   r  c_charr}  r  r   r   r   r   r  r    s*    " 
fqj!	x 	(#Hr   r  c                       \ rS rSrS\4/rSrg)VREvent_Ipd_ti  	ipdMetersr   Nr  r   r   r   r  r    s    	gHr   r  c                   $    \ rS rSrS\4S\4/rSrg)VREvent_Chaperone_ti  m_nPreviousUniversem_nCurrentUniverser   Nr   r   r   r   r}  r  r   r   r   r   r  r    s    	)	x(Hr   r  c                   @    \ rS rSrSrS\4S\4S\4S\4S\4S\4/rS	rg
)VREvent_Reserved_ti  z Not actually used for any events	reserved0	reserved1	reserved2	reserved3	reserved4	reserved5r   N)r   r   r   r   r  r}  r  r   r   r   r   r  r    s>    * 
h	h	h	h	h	hHr   r  c                       \ rS rSrS\4/rSrg)VREvent_PerformanceTest_ti  m_nFidelityLevelr   Nr   r   r   r   rn  r  r   r   r   r   r  r    s    	X&Hr   r  c                       \ rS rSrS\4/rSrg)VREvent_SeatedZeroPoseReset_ti  bResetBySystemMenur   Nr   r   r   r   rG  r  r   r   r   r   r  r    s    	{+Hr   r  c                   $    \ rS rSrS\4S\4/rSrg)VREvent_Screenshot_ti  rO  typer   Nr  r   r   r   r  r    s    	8	Hr   r  c                       \ rS rSrS\4/rSrg)VREvent_ScreenshotProgress_ti  progressr   Nr  r   r   r   r  r    s    	WHr   r  c                   $    \ rS rSrS\4S\4/rSrg)VREvent_ApplicationLaunch_ti  r  unArgsHandler   Nr  r   r   r   r  r    s    		"Hr   r  c                   $    \ rS rSrS\4S\4/rSrg)VREvent_EditingCameraSurface_ti  r  nVisualModer   N)r   r   r   r   r}  rn  r  r   r   r   r   r  r    s    	(#	!Hr   r  c                       \ rS rSrS\4/rSrg)VREvent_MessageOverlay_ti  unVRMessageOverlayResponser   Nr  r   r   r   r  r    s    	%x0Hr   r  c                   $    \ rS rSrS\4S\4/rSrg)VREvent_Property_ti  	containerpropr   N)r   r   r   r   PropertyContainerHandle_tETrackedDevicePropertyr  r   r   r   r   r  r    s    	/0	'(Hr   r  c                   6    \ rS rSrS\4S\4S\4S\4S\4/rSrg)	VREvent_HapticVibration_trv  containerHandlecomponentHandlefDurationSeconds
fFrequency
fAmplituder   Nr   r   r   r   r}  r  r  r   r   r   r   r  r    s1    	H%	H%	W%	w	wHr   r  c                       \ rS rSrS\4/rSrg)VREvent_WebConsole_ti	  webConsoleHandler   N)r   r   r   r   WebConsoleHandle_tr  r   r   r   r   r  r  	  s    	/0Hr   r  c                   0    \ rS rSrS\4S\4S\4S\4/rSrg)VREvent_InputBindingLoad_ti	  ulAppContainerpathMessagepathUrlpathControllerTyper   N)r   r   r   r   r  r}  r  r   r   r   r   r  r  	  s*    	45	!	H	x(	Hr   r  c                   0    \ rS rSrS\4S\4S\4S\4/rSrg)!VREvent_InputActionManifestLoad_ti	  
pathAppKeyr  pathMessageParampathManifestPathr   Nr  r   r   r   r  r  	  s)    	x 	!	X&	X&	Hr   r  c                       \ rS rSrS\4/rSrg)VREvent_SpatialAnchor_ti 	  unHandler   N)r   r   r   r   SpatialAnchorHandle_tr  r   r   r   r   r  r   	  s    	*+Hr   r  c                   <    \ rS rSrS\4S\4S\4S\4S\4S\4/rSrg	)
VREvent_ProgressUpdate_ti&	  ulApplicationPropertyContainer
pathDevicepathInputSourcepathProgressActionpathIcon	fProgressr   Nr  r   r   r   r  r  &	  s9    	)84	x 	H%	x(	X	gHr   r  c                       \ rS rSrS\4/rSrg)VREvent_ShowUI_ti1	  rP  r   N)r   r   r   r   EShowUITyper  r   r   r   r   r  r  1	      	+Hr   r  c                       \ rS rSrS\4/rSrg)VREvent_ShowDevTools_ti7	  nBrowserIdentifierr   N)r   r   r   r   ro  r  r   r   r   r   r   r   7	  s    	w'Hr   r   c                       \ rS rSrS\4/rSrg)VREvent_HDCPError_ti=	  eCoder   N)r   r   r   r   
EHDCPErrorr  r   r   r   r   r#  r#  =	  s    	*Hr   r#  c                       \ rS rSrS\4/rSrg)VREvent_AudioVolumeControl_tiC	  fVolumeLevelr   Nr  r   r   r   r'  r'  C	  s    	!Hr   r'  c                       \ rS rSrS\4/rSrg)VREvent_AudioMuteControl_tiI	  bMuter   Nr  r   r   r   r*  r*  I	  r  r   r*  c                      \ rS rSr/ S\4PS\4PS\4PS\4PS\4PS\	4PS\
4PS	\4PS
\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\4PS\ 4PS\!4PS \"4Pr#S!r$g")#VREvent_Data_tiO	  reserved
controllermousescrollprocessnotificationoverlayrZ  r   rk   	chaperoneperformanceTesttouchPadMoveseatedZeroPoseReset
screenshotscreenshotProgressapplicationLaunchcameraSurfacemessageOverlaypropertyhapticVibration
webConsoleinputBindingactionManifestspatialAnchorprogressUpdateshowUishowDevTools	hdcpErroraudioVolumeControlaudioMuteControlr   N)%r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#  r'  r*  r  r   r   r   r   r-  r-  O	  s    	'( 	+,  
/"  
#$	 
 
%&  
/0  
%&  
#$  
'(  
  
)*  
56  
/0  
 =>  
+,   
;<! " 
9:# $ 
89% & 
34' ( 
'() * 
56+ , 
+,- . 
34/ 0 
<=1 2 
123 4 
345 6 
#$7 8 
/09 : 
)*; < 
;<= > 
78? Hr   r-  c                   4    \ rS rSrSrS\4S\4S\4S\4/r	Sr
g)		VREvent_tis	  z9An event posted by the server to all running applications	eventTypetrackedDeviceIndexeventAgeSecondsdatar   N)r   r   r   r   r  rn  TrackedDeviceIndex_tr  r-  r  r   r   r   r   rK  rK  s	  s/    C 
h	34	G$	 	Hr   rK  c                   .    \ rS rSrSrS\4S\4S\4/rSrg)RenderModel_ComponentState_ti~	  zmDescribes state information about a render-model component, including transforms and other dynamic propertiesmTrackingToComponentRenderModelmTrackingToComponentLocaluPropertiesr   N)	r   r   r   r   r  r  VRComponentPropertiesr  r   r   r   r   rR  rR  ~	  s'    w 
+M:	$m4	-.Hr   rR  c                   4    \ rS rSrSrS\" \5      4S\4/rSr	g)HiddenAreaMesh_ti	  a=  
The mesh to draw into the stencil (or depth) buffer to perform
early stencil (or depth) kills of pixels that will never appear on the HMD.
This mesh draws on all the pixels that will be hidden after distortion.

If the HMD does not provide a visible area mesh pVertexData will be
NULL and unTriangleCount will be 0.
pVertexDataunTriangleCountr   N)
r   r   r   r   r  r  r&  rn  r  r   r   r   r   rX  rX  	  s%     
-.	H%Hr   rX  c                   (    \ rS rSrSrS\4S\4/rSrg)VRControllerAxis_ti	  z5contains information about one axis on the controllerr*  r+  r   Nr  r   r   r   r\  r\  	  s    ? 
g	gHr   r\  c                   :    \ rS rSrSrS\4S\4S\4S\S-  4/rSr	g	)
VRControllerState_ti	  z:Holds all the state of a controller at one moment in time.unPacketNumulButtonPressedulButtonTouchedrAxisrF   r   N)
r   r   r   r   r  rn  r}  r\  r  r   r   r   r   r^  r^  	  s4    D 
!	H%	H%	$q()	Hr   r^  c                   B    \ rS rSrS\4S\4S\4S\4S\4S\4S\4/rS	r	g
)CameraVideoStreamFrameHeader_ti	  
eFrameTypenWidthnHeightnBytesPerPixelnFrameSequencetrackedDevicePoseulFrameExposureTimer   N)
r   r   r   r   EVRTrackedCameraFrameTypern  r  r}  r  r   r   r   r   rd  rd  	  sC    	01	8	H	8$	8$	12	)Hr   rd  c                      ^  \ rS rSrSrS U 4S jjrS\4S\4S\4S\4S\4S	\4S
\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\	4S\4S\4S\4/r
SrU =r$ )!Compositor_FrameTimingi	  z7Provides a single frame's timing information to the appc                 R   > Uc  [        [        5      n[        TU ]  " U/UQ70 UD6  g r)   )sizeofrn  superr  r  m_nSizer  kwargsr  s       r   r  Compositor_FrameTiming.__init__	  s*    ?34G24262r   rs  m_nFrameIndexm_nNumFramePresentsm_nNumMisPresentedm_nNumDroppedFramesm_nReprojectionFlagsm_flSystemTimeInSecondsm_flPreSubmitGpuMsm_flPostSubmitGpuMsm_flTotalRenderGpuMsm_flCompositorRenderGpuMsm_flCompositorRenderCpuMsm_flCompositorIdleCpuMsm_flClientFrameIntervalMsm_flPresentCallCpuMsm_flWaitForPresentCpuMsm_flSubmitFrameMsm_flWaitGetPosesCalledMsm_flNewPosesReadyMsm_flNewFrameReadyMsm_flCompositorUpdateStartMsm_flCompositorUpdateEndMsm_flCompositorRenderStartMs	m_HmdPosem_nNumVSyncsReadyForUsem_nNumVSyncsToFirstViewm_flTransferLatencyMsr   r)   )r   r   r   r   r  r  rn  r$  r  r  r  r   __classcell__r  s   @r   rn  rn  	  s    A3 
H	(#	)	x(	)	*	"H-	w'	(	)	$g.	$g.	"G,	$g.	)	"G,	g&	#W-	(	(	&0	$g.	&0	)*	"H-	"H-	 '*7Hr   rn  c                   (    \ rS rSrSrS\4S\4/rSrg)Compositor_BenchmarkResultsi	  z0Provides compositor benchmark results to the appm_flMegaPixelsPerSecond%m_flHmdRecommendedMegaPixelsPerSecondr   Nr  r   r   r   r  r  	  s    : 
#G,	0':Hr   r  c                   R   ^  \ rS rSrSrS
U 4S jjrS\4S\4S\4S\4S\4/rS	rU =r	$ )DriverDirectMode_FrameTimingi	  z2Frame timing data provided by direct mode drivers.c                 R   > Uc  [        [        5      n[        TU ]  " U/UQ70 UD6  g r)   )rp  r  rq  r  rr  s       r   r  %DriverDirectMode_FrameTiming.__init__	  s*    ?9:G24262r   rs  rw  rx  ry  rz  r   r)   )
r   r   r   r   r  r  rn  r  r   r  r  s   @r   r  r  	  s<    <3 
H	)	x(	)	*Hr   r  c                   0    \ rS rSrS\4S\4S\4S\4/rSrg)ImuSample_ti	  fSampleTimevAccelvGyrounOffScaleFlagsr   N)	r   r   r   r   r$  r"  rn  r  r   r   r   r   r  r  	  s)    	!	=!	- 	H%	Hr   r  c                   $    \ rS rSrS\4S\4/rSrg)AppOverrideKeys_ti
  pchKeypchValuer   N)r   r   r   r   c_char_pr  r   r   r   r   r  r  
  s    	8	XHr   r  c                       \ rS rSrSrS\4S\4S\4S\4S\4S\4S	\4S
\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4S\4/rSrg)Compositor_CumulativeStatsi	
  z
Cumulative stats for current application.  These are not cleared until a new app connects,
but they do stop accumulating once the associated app disconnects.
m_nPidrw  ry  m_nNumReprojectedFramesm_nNumFramePresentsOnStartupm_nNumDroppedFramesOnStartup m_nNumReprojectedFramesOnStartupm_nNumLoadingm_nNumFramePresentsLoadingm_nNumDroppedFramesLoadingm_nNumReprojectedFramesLoadingm_nNumTimedOutm_nNumFramePresentsTimedOutm_nNumDroppedFramesTimedOutm_nNumReprojectedFramesTimedOutm_nNumFrameSubmitsm_flSumCompositorCPUTimeMSm_flSumCompositorGPUTimeMSm_flSumTargetFrameTimesm_flSumApplicationCPUTimeMSm_flSumApplicationGPUTimeMSm_nNumFramesWithDepthr   N)	r   r   r   r   r  rn  vrshared_doubler  r   r   r   r   r  r  	
  s     
8	)	)	"H-	'2	'2	+X6	(#	%x0	%x0	)84	8$	&1	&1	*H5	x(	%7	%7	"O4	&8	&8	 (+-Hr   r  c            	       H    \ rS rSrS\4S\4S\4S\4S\4S\4S\4S	\4/rS
rg)Compositor_StageRenderSettingsi)
  m_PrimaryColorm_SecondaryColorm_flVignetteInnerRadiusm_flVignetteOuterRadiusm_flFresnelStrengthm_bBackfaceCullingm_bGreyscalem_bWireframer   N)	r   r   r   r   r1  r  rG  r  r   r   r   r   r  r  )
  sI    	:&	Z(	"G,	"G,	(	{+	%	%	Hr   r  c                   4    \ rS rSrSrS\4S\4S\4S\4/rSrg)	NotificationBitmap_ti6
  zUsed for passing graphic datam_pImageDatar  r  m_nBytesPerPixelr   N)	r   r   r   r   r  rR  ro  r  r   r   r   r   r  r  6
  s.    ' 
"	W	g	W%	Hr   r  c                   *    \ rS rSrS\4S\4S\4/rSrg)VROverlayIntersectionParams_tiA
  vSource
vDirectioneOriginr   N)r   r   r   r   r  ETrackingUniverseOriginr  r   r   r   r   r  r  A
  s"    	L!	|$	+,Hr   r  c                   0    \ rS rSrS\4S\4S\4S\4/rSrg)VROverlayIntersectionResults_tiI
  vPointvNormalvUVs	fDistancer   N)	r   r   r   r   r  r&  r  r  r   r   r   r   r  r  I
  s)    	< 	L!		g	Hr   r  c                   0    \ rS rSrS\4S\4S\4S\4/rSrg)IntersectionMaskRectangle_tiR
  m_flTopLeftXm_flTopLeftY	m_flWidth
m_flHeightr   Nr  r   r   r   r  r  R
  s)    	!	!	g	w	Hr   r  c                   *    \ rS rSrS\4S\4S\4/rSrg)IntersectionMaskCircle_ti[
  m_flCenterXm_flCenterY
m_flRadiusr   Nr  r   r   r   r  r  [
  s!    	 	 	wHr   r  c                   (    \ rS rSrSrS\4S\4/rSrg))VROverlayIntersectionMaskPrimitive_Data_tic
  zaNOTE!!! If you change this you MUST manually update openvr_interop.cs.py and openvr_api_flat.h.pym_Rectanglem_Circler   N)	r   r   r   r   r  r  r  r  r   r   r   r   r  r  c
  s     k 
34	-.Hr   r  c                   $    \ rS rSrS\4S\4/rSrg)$VROverlayIntersectionMaskPrimitive_til
  m_nPrimitiveTypem_Primitiver   N)r   r   r   r   'EVROverlayIntersectionMaskPrimitiveTyper  r  r   r   r   r   r  r  l
  s    	DE	ABHr   r  c                   4    \ rS rSrSrS\4S\4S\4S\4/rSrg)	VROverlayProjection_tis
  zRDefines the project used in an overlay that is using SetOverlayTransformProjectionfLeftfRightfTopfBottomr   Nr  r   r   r   r  r  s
  s.    \ 
'	7		G	Hr   r  c                   *    \ rS rSrS\4S\4S\4/rSrg)VROverlayView_ti~
  r  texturetextureBoundsr   N)	r   r   r   r   VROverlayHandle_trN  rV  r  r   r   r   r   r  r  ~
  s#    	+,	I	+,Hr   r  c                   f    \ rS rSrS\" \5      4S\" \5      4S\" \5      4S\" \5      4S\	4/r
Srg)	VRVulkanDevice_ti
  r  r  r  r  m_uQueueFamilyIndexr   N)r   r   r   r   r  r6   r.   r3   r9   rn  r  r   r   r   r   r  r  
  sF    	-.	gj)*	g&89:	WY'(	)Hr   r  c                   $    \ rS rSrS\4S\4/rSrg)VRNativeDevice_ti
  rO  rP  r   N)r   r   r   r   rR  EDeviceTyper  r   r   r   r   r  r  
  s    	8	+Hr   r  c                   4    \ rS rSrSrS\4S\4S\S-  4/rSrg)	RenderModel_Vertex_ti
  z!A single vertex in a render model	vPositionr  rfTextureCoordrA   r   N)	r   r   r   r   r  r  r  r  r   r   r   r   r  r  
  s*    + 
l#	L!	7Q;'Hr   r  c                   B    \ rS rSrS\4S\4S\" \5      4S\4S\4/rSr	g)	RenderModel_TextureMap_ti
  rs  rt  rubTextureMapDataformatrv  r   N)
r   r   r   r   c_uint16r  c_uint8EVRRenderModelTextureFormatr  r   r   r   r   r   r   
  s7    	H	X	gg./	./	!Hr   r   c                   N    \ rS rSrS\" \5      4S\4S\" \5      4S\4S\4/r	Sr
g)	RenderModel_ti
  rVertexDataunVertexCount
rIndexDatarZ  diffuseTextureIdr   N)r   r   r   r   r  r  rn  r  TextureID_tr  r   r   r   r   r  r  
  s<    	 456	(#	wx()	H%	[)Hr   r  c                       \ rS rSrS\4/rSrg)"RenderModel_ControllerMode_State_ti
  bScrollWheelVisibler   Nr  r   r   r   r  r  
  s    	,Hr   r  c            
       N    \ rS rSrS\4S\4S\4S\4S\4S\4S\4S	\4S
\4/	rSrg)InputAnalogActionData_ti
  rB  activeOriginr*  r+  r,  deltaXdeltaYdeltaZfUpdateTimer   N	r   r   r   r   rG  VRInputValueHandle_tr  r  r   r   r   r   r  r  
  sO    	K 	-.	g	g	g	7	7	7	 
Hr   r  c                   6    \ rS rSrS\4S\4S\4S\4S\4/rSrg)	InputDigitalActionData_ti
  rB  r  bStatebChangedr  r   Nr  r   r   r   r  r  
  s2    	K 	-.	;	[!	 Hr   r  c                   *    \ rS rSrS\4S\4S\4/rSrg)InputPoseActionData_ti
  rB  r  poser   N)	r   r   r   r   rG  r  r  r  r   r   r   r   r  r  
  s#    	K 	-.	$%Hr   r  c                   $    \ rS rSrS\4S\4/rSrg)InputSkeletalActionData_ti
  rB  r  r   N)r   r   r   r   rG  r  r  r   r   r   r   r!  r!  
  s    	K 	-.Hr   r!  c                   0    \ rS rSrS\4S\4S\S-  4/rSrg)InputOriginInfo_ti
  r  rM  rchRenderModelComponentNamer^   r   N)	r   r   r   r   r  rP  r  r  r   r   r   r   r#  r#  
  s'    	+,	34	&5Hr   r#  c                   T    \ rS rSrS\S-  4S\S-  4S\S-  4S\S-  4S\S-  4/rS	rg
)InputBindingInfo_ti
  rchDevicePathNamer^   rchInputPathNamerchModeNamerchSlotNamerchInputSourceTyperQ   r   N)r   r   r   r   r  r  r   r   r   r   r&  r&  
  sE    	fsl+	Vc\*	%	%	v{+Hr   r&  c                   6    \ rS rSrS\4S\4S\4S\4S\4/rSr	g)	VRActiveActionSet_ti
  ulActionSetulRestrictedToDeviceulSecondaryActionSet	unPadding	nPriorityr   N)
r   r   r   r   VRActionSetHandle_tr  rn  ro  r  r   r   r   r   r-  r-  
  s4    	+,	!56	!45	h	gHr   r-  c                   4    \ rS rSrSrS\S-  4S\S-  4/rSrg)	VRSkeletalSummaryData_ti
  z<Contains summary information about the current skeletal poseflFingerCurlrF   flFingerSplayr
   r   Nr  r   r   r   r5  r5  
  s&    F 
1%	'A+&Hr   r5  c                       \ rS rSrS\4/rSrg)SpatialAnchorPose_ti  mAnchorToAbsoluteTrackingr   N)r   r   r   r   r  r  r   r   r   r   r9  r9    s    	$m4Hr   r9  c                       \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rSrg)COpenVRContexti  c                 *   S U l         S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l	        S U l
        S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l        g r)   m_pVRSystemm_pVRChaperonem_pVRChaperoneSetupm_pVRCompositorm_pVRHeadsetViewm_pVROverlaym_pVROverlayViewm_pVRResourcesm_pVRRenderModelsm_pVRExtendedDisplaym_pVRSettingsm_pVRApplicationsm_pVRTrackedCameram_pVRScreenshotsm_pVRDriverManager
m_pVRInputm_pVRIOBufferm_pVRSpatialAnchors
m_pVRDebugm_pVRNotificationsm_pVRIPCResourceManagerClientr  s    r   r  COpenVRContext.__init__      "#' # $  $"!%$(!!!%"& $"&!#' "&-1*r   c                 ^    [         [        5       :w  a  U R                  5         [        5       q g g r)   )	_vr_tokengetInitTokenclearr  s    r   
checkClearCOpenVRContext.checkClear%  s!    &JJL$I 'r   c                 *   S U l         S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l	        S U l
        S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l        S U l        g r)   r>  r  s    r   rY  COpenVRContext.clear+  rU  r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  r?  	IVRSystemr  s    r   VRSystemCOpenVRContext.VRSystemB  s.    #({Dr   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  r@  IVRChaperoner  s    r   VRChaperoneCOpenVRContext.VRChaperoneH  .    &"..D"""r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rA  IVRChaperoneSetupr  s    r   VRChaperoneSetupCOpenVRContext.VRChaperoneSetupN  /    ##+'8':D$'''r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rB  IVRCompositorr  s    r   VRCompositorCOpenVRContext.VRCompositorT  s.    '#0?D ###r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rD  
IVROverlayr  s    r   	VROverlayCOpenVRContext.VROverlayZ  s.    $ *D   r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rE  IVROverlayViewr  s    r   VROverlayViewCOpenVRContext.VROverlayView`  /      ($2$4D!$$$r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rC  IVRHeadsetViewr  s    r   VRHeadsetViewCOpenVRContext.VRHeadsetViewf  rx  r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rF  IVRResourcesr  s    r   VRResourcesCOpenVRContext.VRResourcesl  rf  r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rL  IVRScreenshotsr  s    r   VRScreenshotsCOpenVRContext.VRScreenshotsr  rx  r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rG  IVRRenderModelsr  s    r   VRRenderModelsCOpenVRContext.VRRenderModelsx  /    !!)%4%6D"%%%r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rH  IVRExtendedDisplayr  s    r   VRExtendedDisplay COpenVRContext.VRExtendedDisplay~  s/    $$,(:(<D%(((r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rI  IVRSettingsr  s    r   
VRSettingsCOpenVRContext.VRSettings  .    %!,D!!!r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rJ  IVRApplicationsr  s    r   VRApplicationsCOpenVRContext.VRApplications  r  r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rK  IVRTrackedCamerar  s    r   VRTrackedCameraCOpenVRContext.VRTrackedCamera  /    ""*&6&8D#&&&r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rM  IVRDriverManagerr  s    r   VRDriverManagerCOpenVRContext.VRDriverManager  r  r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rN  IVRInputr  s    r   VRInputCOpenVRContext.VRInput  )    ??"&jDOr   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rO  IVRIOBufferr  s    r   
VRIOBufferCOpenVRContext.VRIOBuffer  r  r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rP  IVRSpatialAnchorsr  s    r   VRSpatialAnchorsCOpenVRContext.VRSpatialAnchors  rk  r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rQ  IVRDebugr  s    r   VRDebugCOpenVRContext.VRDebug  r  r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rR  IVRNotificationsr  s    r   VRNotificationsCOpenVRContext.VRNotifications  r  r   c                 r    U R                  5         U R                  c  [        5       U l        U R                  $ r)   )rZ  rS  IVRIPCResourceManagerClientr  s    r   VRIPCResourceManager#COpenVRContext.VRIPCResourceManager  s/    --51L1ND.111r   )rJ  r@  rA  rB  rQ  rM  rH  rC  rO  rS  rN  rR  rD  rE  rG  rF  rL  rI  rP  r?  rK  N)r   r   r   r   r  rZ  rY  r`  rd  ri  rn  rr  rv  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r<  r<    sz    2.'2. #($!%%#%&)"&''"('2r   r<  c                  *    [         R                  5       $ r)   )_internal_module_contextr`  r   r   r   r`  r`    s    #,,..r   c                  *    [         R                  5       $ r)   )r  rd  r   r   r   rd  rd        #//11r   c                  *    [         R                  5       $ r)   )r  ri  r   r   r   ri  ri        #4466r   c                  *    [         R                  5       $ r)   )r  rn  r   r   r   rn  rn    s    #0022r   c                  *    [         R                  5       $ r)   )r  rr  r   r   r   rr  rr    s    #--//r   c                  *    [         R                  5       $ r)   )r  rv  r   r   r   rv  rv        #1133r   c                  *    [         R                  5       $ r)   )r  r{  r   r   r   r{  r{    r  r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r    r  r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r    r  r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r        #2244r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r    s    #5577r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r        #..00r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r    r  r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r        #3355r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r    r  r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r        #++--r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r    r  r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r  
  r  r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r    r  r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r    r  r   c                  *    [         R                  5       $ r)   )r  r  r   r   r   r  r    s    #88::r   c                      \ rS rSr/ S\" S\" \5      \" \5      5      4PS\" \\\	\	5      4PS\" S\\" \	5      \" \	5      \" \	5      \" \	5      5      4PS\" \
\\	\	\" \5      5      4PS\" \\5      4PS\" \
\" \	5      \" \5      5      4PS	\" \5      4PS
\" S\" \5      5      4PS\" S\" \5      \\" \5      5      4PS\" \
5      4PS\" \
\
5      4PS\" S\\	\" \5      \5      4PS\" \5      4PS\" \5      4PS\" \\\" \5      \\5      4PS\" \\5      4PS\" S\" \5      \" \5      \" \5      5      4PS\" \\5      4PS\" \\5      4PS\" \\5      4PS\" \
\5      4PS\" \
\\\" \5      5      4PS\" \	\\\" \5      5      4PS\" \\\\" \5      5      4PS\" \\\\" \5      5      4PS\" \\\\" \5      5      4PS\" \\\\\\\" \5      5      4PS\" \\\\\\" \5      5      4PS\" \\5      4PS \" \
\" \5      \5      4PS!\" \
\\" \5      \\" \5      5      4PS"\" \
\\" \5      \\" \5      \" \5      5      4PS#\" \\5      4PS$\" \\\ 5      4PS%\" \
\\" \!5      \5      4PS&\" \
\\\" \!5      \\" \5      5      4PS'\" S\\\"5      4PS(\" \\#5      4PS)\" \\$5      4PS*\" \
5      4PS+\" \
5      4PS,\" \
5      4PS-\" \
5      4PS.\" \%\5      4PS/\" S5      4PS0\" \\\5      4PS1\" \5      4Pr&S2r'g)3IVRSystem_FnTablei  getRecommendedRenderTargetSizeNgetProjectionMatrixgetProjectionRawcomputeDistortiongetEyeToHeadTransformgetTimeSinceLastVsyncgetD3D9AdapterIndexgetDXGIOutputInfogetOutputDeviceisDisplayOnDesktopsetDisplayVisibilitygetDeviceToAbsoluteTrackingPose/getSeatedZeroPoseToStandingAbsoluteTrackingPose,getRawZeroPoseToStandingAbsoluteTrackingPose$getSortedTrackedDeviceIndicesOfClassgetTrackedDeviceActivityLevelapplyTransform&getTrackedDeviceIndexForControllerRole&getControllerRoleForTrackedDeviceIndexgetTrackedDeviceClassisTrackedDeviceConnectedgetBoolTrackedDevicePropertygetFloatTrackedDevicePropertygetInt32TrackedDevicePropertygetUint64TrackedDeviceProperty getMatrix34TrackedDevicePropertygetArrayTrackedDevicePropertygetStringTrackedDevicePropertygetPropErrorNameFromEnumpollNextEventpollNextEventWithPose pollNextEventWithPoseAndOverlaysgetEventTypeNameFromEnumgetHiddenAreaMeshgetControllerStategetControllerStateWithPosetriggerHapticPulsegetButtonIdNameFromEnum!getControllerAxisTypeNameFromEnumisInputAvailableisSteamVRDrawingControllersshouldApplicationPause$shouldApplicationReduceRenderingWorkperformFirmwareUpdateacknowledgeQuit_ExitinggetAppContainerFilePathsgetRuntimeVersionr   )(r   r   r   r   OPENVR_FNTABLE_CALLTYPEr  rn  r  EVREyer  rG  rI  r  r}  ro  rS  r6   r  r  ETrackedDeviceClassrP  EDeviceActivityLevelETrackedControllerRoler  ETrackedPropertyErrorPropertyTypeTag_trR  r  rK  r  EVREventTyperX  EHiddenAreaMeshTyper^  c_ushortEVRButtonIdEVRControllerAxisTypeEVRFirmwareErrorr  r   r   r   r   r  r    s   0	)+B4QYIZ\cdl\m+no0	 7vwX_ `a0 
4T677CSU\]dUegnovgw  zA  BI  zJ  K  	L0 
5k67T[]de|]}~	0
 
!"9-"PQ0 
!"9+wwGWY`aiYj"kl0 
 7 @A0 
5dGG<LMN0 
3D'(:K\[bco[pqr0 
6{CD0 
 !8k!RS0 
+,CDJacjls  uH  mI  KS  -T  	U0 
;<STa<bc0 
89PQ^9_`0 
01HSfho  qE  iF  HP  Rf  2g  	h0  
)*ABVXl*mn!0" 
24AT9UW^_rWsu|  ~K  vL  M  	N#0$ 
23JK_aw3xy%0& 
23JKacw3xy'0( 
!"9:MOc"de)0* 
$%<[J^%_`+0, 
()@Nbdz  }D  EZ  }[  *\  	]-0. 
)*A'K_aw  zA  BW  zX  +Y  	Z/00 
)*A'K_aw  zA  BW  zX  +Y  	Z102 
*+B8Macy  |C  DY  |Z  ,[  	\304 
,-D]Th  kA  CJ  K`  Ca  .b  	c506 
)*A(L`bx  {L  NV  X`  bi  j  b@  +A  	B708 
*+B8Macy  |D  FN  PW  Xm  Pn  ,o  	p90: 
$%<XG\%]^;0< 
1+wy?QS[\]=0> 
!"9+G^`ghq`rt|  F  GZ  [  #\  	]?0@ 
,-D[Rikrs|k}  @H  JQ  Re  Jf  ho  pA  hB  .C  	DA0B 
$%<X|%TUC0D 
56FPcdeE0F 
6{DXZabuZv  yA   B  	CG0H 
&'>{Lcey  |C  DW  |X  Zb  dk  l  d@  (A  	BI0J 
6t=QS[]efgK0L 
#$;Hk$RSM0N 
-.EhPe.fgO0P 
4[ABQ0R 
'(?(LMS0T 
"#:;#GHU0V 
01H1UVW0X 
!"9:JL`"abY0Z 
#$;D$AB[0\ 
$%<XxQY%Z[]0^ 
5h?@_0Hr   r  c                   t   \ rS rSrS rS rS\S\4S jrS rS\S	\4S
 jr	S r
S rS rS rS rS rS rS\4S jrS rS r\4S jrS rS rS rS rS rS rS rS rS rS  rS! r S" r!S# r"S$ r#S% r$S& r%S' r&S( r'\(4S) jr)S* r*S+ r+S,\,S-S.4S/ jr-S0 r.S1 r/S2 r0S3 r1S4 r2S5 r3S;S6 jr4S;S7 jr5S8 r6S9 r7S:r8g.)<r_  iN  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )NFnTable:z%Error retrieving VR API for IVRSystem)	IVRSystem_Version_checkInterfaceVersionr  castgetGenericInterfacer  r   contentsfunction_tabler  version_keyfn_keyfn_typefn_table_ptrs        r   r  IVRSystem.__init__O  sU    '{+k)#/79IJEFF*33r   c                     U R                   R                  n[        5       n[        5       nU" [        U5      [        U5      5        UR                  UR                  4$ )zQSuggested size for the intermediate render target that the distortion pulls from.)r  r  rn  r+   r  r  fnwidthheights       r   r  (IVRSystem.getRecommendedRenderTargetSizeY  sF      ??

5<v'{{FLL((r   nearZfarZc                 D    U R                   R                  nU" XU5      nU$ )z+The projection matrix for the specified eye)r  r  )r  eyer)  r*  r%  results         r   r  IVRSystem.getProjectionMatrixa  s$      44C%r   c           	      :   U R                   R                  n[        5       n[        5       n[        5       n[        5       nU" U[        U5      [        U5      [        U5      [        U5      5        UR                  UR                  UR                  UR                  4$ )z
The components necessary to build your own projection matrix in case your
application is doing something fancy like infinite Z
)r  r  r  r+   r  )r  r,  r%  leftrighttopbottoms          r   r  IVRSystem.getProjectionRawg  sp    
   11y	i
3dU5\5:uV}Ezz5;;		6<<??r   ur  c                 n    U R                   R                  n[        5       nU" XU[        U5      5      nXe4$ )a  
Gets the result of the distortion function for the specified eye and input UVs. UVs go from 0,0 in
the upper left of that eye's viewport and 1,1 in the lower right of that eye's viewport.
Returns true for success. Otherwise, returns false, and distortion coordinates are not suitable.
)r  r  rI  r+   )r  r,  r5  r  r%  distortionCoordinatesr-  s          r   r  IVRSystem.computeDistortiont  s;       22 7 9CAu%:;<,,r   c                 B    U R                   R                  nU" U5      nU$ )a>  
Returns the transform from eye space to the head space. Eye space is the per-eye flavor of head
space that provides stereo disparity. Instead of Model * View * Projection the sequence is Model * View * Eye^-1 * Projection.
Normally View and Eye^-1 will be multiplied together and treated as View in your application.
)r  r  )r  r,  r%  r-  s       r   r  IVRSystem.getEyeToHeadTransform  s#       66Cr   c                     U R                   R                  n[        5       n[        5       nU" [	        U5      [	        U5      5      nXBR
                  UR
                  4$ )aN  
Returns the number of elapsed seconds since the last recorded vsync event. This
will come from a vsync timer event in the timer if possible or from the application-reported
time if that is not available. If no vsync times are available the function will
return zero for vsync time and frame counter and return false from the method.
)r  r  r  r}  r+   r  )r  r%  secondsSinceLastVsyncframeCounterr-  s        r   r  IVRSystem.getTimeSinceLastVsync  sR       66 '	zE/0%2EF22L4F4FFFr   c                 @    U R                   R                  nU" 5       nU$ )z
[D3D9 Only]
Returns the adapter index that the user should pass into CreateDevice to set up D3D9 in such
a way that it can go full screen exclusive on the HMD. Returns -1 if there was an error.
)r  r  r  r%  r-  s      r   r  IVRSystem.getD3D9AdapterIndex  s!       44r   c                 |    U R                   R                  n[        5       nU" [        U5      5        UR                  $ )z
[D3D10/11 Only]
Returns the adapter index that the user should pass into EnumAdapters to create the device
and swap chain in DX10 and DX11. If an error occurs the index will be set to -1.
r  r  ro  r+   r  )r  r%  adapterIndexs      r   r  IVRSystem.getDXGIOutputInfo  s5       22y
5!!!r   c                     U R                   R                  n[        5       n[        5       nU" [	        U5      U[	        U5      5        UR
                  U4$ )a  
Returns platform- and texture-type specific adapter identification so that applications and the
compositor are creating textures and swap chains on the same GPU. If an error occurs the device
will be set to 0.
pInstance is an optional parameter that is required only when textureType is TextureType_Vulkan.
[D3D10/11/12 Only (D3D9 Not Supported)]
 Returns the adapter LUID that identifies the GPU attached to the HMD. The user should
 enumerate all adapters using IDXGIFactory::EnumAdapters and IDXGIAdapter::GetDesc to find
 the adapter with the matching LUID, or use IDXGIFactory4::EnumAdapterByLuid.
 The discovered IDXGIAdapter should be used to create the device and swap chain.
[Vulkan Only]
 Returns the VkPhysicalDevice that should be used by the application.
 pInstance must be the instance the application will use to query for the VkPhysicalDevice.  The application
 must create the VkInstance with extensions returned by IVRCompositor::GetVulkanInstanceExtensionsRequired enabled.
[macOS Only]
 For TextureType_IOSurface returns the id<MTLDevice> that should be used by the application.
 On 10.13+ for TextureType_OpenGL returns the 'registryId' of the renderer which should be used
  by the application. See Apple Technical Q&A QA1168 for information on enumerating GL Renderers, and the
  new kCGLRPRegistryIDLow and kCGLRPRegistryIDHigh CGLRendererProperty values in the 10.13 SDK.
 Pre 10.13 for TextureType_OpenGL returns 0, as there is no dependable way to correlate the HMDs MTLDevice
  with a GL Renderer.
)r  r  r}  r6   r+   r  )r  textureTyper%  deviceinstances        r   r  IVRSystem.getOutputDevice  sF    .   00>
5=+uX7||X%%r   c                 @    U R                   R                  nU" 5       nU$ )zlUse to determine if the headset display is part of the desktop (i.e. extended) or hidden (i.e. direct mode).)r  r  r@  s      r   r  IVRSystem.isDisplayOnDesktop        33r   c                 B    U R                   R                  nU" U5      nU$ )zSet the display visibility (true = extended, false = direct mode).  Return value of true indicates that the change was successful.)r  r  )r  isVisibleOnDesktopr%  r-  s       r   r  IVRSystem.setDisplayVisibility  s#      55&'r    predictedSecondsToPhotonsFromNowc                    U R                   R                  nUc  SnSnO_[        U[        R                  5      (       a  [        US   5      n[        U5      nO&[        [        -  " 5       n[        US   5      n[        nU" XXV5        U$ )a  
The pose that the tracker thinks that the HMD will be in at the specified number of seconds into the
future. Pass 0 to get the state at the instant the method is called. Most of the time the application should
calculate the time until the photons will be emitted from the display and pass that time into the method.

This is roughly analogous to the inverse of the view matrix in most applications, though
many games will need to do some additional rotation or translation on top of the rotation
and translation provided by the head pose.

For devices where bPoseIsValid is true the application can use the pose to position the device
in question. The provided array can be any size up to k_unMaxTrackedDeviceCount.

Seated experiences should call this method with TrackingUniverseSeated and receive poses relative
to the seated zero pose. Standing experiences should call this method with TrackingUniverseStanding
and receive poses relative to the Chaperone Play Area. TrackingUniverseRawAndUncalibrated should
probably not be used unless the application is the Chaperone calibration tool itself, but will provide
poses relative to the hardware-specific coordinate system in the driver.
Nr   )	r  r  
isinstancer*   Arrayr+   r  r  k_unMaxTrackedDeviceCount)r  originrQ  trackedDevicePoseArrayr%  trackedDevicePoseArrayArgtrackedDevicePoseArrayCounts          r   r  )IVRSystem.getDeviceToAbsoluteTrackingPose  s    &   @@!)(,%*+'.==(-.DQ.G(H%*-.D*E'&9<U&U%X"(-.DQ.G(H%*C'
65Nl%%r   c                 @    U R                   R                  nU" 5       nU$ )a  
Returns the transform from the seated zero pose to the standing absolute tracking system. This allows
applications to represent the seated origin to used or transform object positions from one coordinate
system to the other.

The seated origin may or may not be inside the Play Area or Collision Bounds returned by IVRChaperone. Its position
depends on what the user has set from the Dashboard settings and previous calls to ResetSeatedZeroPose.
)r  r  r@  s      r   r  9IVRSystem.getSeatedZeroPoseToStandingAbsoluteTrackingPose  s!       PPr   c                 @    U R                   R                  nU" 5       nU$ )z
Returns the transform from the tracking origin to the standing absolute tracking system. This allows
applications to convert from raw tracking space to the calibrated standing coordinate system.
)r  r  r@  s      r   r  6IVRSystem.getRawZeroPoseToStandingAbsoluteTrackingPose  s!    
   MMr   c                    U R                   R                  nUc  SnSnO_[        U[        R                  5      (       a  [        US   5      n[        U5      nO&[        [        -  " 5       n[        US   5      n[        nU" XXc5      nXr4$ )aD  
Get a sorted array of device indices of a given class of tracked devices (e.g. controllers).  Devices are sorted right to left
relative to the specified tracked device (default: hmd -- pass in -1 for absolute tracking space).  Returns the number of devices
in the list, or the size of the array needed if not large enough.
Nr   )	r  r  rS  r*   rT  r+   r  rP  rU  )r  trackedDeviceClasstrackedDeviceIndexArrayrelativeToTrackedDeviceIndexr%  trackedDeviceIndexArrayArgtrackedDeviceIndexArrayCountr-  s           r   r  .IVRSystem.getSortedTrackedDeviceIndicesOfClass  s       EE"*)-&+,(/>>)./Fq/I)J&+./F+G(';>W'W&Z#)./Fq/I)J&+D(&D`..r   c                 B    U R                   R                  nU" U5      nU$ )z,Returns the level of activity on the device.)r  r  )r  deviceIdr%  r-  s       r   r  'IVRSystem.getTrackedDeviceActivityLevel  s!      >>Hr   c                     U R                   R                  n[        5       nU" [        U5      [        U5      [        U5      5        U$ )z
Convenience utility to apply the specified transform to the specified pose.
This properly transforms all pose components, including velocity and angular velocity
)r  r  r  r+   )r  rj  	transformr%  
outputPoses        r   r  IVRSystem.applyTransform%  s?    
   //(*

5e$56i8HIr   c                 B    U R                   R                  nU" U5      nU$ )zReturns the device index associated with a specific role, for example the left hand or the right hand. This function is deprecated in favor of the new IVRInput system.)r  r  )r  
deviceTyper%  r-  s       r   r  0IVRSystem.getTrackedDeviceIndexForControllerRole/  s!      GGJr   c                 B    U R                   R                  nU" U5      nU$ )z|Returns the controller type associated with a device index. This function is deprecated in favor of the new IVRInput system.)r  r  r  deviceIndexr%  r-  s       r   r  0IVRSystem.getControllerRoleForTrackedDeviceIndex5  s!      GGKr   c                 B    U R                   R                  nU" U5      nU$ )a  
Returns the device class of a tracked device. If there has not been a device connected in this slot
since the application started this function will return TrackedDevice_Invalid. For previous detected
devices the function will return the previously observed device class.

To determine which devices exist on the system, just loop from 0 to k_unMaxTrackedDeviceCount and check
the device class. Every device with something other than TrackedDevice_Invalid is associated with an
actual tracked device.
)r  r  rq  s       r   r  IVRSystem.getTrackedDeviceClass;  s#       66Kr   c                 B    U R                   R                  nU" U5      nU$ )z9Returns true if there is a device connected in this slot.)r  r  rq  s       r   r  "IVRSystem.isTrackedDeviceConnectedI  s!      99Kr   c                     U R                   R                  n[        5       nU" X[        U5      5      n[        R
                  R                  R                  UR                  5        U$ )z}Returns a bool property. If the device index is not valid or the property is not a bool type this function will return false.)	r  r  r  r+   r'   
error_codeTrackedPropertyErrorcheck_error_valuer  r  rr  r  r%  errorr-  s         r   r  &IVRSystem.getBoolTrackedDevicePropertyO  sN      ==%'KuU|4..@@Mr   c                     U R                   R                  n[        5       nU" X[        U5      5      n[        R
                  R                  R                  UR                  5        U$ )z{Returns a float property. If the device index is not valid or the property is not a float type this function will return 0.)	r  r  r  r+   r'   ry  rz  r{  r  r|  s         r   r  'IVRSystem.getFloatTrackedDevicePropertyW  N      >>%'KuU|4..@@Mr   c                     U R                   R                  n[        5       nU" X[        U5      5      n[        R
                  R                  R                  UR                  5        U$ )zxReturns an int property. If the device index is not valid or the property is not a int type this function will return 0.)	r  r  r  r+   r'   ry  rz  r{  r  r|  s         r   r  'IVRSystem.getInt32TrackedDeviceProperty_  r  r   c                     U R                   R                  n[        5       nU" X[        U5      5      n[        R
                  R                  R                  UR                  5        U$ )z}Returns a uint64 property. If the device index is not valid or the property is not a uint64 type this function will return 0.)	r  r  r  r+   r'   ry  rz  r{  r  r|  s         r   r  (IVRSystem.getUint64TrackedDevicePropertyg  sN      ??%'KuU|4..@@Mr   c                     U R                   R                  n[        5       nU" X[        U5      5      n[        R
                  R                  R                  UR                  5        U$ )zReturns a matrix property. If the device index is not valid or the property is not a matrix type, this function will return identity.)	r  r  r  r+   r'   ry  rz  r{  r  r|  s         r   r  *IVRSystem.getMatrix34TrackedDevicePropertyo  sN      AA%'KuU|4..@@Mr   c           
          U R                   R                  n[        5       nU" XU[        U5      U[        U5      5      n[        R
                  R                  R                  UR                  5        U$ )a  
Returns an array of one type of property. If the device index is not valid or the property is not a single value or an array of the specified type,
this function will return 0. Otherwise it returns the number of bytes necessary to hold the array of properties. If unBufferSize is
greater than the returned size and pBuffer is non-NULL, pBuffer is filled with the contents of array of properties.
)	r  r  r  r+   r'   ry  rz  r{  r  )	r  rr  r  type_buffer
bufferSizer%  r}  r-  s	            r   r  'IVRSystem.getArrayTrackedDevicePropertyw  sZ       >>%'KueFmZuV..@@Mr   c           	         U R                   R                  n[        5       nU" XSS[        U5      5      n [        R
                  R                  R                  UR                  5        [        R                  " U5      nU" XXe[        U5      5        [        R
                  R                  R                  UR                  5        [        UR                  5      R                  S5      $ ! [        R
                  R                   a     Nf = f)a=  
Returns a string property. If the device index is not valid or the property is not a string type this function will
return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing
null. Strings will always fit in buffers of k_unMaxPropertyStringSize characters.
Nr   utf-8)r  r  r  r+   r'   ry  rz  r{  r  BufferTooSmallErrorr*   create_string_bufferbytesdecode)r  rr  r  r%  r}  r  r  s          r   r  (IVRSystem.getStringTrackedDeviceProperty  s       ??%'4E%LA
	22DDU[[Q ++J7
;eu>..@@MU[[!((11   44 		   3C) )D
	D
c                 `    U R                   R                  nU" U5      nUR                  S5      $ )z
returns a string that corresponds with the specified property error. The string will be the name
of the error enum value for all valid error codes
r  )r  r  r  r  r}  r%  r-  s       r   r  "IVRSystem.getPropErrorNameFromEnum  s-    
   99E}}W%%r   c                 z    U R                   R                  n[        [        5      nU" [	        U5      U5      nUS:g  $ )z
Returns true and fills the event with the next event on the queue if there is one. If there are no events
this method returns false. uncbVREvent should be the size in bytes of the VREvent_t struct
r   )r  r  rp  rK  r+   )r  eventr%  vREventr-  s        r   r  IVRSystem.pollNextEvent  s9    
   ..#E%L'*{r   c                     U R                   R                  n[        [        5      n[	        5       nU" U[        U5      U[        U5      5      nXbU4$ )a  
Returns true and fills the event with the next event on the queue if there is one. If there are no events
  this method returns false. Fills in the pose of the associated tracked device in the provided pose struct.
  This pose will always be older than the call to this function and should not be used to render the device.
uncbVREvent should be the size in bytes of the VREvent_t struct
)r  r  rp  rK  r  r+   )r  rV  r  r%  r  rj  r-  s          r   r  IVRSystem.pollNextEventWithPose  sN       66#/1FE%L'59J3KL///r   c           	          U R                   R                  n[        [        5      n[	        5       n[        5       nU" U[        U5      U[        U5      [        U5      5      nXrXVR                  4$ )ae  
Returns true and fills the event with the next event on the queue, including any of this user's overlay event queues,
if there are any. If there are no events this method returns false. uncbVREvent should be the size in bytes of the VREvent_t struct.
If the event is targeted at a specific overlay, *pulOverlayHandle will be set to the handle, else k_ulOverlayHandleInvalid.
This method is equivalent to calling both PollNextEventWithPose, and IVROverlay::PollNextOverlayEvent for every overlay you create,
but is more efficient. You may pass NULL for pTrackedDevicePose if you don't care about poses. You must pass a valid pointer for
pulOverlayHandle, because otherwise the target for some events (like ButtonPress) would be ambiguous even with one overlay.
If you call this, you should not call PollNextEvent/WithPose(), since they all share the same read pointer.
)r  r  rp  rK  r  r  r+   r  )r  rV  r  r%  r  rj  r  r-  s           r   r  *IVRSystem.pollNextEventWithPoseAndOverlays  sd       AA#/1)+FE%L'59J3KUS`Mab/1D1DDDr   c                 `    U R                   R                  nU" U5      nUR                  S5      $ )z*returns the name of an EVREvent enum valuer  )r  r  r  )r  r  r%  r-  s       r   r  "IVRSystem.getEventTypeNameFromEnum  s+      99E}}W%%r   c                 B    U R                   R                  nU" X5      nU$ )a%  
Returns the hidden area mesh for the current HMD. The pixels covered by this mesh will never be seen by the user after the lens distortion is
applied based on visibility to the panels. If this HMD does not have a hidden area mesh, the vertex data and count will be NULL and 0 respectively.
This mesh is meant to be rendered into the stencil buffer (or into the depth buffer setting nearz) before rendering each eye's view.
This will improve performance by letting the GPU early-reject pixels the user will never see before running the pixel shader.
NOTE: Render this mesh with backface culling disabled since the winding order of the vertices can be different per-HMD or per-eye.
Setting the bInverse argument to true will produce the visible area mesh that is commonly used in place of full-screen quads. The visible area mesh covers all of the pixels the hidden area mesh does not cover.
Setting the bLineLoop argument will return a line loop of vertices in HiddenAreaMesh_t->pVertexData with HiddenAreaMesh_t->unTriangleCount set to the number of vertices.
)r  r  )r  r,  r  r%  r-  s        r   r  IVRSystem.getHiddenAreaMesh  s#       22Cr   c                     U R                   R                  n[        5       n[        [        5      nU" U[	        U5      U5      nXS4$ )z
Fills the supplied struct with the current state of the controller. Returns false if the controller index
is invalid. This function is deprecated in favor of the new IVRInput system.
)r  r  r^  rp  r+   )r  controllerDeviceIndexr%  controllerStatecontrollerStateSizer-  s         r   r  IVRSystem.getControllerState  sG    
   33-/$%89)5+ACVW&&r   c           	          U R                   R                  n[        5       n[        [        5      n[	        5       nU" X[        U5      U[        U5      5      nXtU4$ )am  
fills the supplied struct with the current state of the controller and the provided pose with the pose of
the controller when the controller state was updated most recently. Use this form if you need a precise controller
pose as input to your application when the user presses or releases a button. This function is deprecated in favor of the new IVRInput system.
)r  r  r^  rp  r  r+   )r  rV  r  r%  r  r  rj  r-  s           r   r  $IVRSystem.getControllerStateWithPose  s[       ;;-/$%89/1F53IK^`efw`xy(999r   durationMicroSecr   Nc                 B    U R                   R                  nU" XU5        g)z
Trigger a single haptic pulse on a controller. After this call the application may not trigger another haptic pulse on this controller
and axis combination for 5ms. This function is deprecated in favor of the new IVRInput system.
N)r  r  )r  r  axisIdr  r%  s        r   r  IVRSystem.triggerHapticPulse  s!    
   33
 *:;r   c                 `    U R                   R                  nU" U5      nUR                  S5      $ )zoreturns the name of an EVRButtonId enum value. This function is deprecated in favor of the new IVRInput system.r  )r  r  r  )r  buttonIdr%  r-  s       r   r  !IVRSystem.getButtonIdNameFromEnum  s+      88H}}W%%r   c                 `    U R                   R                  nU" U5      nUR                  S5      $ )zyreturns the name of an EVRControllerAxisType enum value. This function is deprecated in favor of the new IVRInput system.r  )r  r  r  )r  axisTyper%  r-  s       r   r  +IVRSystem.getControllerAxisTypeNameFromEnum   s+      BBH}}W%%r   c                 @    U R                   R                  nU" 5       nU$ )z
Returns true if this application is receiving input from the system. This would return false if
system-related functionality is consuming the input stream.
)r  r  r@  s      r   r  IVRSystem.isInputAvailable  s!    
   11r   c                 @    U R                   R                  nU" 5       nU$ )z
Returns true SteamVR is drawing controllers on top of the application. Applications should consider
not drawing anything attached to the user's hands in this case.
)r  r   r@  s      r   r   %IVRSystem.isSteamVRDrawingControllers  s!    
   <<r   c                 @    U R                   R                  nU" 5       nU$ )z
Returns true if the user has put SteamVR into a mode that is distracting them from the application.
For applications where this is appropriate, the application should pause ongoing activity.
)r  r  r@  s      r   r   IVRSystem.shouldApplicationPause  s!    
   77r   c                 @    U R                   R                  nU" 5       nU$ )z
Returns true if SteamVR is doing significant rendering work and the game should do what it can to reduce
its own workload. One common way to do this is to reduce the size of the render target provided for each eye.
)r  r  r@  s      r   r  .IVRSystem.shouldApplicationReduceRenderingWork!  s!    
   EEr   c                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g)a  
Performs the actual firmware update if applicable.
The following events will be sent, if VRFirmwareError_None was returned: VREvent_FirmwareUpdateStarted, VREvent_FirmwareUpdateFinished
Use the properties Prop_Firmware_UpdateAvailable_Bool, Prop_Firmware_ManualUpdate_Bool, and Prop_Firmware_ManualUpdateURL_String
to figure our whether a firmware update is available, and to figure out whether its a manual update
Prop_Firmware_ManualUpdateURL_String should point to an URL describing the manual update process
N)r  r  r'   ry  FirmwareErrorr{  )r  rr  r%  r}  s       r   r  IVRSystem.performFirmwareUpdate*  s8       66;''99%@r   c                 >    U R                   R                  nU" 5         g)z
Call this to acknowledge to the system that VREvent_Quit has been received and that the process is exiting.
This extends the timeout until the process is killed.
N)r  r  r  r%  s     r   r  !IVRSystem.acknowledgeQuit_Exiting6      
   88
r   c                     U R                   R                  nU" SS5      n[        R                  " U5      nU" X25        [	        UR
                  5      R                  S5      $ )z
Retrieves a null-terminated, semicolon-delimited list of UTF8 file paths that an application
must have read access to when running inside of an app container. Returns the number of bytes
needed to hold the list.
Nr   r  )r  r  r*   r  r  r  r  )r  r%  r  r  s       r   r  "IVRSystem.getAppContainerFilePaths>  sR       99a[
,,Z8
6V\\"))'22r   c                 ^    U R                   R                  nU" 5       nUR                  S5      $ )a  
Returns the current version of the SteamVR runtime. The returned string will remain valid until VR_Shutdown is called.

NOTE: Is it not appropriate to use this version to test for the presence of any SteamVR feature. Only use this version
number for logging or showing to a user, and not to try to detect anything at runtime. When appropriate, feature-specific
presence information is provided by other APIs.
r  )r  r  r  r@  s      r   r  IVRSystem.getRuntimeVersionJ  s+       22}}W%%r   r  r   N)9r   r   r   r   r  r  floatr  r  r  r  r  r  r  r  r  r  r  r  r  k_unTrackedDeviceIndex_Hmdr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  k_eHiddenAreaMesh_Standardr  r  r  intr  r  r  r  r   r  r  r  r  r  r  r   r   r   r   r_  r_  N  s8   4)e 5 @	- 	-% 	-G	"&:&X] &B ~X /(
2$&0E"& ,F 	':<RU <Z^ <&&
A
3
&r   r_  c            #          \ rS rSrS\" \\\5      4S\" \\5      4S\" \\5      4S\" \5      4S\" \\\\5      4S\" \\\\5      4S\" \\5      4S	\" \\\\	" \
5      \5      4S
\" \\\5      4S\" \\5      4S\" \\5      4S\" \\\5      4S\" \\5      4S\" \\5      4S\" \\\\\\	" \5      5      4S\" \\\\	" \5      5      4S\" \\\\	" \5      5      4S\" \\\5      4S\" \\5      4S\" \\\5      4S\" \\\\5      4S\" \\\\5      4S\" \\\\5      4S\" \\\\5      4S\" \\\5      4S\" \5      4S\" \\5      4S\" \\5      4S\" \\\\5      4S\" \5      4/rS rg!)"IVRApplications_FnTableiW  addApplicationManifestremoveApplicationManifestisApplicationInstalledgetApplicationCountgetApplicationKeyByIndexgetApplicationKeyByProcessIdlaunchApplicationlaunchTemplateApplicationlaunchApplicationFromMimeTypelaunchDashboardOverlaycancelApplicationLaunchidentifyApplicationgetApplicationProcessId getApplicationsErrorNameFromEnumgetApplicationPropertyStringgetApplicationPropertyBoolgetApplicationPropertyUint64setApplicationAutoLaunchgetApplicationAutoLaunch setDefaultApplicationForMimeType getDefaultApplicationForMimeType getApplicationSupportedMimeTypes"getApplicationsThatSupportMimeTypegetApplicationLaunchArgumentsgetStartingApplicationgetSceneApplicationState performApplicationPrelaunchCheck$getSceneApplicationStateNameFromEnumlaunchInternalProcessgetCurrentSceneProcessIdr   N)r   r   r   r   r  EVRApplicationErrorr  rG  rn  r  r  EVRApplicationPropertyr}  EVRSceneApplicationStater  r   r   r   r   r  r  W  s   	!#:;NPXZe#fg	$&=>QS[&\]	!#:;#QR	 7 AB	#%<=PRZ\dfn%op	')@ATV^`hjr)st	56I8TU	$&=>QS[]egn  pA  hB  DL  'M  	N	(*ABUW_ai*jk	!#:;NPX#YZ	"$;K$RS	 78KXW_ `a	"$;Hh$OP	+-DXOb-cd	')@8Ukmuw  BI  J]  B^  *_  	`	%'>{HVlnu  wJ  oK  (L  	M	')@8Ukmt  vI  nJ  *K  	L	#%<=PRZ\g%hi	#%<[(%ST	+-DEXZbdl-mn	+-D[RZ\dfn-op	+-D[RZ\dfn-op	-/FxQY[cem/no	(*A(HV^`h*ij	!#:;NPXZb#cd	#%<=U%VW	+-DEXZb-cd	/1HSk1lm	 "9:MxYack"lm	#%<X%FG=Hr   r  c                      \ rS rSrS rS-S\SS4S jjrS\SS4S jrS\4S	 jrS
 r	S r
S rS\SS4S jrS\S\SS4S jrS\S\SS4S jrS\SS4S jrS\4S jrS\SS4S jrS\4S jrS rS\4S jrS\4S jrS\4S jrS\SS4S jrS\4S jrS\S\SS4S jrS\4S jrS\4S  jrS\4S! jrS" rS# rS$ rS\SS4S% jr S& r!S'\S(\S)\SS4S* jr"S+ r#S,r$g).r  iz  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z+Error retrieving VR API for IVRApplications)	IVRApplications_Versionr  r  r  r  r  r   r  r  r  s        r   r  IVRApplications.__init__{  U    -{+k))/79IJKLL*33r   applicationManifestFullPathr   Nc                     U R                   R                  nUb
  [        USS9nU" X5      n[        R                  R
                  R                  U5        g)z
Adds an application manifest to the list to load when building the list of installed applications.
Temporary manifests are not automatically loaded
Nr  encoding)r  r  r  r'   ry  ApplicationErrorr{  )r  r  	temporaryr%  r}  s        r   r  &IVRApplications.addApplicationManifest  sO    
   77&2*/0KV]*^'.:**<<UCr   c                     U R                   R                  nUb
  [        USS9nU" U5      n[        R                  R
                  R                  U5        g)zgRemoves an application manifest from the list to load when building the list of installed applications.Nr  r  )r  r  r  r'   ry  r  r{  )r  r  r%  r}  s       r   r  )IVRApplications.removeApplicationManifest  sM      ::&2*/0KV]*^'./**<<UCr   appKeyc                 \    U R                   R                  nUb
  [        USS9nU" U5      nU$ )z+Returns true if an application is installedr  r  )r  r  r  r  r  r%  r-  s       r   r  &IVRApplications.isApplicationInstalled  s3      776G4FFr   c                 @    U R                   R                  nU" 5       nU$ )z8Returns the number of applications available in the list)r  r  r@  s      r   r  #IVRApplications.getApplicationCount        44r   c                    U R                   R                  nU" USS5      n[        R                  " U5      nU" XU5      n[        R
                  R                  R                  U5        [        UR                  5      R                  S5      $ )z
Returns the key of the specified application. The index is at least 0 and is less than the return
value of GetApplicationCount(). The buffer should be at least k_unMaxApplicationKeyLength in order to
fit the key.
Nr   r  )r  r  r*   r  r'   ry  r  r{  r  r  r  )r  applicationIndexr%  appKeyBufferLenappKeyBufferr}  s         r   r  (IVRApplications.getApplicationKeyByIndex  sw       99-tQ722?C#?C**<<UC\''(//88r   c                    U R                   R                  nU" USS5      n[        R                  " U5      nU" XU5      n[        R
                  R                  R                  U5        [        UR                  5      R                  S5      $ )z
Returns the key of the application for the specified Process Id. The buffer should be at least
k_unMaxApplicationKeyLength in order to fit the key.
Nr   r  )r  r  r*   r  r'   ry  r  r{  r  r  r  )r  	processIdr%  r  r	  r}  s         r   r  ,IVRApplications.getApplicationKeyByProcessId  su    
   ==Ya022?C9O<**<<UC\''(//88r   c                     U R                   R                  nUb
  [        USS9nU" U5      n[        R                  R
                  R                  U5        g)z
Launches the application. The existing scene application will exit and then the new application will start.
This call is not valid for dashboard overlay applications.
Nr  r  )r  r  r  r'   ry  r  r{  r  r  r%  r}  s       r   r  !IVRApplications.launchApplication  sJ    
   226G4F6
**<<UCr   templateAppKey	newAppKeyc                    U R                   R                  nUb
  [        USS9nUb
  [        USS9nUc  SnSnOW[        U[        R
                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" XXS5      n[        R                  R                  R                  U5        g)z
Launches an instance of an application of type template, with its app key being pchNewAppKey (which must be unique) and optionally override sections
from the manifest file via AppOverrideKeys_t
Nr  r  r   r   )r  r  r  rS  r*   rT  r+   r  r  r'   ry  r  r{  )r  r  r  keysr%  keysArgr}  s          r   r  )IVRApplications.launchTemplateApplication  s    
   ::%">GDN i':I<GDfll++DGnGt9D%),DDGnGD>g<**<<UCr   mimeTyper  c                     U R                   R                  nUb
  [        USS9nUb
  [        USS9nU" X5      n[        R                  R
                  R                  U5        g)zlaunches the application currently associated with this mime type and passes it the option args, typically the filename or object name of the item being launchedNr  r  )r  r  r  r'   ry  r  r{  )r  r  r  r%  r}  s        r   r  -IVRApplications.launchApplicationFromMimeType  s[      >>X8H0D8"**<<UCr   c                     U R                   R                  nUb
  [        USS9nU" U5      n[        R                  R
                  R                  U5        g)z
Launches the dashboard overlay application if it is not already running. This call is only valid for
dashboard overlay applications.
Nr  r  )r  r  r  r'   ry  r  r{  r  s       r   r  &IVRApplications.launchDashboardOverlay  sJ    
   776G4F6
**<<UCr   c                 \    U R                   R                  nUb
  [        USS9nU" U5      nU$ )z*Cancel a pending launch for an applicationr  r  )r  r  r  r  s       r   r  'IVRApplications.cancelApplicationLaunch  3      886G4FFr   c                     U R                   R                  nUb
  [        USS9nU" X5      n[        R                  R
                  R                  U5        g)as  
Identifies a running application. OpenVR can't always tell which process started in response
to a URL. This function allows a URL handler (or the process itself) to identify the app key
for the now running application. Passing a process ID of 0 identifies the calling process.
The application must be one that's known to the system via a call to AddApplicationManifest.
Nr  r  )r  r  r  r'   ry  r  r{  )r  r  r  r%  r}  s        r   r  #IVRApplications.identifyApplication  sK       446G4F9%**<<UCr   c                 \    U R                   R                  nUb
  [        USS9nU" U5      nU$ )zgReturns the process ID for an application. Return 0 if the application was not found or is not running.r  r  )r  r  r  r  s       r   r  'IVRApplications.getApplicationProcessId  r  r   c                 `    U R                   R                  nU" U5      nUR                  S5      $ )z*Returns a string for an applications errorr  )r  r  r  r  s       r   r  0IVRApplications.getApplicationsErrorNameFromEnum  s+      AAE}}W%%r   c           	      4   U R                   R                  nUb
  [        USS9n[        5       nU" XSS[	        U5      5      n [
        R                  R                  R                  UR                  5        [        R                  " U5      nU" XXe[	        U5      5        [
        R                  R                  R                  UR                  5        [        UR                  5      R                  S5      $ ! [
        R                  R                   a     Nf = f)ziReturns a value for an application property. The required buffer size to fit this value will be returned.Nr  r  r   )r  r  r  r  r+   r'   ry  r  r{  r  r  r*   r  r  )r  r  	property_r%  r}  propertyValueBufferLenpropertyValueBuffers          r   r  ,IVRApplications.getApplicationPropertyString  s      ==6G4F#%!#FtQe!M	..@@M %99:PQ
615QV<X**<<U[[I(../66w??   44 		   3C6 6DDc                     U R                   R                  nUb
  [        USS9n[        5       nU" X[	        U5      5      n[
        R                  R                  R                  UR                  5        U$ )zSReturns a bool value for an application property. Returns false in all error cases.r  r  )
r  r  r  r  r+   r'   ry  r  r{  r  r  r  r&  r%  r}  r-  s         r   r  *IVRApplications.getApplicationPropertyBool)  s`      ;;6G4F#%FuU|4**<<U[[Ir   c                     U R                   R                  nUb
  [        USS9n[        5       nU" X[	        U5      5      n[
        R                  R                  R                  UR                  5        U$ )zQReturns a uint64 value for an application property. Returns 0 in all error cases.r  r  )
r  r  r  r  r+   r'   ry  r  r{  r  r,  s         r   r  ,IVRApplications.getApplicationPropertyUint643  s`      ==6G4F#%FuU|4**<<U[[Ir   c                     U R                   R                  nUb
  [        USS9nU" X5      n[        R                  R
                  R                  U5        g)zSets the application auto-launch flag. This is only valid for applications which return true for VRApplicationProperty_IsDashboardOverlay_Bool.Nr  r  )r  r  r  r'   ry  r  r{  )r  r  
autoLaunchr%  r}  s        r   r  (IVRApplications.setApplicationAutoLaunch=  sI      996G4F6&**<<UCr   c                 \    U R                   R                  nUb
  [        USS9nU" U5      nU$ )zGets the application auto-launch flag. This is only valid for applications which return true for VRApplicationProperty_IsDashboardOverlay_Bool.r  r  )r  r  r  r  s       r   r  (IVRApplications.getApplicationAutoLaunchE  s3      996G4FFr   c                     U R                   R                  nUb
  [        USS9nUb
  [        USS9nU" X5      n[        R                  R
                  R                  U5        g)zLAdds this mime-type to the list of supported mime types for this applicationNr  r  )r  r  r  r'   ry  r  r{  )r  r  r  r%  r}  s        r   r  0IVRApplications.setDefaultApplicationForMimeTypeM  s[      AA6G4FX8H6$**<<UCr   c                     U R                   R                  nUb
  [        USS9nU" USS5      n[        R                  " U5      nU" XU5        [        UR
                  5      R                  S5      $ )z0return the app key that will open this mime typeNr  r  r   )r  r  r  r*   r  r  r  )r  r  r%  r  r	  s        r   r  0IVRApplications.getDefaultApplicationForMimeTypeW  si      AAX8HXtQ/22?C
8?3\''(//88r   c                     U R                   R                  nUb
  [        USS9nU" USS5      n[        R                  " U5      nU" XU5        [        UR
                  5      R                  S5      $ )zJGet the list of supported mime types for this application, comma-delimitedNr  r  r   )r  r  r  r*   r  r  r  )r  r  r%  mimeTypesBuffers       r   r  0IVRApplications.getApplicationSupportedMimeTypesa  si      AA6G4FVT1- 55oF
6O4_**+227;;r   c                     U R                   R                  nUb
  [        USS9nU" USS5      n[        R                  " U5      nU" XU5        [        UR
                  5      R                  S5      $ )zGet the list of app-keys that support this mime type, comma-delimited, the return value is number of bytes you need to return the full stringNr  r  r   )r  r  r  r*   r  r  r  )r  r  r%  appKeysThatSupportBuffers       r   r  2IVRApplications.getApplicationsThatSupportMimeTypek  sn      CCX8H#%ha#8 #)#>#>?W#X 
8/GH-334;;GDDr   c                     U R                   R                  nU" USS5      n[        R                  " U5      nU" XU5        [	        UR
                  5      R                  S5      $ )zGet the args list from an app launch that had the process already running, you call this when you get a VREvent_ApplicationMimeTypeLoadNr   r  )r  r  r*   r  r  r  r  )r  rO  r%  r  s       r   r  -IVRApplications.getApplicationLaunchArgumentsu  sU      >>&$"**40
6TZZ ''00r   c                    U R                   R                  nU" SS5      n[        R                  " U5      nU" X25      n[        R
                  R                  R                  U5        [        UR                  5      R                  S5      $ )z;Returns the app key for the application that is starting upNr   r  )r  r  r*   r  r'   ry  r  r{  r  r  r  )r  r%  r  r	  r}  s        r   r  &IVRApplications.getStartingApplication}  sn      77T1+22?C<1**<<UC\''(//88r   c                 @    U R                   R                  nU" 5       nU$ )z(Returns the application transition state)r  r  r@  s      r   r  (IVRApplications.getSceneApplicationState  s      99r   c                     U R                   R                  nUb
  [        USS9nU" U5      n[        R                  R
                  R                  U5        g)a.  
Returns errors that would prevent the specified application from launching immediately. Calling this function will
cause the current scene application to quit, so only call it when you are actually about to launch something else.
What the caller should do about these failures depends on the failure:
  VRApplicationError_OldApplicationQuitting - An existing application has been told to quit. Wait for a VREvent_ProcessQuit
                                              and try again.
  VRApplicationError_ApplicationAlreadyStarting - This application is already starting. This is a permanent failure.
  VRApplicationError_LaunchInProgress         - A different application is already starting. This is a permanent failure.
  VRApplicationError_None                   - Go ahead and launch. Everything is clear.
Nr  r  )r  r  r  r'   ry  r  r{  r  s       r   r  0IVRApplications.performApplicationPrelaunchCheck  sJ       AA6G4F6
**<<UCr   c                 `    U R                   R                  nU" U5      nUR                  S5      $ )z4Returns a string for an application transition stater  )r  r  r  )r  stater%  r-  s       r   r  4IVRApplications.getSceneApplicationStateNameFromEnum  s+      EEE}}W%%r   
binaryPath	argumentsworkingDirectoryc                     U R                   R                  nUb
  [        USS9nUb
  [        USS9nUb
  [        USS9nU" XU5      n[        R                  R
                  R                  U5        g)aW  
Starts a subprocess within the calling application. This
suppresses all application transition UI and automatically identifies the new executable
as part of the same application. On success the calling process should exit immediately.
If working directory is NULL or "" the directory portion of the binary path will be
the working directory.
Nr  r  )r  r  r  r'   ry  r  r{  )r  rJ  rK  rL  r%  r}  s         r   r  %IVRApplications.launchInternalProcess  st       66!zG<J i':I'$%5H:*:;**<<UCr   c                 @    U R                   R                  nU" 5       nU$ )z
Returns the current scene process ID according to the application system. A scene process will get scene
focus once it starts rendering, but it will appear here once it calls VR_Init with the Scene application
type.
)r  r  r@  s      r   r  (IVRApplications.getCurrentSceneProcessId  !       99r   r  F)%r   r   r   r   r  r#   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  r  z  s   4	D# 	D[_ 	DDS DT DS 9
9	D 	D 	DD D DVZ D.Dc D D D	DS 	DT 	Dc DS DT Dc &@3 @  3 Ds D4 Ds Ds Dc Dd D9 9<s <E3 E19Ds Dt D"&D D DWZ D_c D$r   r  c                      \ rS rSrS\" \\5      4S\" S\\\\" \5      5      4S\" S\\\	\" \5      5      4S\" S\\\
\" \5      5      4S\" S\\\\" \5      5      4S\" \\\\" \5      5      4S	\" \	\\\" \5      5      4S
\" \
\\\" \5      5      4S\" S\\\\\" \5      5      4S\" S\\" \5      5      4S\" S\\\" \5      5      4/rSrg)IVRSettings_FnTablei  getSettingsErrorNameFromEnumsetBoolNsetInt32setFloat	setStringgetBoolgetInt32getFloat	getStringremoveSectionremoveKeyInSectionr   )r   r   r   r   r  r  EVRSettingsErrorrG  r  ro  r  rn  r  r   r   r   r   rT  rT    s/   	')@K[)\]	+D(HkSZ[kSlmn	,T8XwPWXhPijk	,T8XwPWXhPijk	-dHhRYZjRklm	+K8WUeMfgh	,Wh'RbJcde	,Wh'RbJcde	-dHhRZ\cdt\uvw	1$'JZB[\]	6tXxQXYiQjklHr   rT  c                       \ rS rSrS rS rS\S\SS4S jrS\S\SS4S	 jrS\S\S
\	SS4S jr
S\S\S
\SS4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\SS4S jrS\S\SS4S jrSrg)r  i  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z'Error retrieving VR API for IVRSettings)	IVRSettings_Versionr  rT  r  r  r  r   r  r  r  s        r   r  IVRSettings.__init__  U    ){+k)%/79IJGHH*33r   c                 `    U R                   R                  nU" U5      nUR                  S5      $ )Nr  )r  rU  r  r  s       r   rU  (IVRSettings.getSettingsErrorNameFromEnum  s+      ==E}}W%%r   sectionsettingsKeyr   Nc                    U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" XU[	        U5      5        [
        R                  R                  R                  UR                  5        g Nr  r  )
r  rV  r  r`  r+   r'   ry  SettingsErrorr{  r  r  rh  ri  r  r%  r}  s         r   rV  IVRSettings.setBool  sm      ((Gg6G"g>K "
7e5''99%++Fr   c                    U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" XU[	        U5      5        [
        R                  R                  R                  UR                  5        g rk  )
r  rW  r  r`  r+   r'   ry  rl  r{  r  rm  s         r   rW  IVRSettings.setInt32  m      ))Gg6G"g>K "
7e5''99%++Fr   r  c                    U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" XU[	        U5      5        [
        R                  R                  R                  UR                  5        g rk  )
r  rX  r  r`  r+   r'   ry  rl  r{  r  rm  s         r   rX  IVRSettings.setFloat  rq  r   c                    U R                   R                  nUb
  [        USS9nUb
  [        USS9nUb
  [        USS9n[        5       nU" XU[	        U5      5        [
        R                  R                  R                  UR                  5        g rk  )
r  rY  r  r`  r+   r'   ry  rl  r{  r  rm  s         r   rY  IVRSettings.setString  s      **Gg6G"g>K%'2E "
7e5''99%++Fr   c                    U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" X[	        U5      5      n[
        R                  R                  R                  UR                  5        U$ )z
Users of the system need to provide a proper default in default.vrsettings in the resources/settings/ directory
of either the runtime or the driver_xxx directory. Otherwise the default will be false, 0, 0.0 or ""
r  r  )
r  rZ  r  r`  r+   r'   ry  rl  r{  r  r  rh  ri  r%  r}  r-  s         r   rZ  IVRSettings.getBool
  st    
   ((Gg6G"g>K "G%,7''99%++Fr   c                    U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" X[	        U5      5      n[
        R                  R                  R                  UR                  5        U$ rk  )
r  r[  r  r`  r+   r'   ry  rl  r{  r  rw  s         r   r[  IVRSettings.getInt32  r      ))Gg6G"g>K "G%,7''99%++Fr   c                    U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" X[	        U5      5      n[
        R                  R                  R                  UR                  5        U$ rk  )
r  r\  r  r`  r+   r'   ry  rl  r{  r  rw  s         r   r\  IVRSettings.getFloat$  r{  r   c           	      N   U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" XS S[	        U5      5      n [
        R                  R                  R                  UR                  5        [        R                  " U5      nU" XXe[	        U5      5        [
        R                  R                  R                  UR                  5        [        UR                  5      R                  S5      $ ! [
        R                  R                   a     Nf = f)Nr  r  r   )r  r]  r  r`  r+   r'   ry  rl  r{  r  r  r*   r  r  )r  rh  ri  r%  r}  valueLenr  s          r   r]  IVRSettings.getString/  s      **Gg6G"g>K "gD!U5\B	++==ekkJ ++H5
7%,?''99%++FU[[!((11   44 		s   3D D$#D$c                     U R                   R                  nUb
  [        USS9n[        5       nU" U[	        U5      5        [
        R                  R                  R                  UR                  5        g rk  )
r  r^  r  r`  r+   r'   ry  rl  r{  r  )r  rh  r%  r}  s       r   r^  IVRSettings.removeSection@  sY      ..Gg6G "
7E%L!''99%++Fr   c                    U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" X[	        U5      5        [
        R                  R                  R                  UR                  5        g rk  )
r  r_  r  r`  r+   r'   ry  rl  r{  r  )r  rh  ri  r%  r}  s        r   r_  IVRSettings.removeKeyInSectionH  sk      33Gg6G"g>K "
7u.''99%++Fr   r  )r   r   r   r   r  rU  r#   rV  rW  r  rX  rY  rZ  r[  r\  r]  r^  r_  r   r   r   r   r  r    s   4&
Gs G G GG G# G GG G# Ge G G
G 
G3 
Gs 
Gt 
Gs  	 	# 		 	# 	2 23 2"GS GT GG# GC GD Gr   r  c                   
   \ rS rSrS\" \5      4S\" \\" \5      \" \5      5      4S\" \\" \	5      5      4S\" S5      4S\" S\
5      4S\" S\" \
5      \\\" \
5      5      4S	\" \5      4S
\" S\5      4S\" S\5      4/	rSrg)IVRChaperone_FnTableiS  getCalibrationStategetPlayAreaSizegetPlayAreaRect
reloadInfoNsetSceneColorgetBoundsColorareBoundsVisibleforceBoundsVisibleresetZeroPoser   )r   r   r   r   r  ChaperoneCalibrationStaterG  r  r  r7  r1  c_intr  r  r   r   r   r   r  r  S  s    	 78Q RS	3KAQSZ[bScde	3KASTU	.t45	1$
CD	249LeU\^efp^qrs	4[AB	6t[IJ	1$8OPQ
Hr   r  c                   p    \ rS rSrSrS rS rS rS rSS jr	SS	 jr
S
\S\4S jrS rSS jrSS jrSrg)rc  ia  z
HIGH LEVEL TRACKING SPACE ASSUMPTIONS:
0,0,0 is the preferred standing area center.
0Y is the floor height.
-Z is the preferred forward facing direction.
c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z(Error retrieving VR API for IVRChaperone)	IVRChaperone_Versionr  r  r  r  r  r   r  r  r  s        r   r  IVRChaperone.__init__i  U    *{+k)&/79IJHII*33r   c                 @    U R                   R                  nU" 5       nU$ )zGet the current state of Chaperone calibration. This state can change at any time during a session due to physical base station changes.)r  r  r@  s      r   r   IVRChaperone.getCalibrationStates  r  r   c                     U R                   R                  n[        5       n[        5       nU" [        U5      [        U5      5      nXBR                  UR                  4$ )z
Returns the width and depth of the Play Area (formerly named Soft Bounds) in X and Z.
Tracking space center (0,0,0) is the center of the Play Area.
)r  r  r  r+   r  r  r%  sizeXsizeZr-  s        r   r  IVRChaperone.getPlayAreaSizey  sJ    
   00		E%L%,/{{EKK//r   c                 j    U R                   R                  n[        5       nU" [        U5      5      nX24$ )as  
Returns a quad describing the Play Area (formerly named Soft Bounds).
The corners form a rectangle.
Corners are in counter-clockwise order, starting at the front-right.
The positions are given relative to the standing origin.
The center of the rectangle is the center of the user's calibrated play space, not necessarily the standing
origin.
The Play Area's forward direction goes from its center through the mid-point of a line drawn between the
first and second corner.
The quad lies on the XZ plane (height = 0y), with 2 sides parallel to the X-axis and two sides parallel
to the Z-axis of the user's calibrated Play Area.
)r  r  r7  r+   r  r%  rectr-  s       r   r  IVRChaperone.getPlayAreaRect  s1       00{E$K|r   Nc                 >    U R                   R                  nU" 5         g)z4Reload Chaperone data from the .vrchap file on disk.N)r  r  r  s     r   r  IVRChaperone.reloadInfo  s      ++
r   c                 @    U R                   R                  nU" U5        g)zVOptionally give the chaperone system a hit about the color and brightness in the sceneN)r  r  )r  colorr%  s      r   r  IVRChaperone.setSceneColor  s      ..
5	r   numOutputColorscollisionBoundsFadeDistancec                     U R                   R                  n[        5       n[        5       nU" [        U5      X[        U5      5        XE4$ )z:Get the current chaperone bounds draw color and brightness)r  r  r1  r+   )r  r  r  r%  outputColorArrayoutputCameraColors         r   r  IVRChaperone.getBoundsColor  sE      //%<&L
5!"ORWXiRjk22r   c                 @    U R                   R                  nU" 5       nU$ )z2Determine whether the bounds are showing right now)r  r  r@  s      r   r  IVRChaperone.areBoundsVisible        11r   c                 @    U R                   R                  nU" U5        g)z.Force the bounds to show, mostly for utilitiesN)r  r  )r  forcer%  s      r   r  IVRChaperone.forceBoundsVisible  s      33
5	r   c                 @    U R                   R                  nU" U5        g)a  
Sets the zero pose for the given tracker coordinate system to the current position and yaw of the HMD. After
ResetZeroPose all GetDeviceToAbsoluteTrackingPose calls as the origin will be relative to this new zero pose.
The new zero coordinate system will not change the fact that the Y axis is up in the real world, so the next
pose returned from GetDeviceToAbsoluteTrackingPose after a call to ResetZeroPose may not be exactly an
identity matrix.

NOTE: This function overrides the user's previously saved zero pose and should only be called as the result of a user action.
Users are also able to set their zero pose via the OpenVR Dashboard.
N)r  r  )r  trackingUniverseOriginr%  s      r   r  IVRChaperone.resetZeroPose  s       ..
!"r   r  r  )r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rc  rc  a  sH    4	0$

3c 3PU 3
#r   rc  c                   d   \ rS rSrS\" \\5      4S\" S5      4S\" \\" \5      \" \5      5      4S\" \\" \	5      5      4S\" \\" \	5      \" \
5      5      4S\" \\" \	5      \" \
5      5      4S	\" \\" \5      5      4S
\" \\" \5      5      4S\" S\\5      4S\" S\" \	5      \
5      4S\" S\" \5      \
5      4S\" S\" \5      5      4S\" S\" \5      5      4S\" S\5      4S\" \\" \5      5      4S\" \\\" \
5      5      4S\" \\\
5      4S\" S5      4S\" S5      4S\" S5      4/rSrg)IVRChaperoneSetup_FnTablei  commitWorkingCopyrevertWorkingCopyNgetWorkingPlayAreaSizegetWorkingPlayAreaRectgetWorkingCollisionBoundsInfogetLiveCollisionBoundsInfo)getWorkingSeatedZeroPoseToRawTrackingPose+getWorkingStandingZeroPoseToRawTrackingPosesetWorkingPlayAreaSizesetWorkingCollisionBoundsInfosetWorkingPerimeter)setWorkingSeatedZeroPoseToRawTrackingPose+setWorkingStandingZeroPoseToRawTrackingPosereloadFromDisk&getLiveSeatedZeroPoseToRawTrackingPoseexportLiveToBufferimportFromBufferToWorkingshowWorkingSetPreviewhideWorkingSetPreviewroomSetupStartingr   )r   r   r   r   r  rG  EChaperoneConfigFiler  r  r7  rn  r  r&  r  r  r   r   r   r   r  r    s   	5kCWXY	5d;<	!#:;PWHXZabiZj#kl	!#:;PYHZ#[\	(*A+wW`Oacjksct*uv	%'>{GT]L^`ghp`q'rs	46Mk[bcp[q6rs	68OP[]der]s8tu	!#:4'#RS	(*A$PYHZ\d*ef	 7gl>SU] ^_	46MdT[\iTj6kl	68OPTV]^kVl8mn	249MNO	13J;X_`mXn3op	6{HgV^N_`a	$&=k8U]&^_	 "9$"?@	 "9$"?@	5d;<)Hr   r  c                       \ rS rSrSrS rS rSS jrS rS	 r	S
 r
S rS rS rS\S\SS4S jrS rS rSS jrSS jrSS jrS rS rS\4S jrSS jrSS jrSS jrSrg)rh  i  a  
Manages the working copy of the chaperone info. By default this will be the same as the
live copy. Any changes made with this interface will stay in the working copy until
CommitWorkingCopy() is called, at which point the working copy and the live copy will be
the same again.
c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z-Error retrieving VR API for IVRChaperoneSetup)	IVRChaperoneSetup_Versionr  r  r  r  r  r   r  r  r  s        r   r  IVRChaperoneSetup.__init__  U    /{+k)+/79IJMNN*33r   c                 B    U R                   R                  nU" U5      nU$ )z&Saves the current working copy to disk)r  r  )r  
configFiler%  r-  s       r   r  #IVRChaperoneSetup.commitWorkingCopy  s!      22Jr   r   Nc                 >    U R                   R                  nU" 5         g)z
Reverts the working copy to match the live chaperone calibration.
To modify existing data this MUST be do WHILE getting a non-error ChaperoneCalibrationStatus.
Only after this should you do gets and sets on the existing data.
N)r  r  r  s     r   r  #IVRChaperoneSetup.revertWorkingCopy         22
r   c                     U R                   R                  n[        5       n[        5       nU" [        U5      [        U5      5      nXBR                  UR                  4$ )z
Returns the width and depth of the Play Area (formerly named Soft Bounds) in X and Z from the working copy.
Tracking space center (0,0,0) is the center of the Play Area.
)r  r  r  r+   r  r  s        r   r  (IVRChaperoneSetup.getWorkingPlayAreaSize  sJ    
   77		E%L%,/{{EKK//r   c                 j    U R                   R                  n[        5       nU" [        U5      5      nX24$ )aM  
Returns the 4 corner positions of the Play Area (formerly named Soft Bounds) from the working copy.
Corners are in clockwise order.
Tracking space center (0,0,0) is the center of the Play Area.
It's a rectangle.
2 sides are parallel to the X axis and 2 sides are parallel to the Z axis.
Height of every corner is 0Y (on the floor).
)r  r  r7  r+   r  s       r   r  (IVRChaperoneSetup.getWorkingPlayAreaRect  s1       77{E$K|r   c                     U R                   R                  n[        5       n[        5       nU" [	        U5      [	        U5      5      nXBUR
                  4$ )z
Returns the number of Quads if the buffer points to null. Otherwise it returns Quads
into the buffer up to the max specified from the working copy.
)r  r  r7  rn  r+   r  r  r%  quadsBuffer
quadsCountr-  s        r   r  /IVRChaperoneSetup.getWorkingCollisionBoundsInfo  sJ    
   >>kZ
E+&j(9:J$4$444r   c                     U R                   R                  n[        5       n[        5       nU" [	        U5      [	        U5      5      nXBUR
                  4$ )z
Returns the number of Quads if the buffer points to null. Otherwise it returns Quads
into the buffer up to the max specified.
)r  r  r7  rn  r+   r  r  s        r   r  ,IVRChaperoneSetup.getLiveCollisionBoundsInfo   sJ    
   ;;kZ
E+&j(9:J$4$444r   c                 j    U R                   R                  n[        5       nU" [        U5      5      nX24$ )z<Returns the preferred seated position from the working copy.)r  r  r  r+   r  r%  seatedZeroPoseToRawTrackingPoser-  s       r   r  ;IVRChaperoneSetup.getWorkingSeatedZeroPoseToRawTrackingPose+  s4      JJ*7/'E9:;66r   c                 j    U R                   R                  n[        5       nU" [        U5      5      nX24$ )z2Returns the standing origin from the working copy.)r  r  r  r+   )r  r%  !standingZeroPoseToRawTrackingPoser-  s       r   r  =IVRChaperoneSetup.getWorkingStandingZeroPoseToRawTrackingPose2  s4      LL,9O)E;<=88r   r*  r,  c                 @    U R                   R                  nU" X5        g)z'Sets the Play Area in the working copy.N)r  r  )r  r*  r,  r%  s       r   r  (IVRChaperoneSetup.setWorkingPlayAreaSize9  s      77
1r   c                     U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" X45        U$ )zOSets the Collision Bounds in the working copy. Note: ceiling height is ignored.Nr   r   )r  r  rS  r*   rT  r+   r  r7  )r  r  r%  quadsBufferArgr  s        r   r  /IVRChaperoneSetup.setWorkingCollisionBoundsInfo>  sy      >>!NJV\\22";q>2N[)J$q=+K";q>2NJ
>&r   c                     U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" X45        U$ )z.Sets the Collision Bounds in the working copy.Nr   r   )r  r  rS  r*   rT  r+   r  r&  )r  pointBufferr%  pointBufferArg
pointCounts        r   r  %IVRChaperoneSetup.setWorkingPerimeterN  sz      44!NJV\\22";q>2N[)J'!+.K";q>2NJ
>&r   c                 R    U R                   R                  nU" [        U5      5        g)z7Sets the preferred seated position in the working copy.N)r  r  r+   )r  "matSeatedZeroPoseToRawTrackingPoser%  s      r   r  ;IVRChaperoneSetup.setWorkingSeatedZeroPoseToRawTrackingPose^  s!      JJ
5345r   c                 R    U R                   R                  nU" [        U5      5        g)z9Sets the preferred standing position in the working copy.N)r  r  r+   )r  $matStandingZeroPoseToRawTrackingPoser%  s      r   r  =IVRChaperoneSetup.setWorkingStandingZeroPoseToRawTrackingPosec  s!      LL
5567r   c                 @    U R                   R                  nU" U5        g)z8Tear everything down and reload it from the file on diskN)r  r  )r  r  r%  s      r   r   IVRChaperoneSetup.reloadFromDiskh  s      //
:r   c                 j    U R                   R                  n[        5       nU" [        U5      5      nX24$ )z&Returns the preferred seated position.)r  r  r  r+   r  s       r   r  8IVRChaperoneSetup.getLiveSeatedZeroPoseToRawTrackingPosem  s4      GG*7/'E9:;66r   c                     U R                   R                  nU" S S5      n[        R                  " U5      nU" X25        [	        UR
                  5      R                  S5      $ )Nr   r  )r  r  r*   r  r  r  r  )r  r%  bufferLengthr  s       r   r  $IVRChaperoneSetup.exportLiveToBuffert  sP      33${,,\:
6 V\\"))'22r   r  c                 \    U R                   R                  nUb
  [        USS9nU" X5      nU$ rk  )r  r  r  )r  r  importFlagsr%  r-  s        r   r  +IVRChaperoneSetup.importFromBufferToWorking{  s4      ::6G4FF(r   c                 >    U R                   R                  nU" 5         g)zIShows the chaperone data in the working set to preview in the compositor.N)r  r  r  s     r   r  'IVRChaperoneSetup.showWorkingSetPreview        66
r   c                 >    U R                   R                  nU" 5         g)z]Hides the chaperone data in the working set to preview in the compositor (if it was visible).N)r  r  r  s     r   r  'IVRChaperoneSetup.hideWorkingSetPreview  r  r   c                 >    U R                   R                  nU" 5         g)aI  
Fire an event that the tracking system can use to know room setup is about to begin. This lets the tracking
system make any last minute adjustments that should be incorporated into the new setup.  If the user is adjusting
live in HMD using a tweak tool, keep in mind that calling this might cause the user to see the room jump.
N)r  r  r  s     r   r  #IVRChaperoneSetup.roomSetupStarting  r  r   r  r  )r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r#   r  r  r  r  r   r   r   r   rh  rh    s    4	0	5	579 % D 
  6
8

73 

r   rh  c                       \ rS rSr/ S\" S\5      4PS\" \5      4PS\" \\" \5      \	\" \5      \	5      4PS\" \\" \5      \	\" \5      \	5      4PS\" \\
\" \5      \" \5      5      4PS\" \\" \5      \" \5      \\" \5      \" \5      \5      4PS	\" \\\" \5      \" \5      \5      4PS
\" \\\" \5      \	\" \5      \5      4PS\" S5      4PS\" S5      4PS\" \\" \5      \	5      4PS\" \	\" \5      \	5      4PS\" \5      4PS\" S\" \5      \	5      4PS\" S\\\\\\5      4PS\" \\5      4PS\" S\\5      4PS\" \5      4PS\" \\" \5      \	5      4PS\" S5      4PS\" S5      4PS\" S5      4PS\" S5      4PS\" \5      4PS\" \	5      4PS\" \	5      4PS\" \5      4PS\" S5      4PS\" S5      4PS \" \5      4PS!\" S5      4PS"\" \5      4PS#\" S\5      4PS$\" S5      4PS%\" S\5      4PS&\" \\\\" \5      5      4PS'\" S\5      4PS(\" \\\" \5      \" \5      5      4PS)\" \\\5      4PS*\" S\5      4PS+\" S\5      4PS,\" \	\\	5      4PS-\" \	\" \5      \\	5      4PS.\" S\5      4PS/\" \5      4PS0\" \5      4PS1\" \5      4PS2\" \5      4PS3\" \\\" \5      \" \5      \	5      4PS4\" S5      4PS5\" \\" \5      \	5      4PS6\" \\" \	5      \" \	5      5      4PS7\" \\	\" \5      \	5      4PrS8rg)9IVRCompositor_FnTablei  setTrackingSpaceNgetTrackingSpacewaitGetPosesgetLastPoses getLastPoseForTrackedDeviceIndexgetSubmitTexturesubmitsubmitWithArrayIndexclearLastSubmittedFramepostPresentHandoffgetFrameTiminggetFrameTimingsgetFrameTimeRemaininggetCumulativeStatsfadeToColorgetCurrentFadeColorfadeGridgetCurrentGridAlphasetSkyboxOverrideclearSkyboxOverridecompositorBringToFrontcompositorGoToBackcompositorQuitisFullscreengetCurrentSceneFocusProcessgetLastFrameRenderercanRenderSceneshowMirrorWindowhideMirrorWindowisMirrorWindowVisiblecompositorDumpImagesshouldAppRenderWithLowResourcesforceInterleavedReprojectionOnforceReconnectProcesssuspendRenderinggetMirrorTextureD3D11releaseMirrorTextureD3D11getMirrorTextureGLreleaseSharedGLTexturelockGLSharedTextureForAccessunlockGLSharedTextureForAccess#getVulkanInstanceExtensionsRequired!getVulkanDeviceExtensionsRequiredsetExplicitTimingModesubmitExplicitTimingDataisMotionSmoothingEnabledisMotionSmoothingSupportedisCurrentSceneFocusAppLoadingsetStageOverride_AsyncclearStageOverridegetCompositorBenchmarkResultsgetLastPosePredictionIDsgetPosesForFramer   ) r   r   r   r   r  r  EVRCompositorErrorr  r  rn  rP  rN  rG  EVRCompositorTextureUsagerV  EVRSubmitFlagsr  rn  r  r  r1  rR  glUInt_tglSharedTextureHandle_tr  r3   EVRCompositorTimingModer  r  r  r  r   r   r   r   r  r    s   6	4T;RST6	45LMN6 
01CWM`Eackmt  vI  nJ  LT  U  	V6 
01CWM`Eackmt  vI  nJ  LT  U  	V	6
 
,-DEWYmov  xK  pL  NU  Vi  Nj  .k  	l6 
45GQZI[]dep]q  tM  OV  W`  Oa  cj  k|  c}  M  N  	O6 
*+=vwyGY[bct[u  xF  G  	H6 
 !89KVU\]fUgiqsz  |M  tN  P^  "_  	`6 
#$;D$AB6 
6t<=6 
2;H^@_aijk6 
3HgF\>]_ghi6 
!"9'"BC6 
6tWE_=`bjkl6 
/gwQXZacnop6  
 7
K PQ!6" 
,T7KHI#6$ 
 7 @A%6& 
56H'R[J\^fgh'6( 
 7 =>)6* 
"#:4#@A+6, 
6t<=-6. 
2489/60 
0=>162 
'(?(IJ364 
 !8!BC566 
2;?@768 
4T:;96: 
4T:;;6< 
!"9+"FG=6> 
 !8!>??6@ 
+,CK,PQA6B 
*+B4+UVC6D 
!"9$"?@E6F 
4T;GHG6H 
!"9:LfV^`ghp`q"rsI6J 
%&=dH&MNK6L 
67I6SZ[cSdfm  oF  gG   H  	IM6N 
"#:;Ri#jkO6P 
()@G^)_`Q6R 
*+B4I`+abS6T 
/0GRZ\d0efU6V 
-.EhPWXjPkmuw  /A  	BW6X 
!"9$@W"XYY6Z 
$%<=O%PQ[6\ 
$%<[%IJ]6^ 
&'>{'KL_6` 
)*A+*NOa6b 
"#:;MxY`anYoqx  zX  rY  [c  $d  	ec6d 
6t<=e6f 
)*A+wWrOsu}*~g6h 
$%<=OQXYaQbdkltdu%vwi6j 
45GSZ[nSoqyz{k6Hr   r  c                      \ rS rSrSrS rSBS jrS rS rS	 r	S
 r
S\4S jrS\4SBS jjrS\4SBS jjrSBS jrSBS jrSCS jrS rS rS rSDS\S\S\S\S\SS4S jjrSDS jrS\SS4S jrS rSBS jrSBS jrSBS jrSBS  jrSBS! jrS" rS# r S$ r!S% r"SBS& jr#SBS' jr$S( r%SBS) jr&S* r'SBS+ jr(SBS, jr)SBS- jr*S. r+SBS/ jr,S0 r-S1 r.SBS2 jr/SBS3 jr0S4 r1S5 r2SBS6 jr3SBS7 jr4S8 r5S9 r6S: r7SES;\8SS4S< jjr9SBS= jr:S> r;S? r<S@ r=SAr>g)Frm  i  z6Allows the application to interact with the compositorc                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z)Error retrieving VR API for IVRCompositor)	IVRCompositor_Versionr  r  r  r  r  r   r  r  r  s        r   r  IVRCompositor.__init__  sU    +{+k)'/79IJIJJ*33r   r   Nc                 @    U R                   R                  nU" U5        g)z,Sets tracking space returned by WaitGetPosesN)r  r  )r  rV  r%  s      r   r  IVRCompositor.setTrackingSpace  s      11
6
r   c                 @    U R                   R                  nU" 5       nU$ )z4Gets current tracking space returned by WaitGetPoses)r  r  r@  s      r   r  IVRCompositor.getTrackingSpace  r  r   c                 4   U R                   R                  nUc  SnSnO_[        U[        R                  5      (       a  [        US   5      n[        U5      nO&[        [        -  " 5       n[        US   5      n[        nUc  SnSnO_[        U[        R                  5      (       a  [        US   5      n[        U5      nO&[        [        -  " 5       n[        US   5      n[        nU" XEXg5      n[        R                  R                  R                  U5        X4$ )a  
Scene applications should call this function to get poses to render with (and optionally poses predicted an additional frame out to use for gameplay).
This function will block until "running start" milliseconds before the start of the frame, and should be called at the last moment before needing to
start rendering.

Return codes:
  - IsNotSceneApplication (make sure to call VR_Init with VRApplicaiton_Scene)
  - DoNotHaveFocus (some other app has taken focus - this will throttle the call to 10hz to reduce the impact on that app)
Nr   )r  r  rS  r*   rT  r+   r  r  rU  r'   ry  CompositorErrorr{  	r  renderPoseArraygamePoseArrayr%  renderPoseArrayArgrenderPoseArrayCountgamePoseArrayArggamePoseArrayCountr}  s	            r   r  IVRCompositor.waitGetPoses  s
      --"!%#$ 66!&q'9!:#&#7 25NNQO!&q'9!:#<  #!"v||44$]1%56!$]!303LLOM$]1%56!:%=Mb));;EB--r   c                 4   U R                   R                  nUc  SnSnO_[        U[        R                  5      (       a  [        US   5      n[        U5      nO&[        [        -  " 5       n[        US   5      n[        nUc  SnSnO_[        U[        R                  5      (       a  [        US   5      n[        U5      nO&[        [        -  " 5       n[        US   5      n[        nU" XEXg5      n[        R                  R                  R                  U5        X4$ )z3Get the last set of poses returned by WaitGetPoses.Nr   )r  r  rS  r*   rT  r+   r  r  rU  r'   ry  rQ  r{  rR  s	            r   r  IVRCompositor.getLastPoses  s     --"!%#$ 66!&q'9!:#&#7 25NNQO!&q'9!:#<  #!"v||44$]1%56!$]!303LLOM$]1%56!:%=Mb));;EB--r   c                     U R                   R                  n[        5       n[        5       nU" U[        U5      [        U5      5      n[        R
                  R                  R                  U5        X44$ )a$  
Interface for accessing last set of poses returned by WaitGetPoses one at a time.
Returns VRCompositorError_IndexOutOfRange if unDeviceIndex not less than k_unMaxTrackedDeviceCount otherwise VRCompositorError_None.
It is okay to pass NULL for either pose if you only want one of the values.
)r  r  r  r+   r'   ry  rQ  r{  )r  rr  r%  rk  outputGamePoser}  s         r   r  .IVRCompositor.getLastPoseForTrackedDeviceIndex&  s`       AA(*
,.;j 153HI));;EB))r   c           	         U R                   R                  n[        5       n[        5       nU" [	        U5      [	        U5      U[	        U5      [	        U5      U5      n[
        R                  R                  R                  U5        Xg4$ )z:Get the shared texture to copy into for submitting frames.)	r  r  rN  rG  r+   r'   ry  rQ  r{  )	r  usager  boundssubmitFlagsr%  
outTexture
needsFlushr}  s	            r   r  IVRCompositor.getSubmitTexture3  sn      11[
 ]
5$eJ&7gPUV\P]_jk));;EB%%r   c                     U R                   R                  nU" U[        U5      [        U5      U5      n[        R                  R
                  R                  U5        g)a
  
Updated scene texture to display. If pBounds is NULL the entire texture will be used.  If called from an OpenGL app, consider adding a glFlush after
Submitting both frames to signal the driver to start processing, otherwise it may wait until the command buffer fills up, causing the app to miss frames.

OpenGL dirty state:
  glBindTexture

Return codes:
  - IsNotSceneApplication (make sure to call VR_Init with VRApplicaiton_Scene)
  - DoNotHaveFocus (some other app has taken focus)
  - TextureIsOnWrongDevice (application did not use proper AdapterIndex - see IVRSystem.GetDXGIOutputInfo)
  - SharedTexturesNotSupported (application needs to call CreateDXGIFactory1 or later before creating DX device)
  - TextureUsesUnsupportedFormat (scene textures must be compatible with DXGI sharing rules - e.g. uncompressed, no mips, etc.)
  - InvalidTexture (usually means bad arguments passed in)
  - AlreadySubmitted (app has submitted two left textures or two right textures in a single frame - i.e. before calling WaitGetPoses again)
N)r  r  r+   r'   ry  rQ  r{  )r  r,  r  ra  rb  r%  r}  s          r   r  IVRCompositor.submit<  sG    "   ''3gf{C));;EBr   c                     U R                   R                  nU" U[        U5      U[        U5      U5      n[        R                  R
                  R                  U5        g r)   )r  r  r+   r'   ry  rQ  r{  )r  r,  r  textureArrayIndexra  rb  r%  r}  s           r   r  "IVRCompositor.submitWithArrayIndexQ  sH      553g(95=+V));;EBr   c                 >    U R                   R                  nU" 5         g)z
Clears the frame that was sent with the last call to Submit. This will cause the
compositor to show the grid until Submit is called again.
N)r  r  r  s     r   r  %IVRCompositor.clearLastSubmittedFrameV  r  r   c                 >    U R                   R                  nU" 5         g)a  
Call immediately after presenting your app's window (i.e. companion window) to unblock the compositor.
This is an optional call, which only needs to be used if you can't instead call WaitGetPoses immediately after Present.
For example, if your engine's render and game loop are not on separate threads, or blocking the render thread until 3ms before the next vsync would
introduce a deadlock of some sort.  This function tells the compositor that you have finished all rendering after having Submitted buffers for both
eyes, and it is free to start its rendering work.  This should only be called from the same thread you are rendering on.
N)r  r  r  s     r   r   IVRCompositor.postPresentHandoff^  s       33
r   c                 l    U R                   R                  n[        5       nU" [        U5      U5      nXC4$ )z
Returns true if timing data is filled it.  Sets oldest timing info if nFramesAgo is larger than the stored history.
Be sure to set timing.size = sizeof(Compositor_FrameTiming) on struct passed in before calling this function.
)r  r  rn  r+   )r  	framesAgor%  timingr-  s        r   r  IVRCompositor.getFrameTimingi  s5    
   //')E&M9-~r   c                    U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" X45      nXQ4$ )a  
Interface for copying a range of timing data.  Frames are returned in ascending order (oldest to newest) with the last being the most recent frame.
Only the first entry's m_nSize needs to be set, as the rest will be inferred from that.  Returns total number of entries filled out.
Nr   r   )r  r  rS  r*   rT  r+   r  rn  )r  rq  r%  	timingArgframesr-  s         r   r  IVRCompositor.getFrameTimingss  s~    
   00>IF--fQi(I[F,q03FfQi(IFI&~r   c                 @    U R                   R                  nU" 5       nU$ )z
Returns the time in seconds left in the current (as identified by FrameTiming's frameIndex) frame.
Due to "running start", this value may roll over to the next frame before ever reaching 0.0.
)r  r  r@  s      r   r  #IVRCompositor.getFrameTimeRemaining  s!    
   66r   c                 j    U R                   R                  n[        5       nU" [        U5      U5        U$ )zFills out stats accumulated for the last connected application.  Pass in sizeof( Compositor_CumulativeStats ) as second parameter.)r  r  r  r+   )r  statsSizeInBytesr%  statss       r   r   IVRCompositor.getCumulativeStats  s/      33*,
5<)*r   secondsredgreenbluealphac                 D    U R                   R                  nU" XX4XV5        g)aD  
Fades the view on the HMD to the specified color. The fade will take fSeconds, and the color values are between
0.0 and 1.0. This color is faded on top of the scene based on the alpha parameter. Removing the fade color instantly
would be FadeToColor( 0.0, 0.0, 0.0, 0.0, 0.0 ).  Values are in un-premultiplied alpha space.
N)r  r  )r  r}  r~  r  r  r  rl   r%  s           r   r  IVRCompositor.fadeToColor  s!       ,,
7e8r   c                 B    U R                   R                  nU" U5      nU$ )zGet current fade color value.)r  r  )r  rl   r%  r-  s       r   r  !IVRCompositor.getCurrentFadeColor  s!      44Jr   c                 @    U R                   R                  nU" X5        g)z%Fading the Grid in or out in fSecondsN)r  r  )r  r}  
fadeGridInr%  s       r   r  IVRCompositor.fadeGrid  s      ))
7r   c                 @    U R                   R                  nU" 5       nU$ )z Get current alpha value of grid.)r  r  r@  s      r   r  !IVRCompositor.getCurrentGridAlpha  r  r   c                 P   U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" X45      n[        R                  R                  R                  U5        g)a+  
Override the skybox used in the compositor (e.g. for during level loads when the app can't feed scene images fast enough)
Order is Front, Back, Left, Right, Top, Bottom.  If only a single texture is passed, it is assumed in lat-long format.
If two are passed, it is assumed a lat-long stereo pair.
Nr   r   )r  r  rS  r*   rT  r+   r  rN  r'   ry  rQ  r{  )r  texturesr%  texturesArgtextureCountr}  s         r   r  IVRCompositor.setSkyboxOverride  s       22KL&,,//,Kx=L!A(H,KL;-));;EBr   c                 >    U R                   R                  nU" 5         g)z*Resets compositor skybox back to defaults.N)r  r   r  s     r   r   !IVRCompositor.clearSkyboxOverride        44
r   c                 >    U R                   R                  nU" 5         g)z
Brings the compositor window to the front. This is useful for covering any other window that may be on the HMD
and is obscuring the compositor window.
N)r  r!  r  s     r   r!  $IVRCompositor.compositorBringToFront  s    
   77
r   c                 >    U R                   R                  nU" 5         g)zuPushes the compositor window to the back. This is useful for allowing other applications to draw directly to the HMD.N)r  r"  r  s     r   r"   IVRCompositor.compositorGoToBack        33
r   c                 >    U R                   R                  nU" 5         g)z
DEPRECATED: Tells the compositor process to clean up and exit. You do not need to call this function at shutdown.
Under normal circumstances the compositor will manage its own life cycle based on what applications are running.
N)r  r#  r  s     r   r#  IVRCompositor.compositorQuit  s    
   //
r   c                 @    U R                   R                  nU" 5       nU$ )z+Return whether the compositor is fullscreen)r  r$  r@  s      r   r$  IVRCompositor.isFullscreen  s      --r   c                 @    U R                   R                  nU" 5       nU$ )zKReturns the process ID of the process that is currently rendering the scene)r  r%  r@  s      r   r%  )IVRCompositor.getCurrentSceneFocusProcess  s      <<r   c                 @    U R                   R                  nU" 5       nU$ )z
Returns the process ID of the process that rendered the last frame (or 0 if the compositor itself rendered the frame.)
Returns 0 when fading out from an app and the app's process Id when fading into an app.
)r  r&  r@  s      r   r&  "IVRCompositor.getLastFrameRenderer  s!    
   55r   c                 @    U R                   R                  nU" 5       nU$ )z7Returns true if the current process has the scene focus)r  r'  r@  s      r   r'  IVRCompositor.canRenderScene  s      //r   c                 >    U R                   R                  nU" 5         g)z
DEPRECATED: Opens the headset view (as either a window or docked widget depending on user's preferences) that displays what the user
sees in the headset.
N)r  r(  r  s     r   r(  IVRCompositor.showMirrorWindow  s    
   11
r   c                 >    U R                   R                  nU" 5         g)zIDEPRECATED: Closes the headset view, either as a window or docked widget.N)r  r)  r  s     r   r)  IVRCompositor.hideMirrorWindow  s      11
r   c                 @    U R                   R                  nU" 5       nU$ )z\DEPRECATED: Returns true if the headset view (either as a window or docked widget) is shown.)r  r*  r@  s      r   r*  #IVRCompositor.isMirrorWindowVisible        66r   c                 >    U R                   R                  nU" 5         g)zyWrites back buffer and stereo left/right pair from the application to a 'screenshots' folder in the SteamVR runtime root.N)r  r+  r  s     r   r+  "IVRCompositor.compositorDumpImages  s      55
r   c                 @    U R                   R                  nU" 5       nU$ )z:Let an app know it should be rendering with low resources.)r  r,  r@  s      r   r,  -IVRCompositor.shouldAppRenderWithLowResources  s      @@r   c                 @    U R                   R                  nU" U5        g)z4Override interleaved reprojection logic to force on.N)r  r-  )r  overrider%  s      r   r-  ,IVRCompositor.forceInterleavedReprojectionOn  s      ??
8r   c                 >    U R                   R                  nU" 5         g)z-Force reconnecting to the compositor process.N)r  r.  r  s     r   r.  #IVRCompositor.forceReconnectProcess  r  r   c                 @    U R                   R                  nU" U5        g)zQTemporarily suspends rendering (useful for finer control over scene transitions).N)r  r/  )r  suspendr%  s      r   r/  IVRCompositor.suspendRendering!  s      11
7r   c                     U R                   R                  n[        5       nU" U[        U5      [        U5      5      n[        R
                  R                  R                  U5        UR                  $ )z
Opens a shared D3D11 texture with the undistorted composited image for each eye.  Use ReleaseMirrorTextureD3D11 when finished
instead of calling Release on the resource itself.
)	r  r0  rR  r+   r'   ry  rQ  r{  r  )r  r,  d3D11DeviceOrResourcer%  d3D11ShaderResourceViewr}  s         r   r0  #IVRCompositor.getMirrorTextureD3D11&  s]    
   66"**334e<S6TU));;EB&,,,r   c                 R    U R                   R                  nU" [        U5      5        g r)   )r  r1  r+   )r  r  r%  s      r   r1  'IVRCompositor.releaseMirrorTextureD3D111  s!      ::
5()*r   c                     U R                   R                  n[        5       n[        5       nU" U[	        U5      [	        U5      5      n[
        R                  R                  R                  U5        X44$ )z&Access to mirror textures from OpenGL.)	r  r2  rE  rF  r+   r'   ry  rQ  r{  )r  r,  r%  	textureIdsharedTextureHandler}  s         r   r2   IVRCompositor.getMirrorTextureGL5  s_      33J	573i(%0C*DE));;EB--r   c                 B    U R                   R                  nU" X5      nU$ r)   )r  r3  )r  r  r  r%  r-  s        r   r3  $IVRCompositor.releaseSharedGLTexture>  s"      77I3r   c                 @    U R                   R                  nU" U5        g r)   )r  r4  r  r  r%  s      r   r4  *IVRCompositor.lockGLSharedTextureForAccessC  s      ==
r   c                 @    U R                   R                  nU" U5        g r)   )r  r5  r  s      r   r5  ,IVRCompositor.unlockGLSharedTextureForAccessG  s      ??
r   c                     U R                   R                  nU" SS5      n[        R                  " U5      nU" X25        [	        UR
                  5      R                  S5      $ )z
[Vulkan Only]
return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing
null.  The string will be a space separated list of-required instance extensions to enable in VkCreateInstance
Nr   r  )r  r6  r*   r  r  r  r  )r  r%  r  r  s       r   r6  1IVRCompositor.getVulkanInstanceExtensionsRequiredK  sR       DDa[
++J7
5U[[!((11r   c                    U R                   R                  n[        5       nU" [        U5      SS5      n[        R
                  " U5      nU" [        U5      XC5        U[        UR                  5      R                  S5      4$ )z
[Vulkan only]
return 0. Otherwise it returns the length of the number of bytes necessary to hold this string including the trailing
null.  The string will be a space separated list of required device extensions to enable in VkCreateDevice
Nr   r  )	r  r7  r3   r+   r*   r  r  r  r  )r  r%  physicalDevicer  r  s        r   r7  /IVRCompositor.getVulkanDeviceExtensionsRequiredW  sn       BB+-n-tQ7
++J7
5 %4uU[[188AAAr   c                 @    U R                   R                  nU" U5        g)a  
[ Vulkan/D3D12 Only ]
There are two purposes for SetExplicitTimingMode:
  1. To get a more accurate GPU timestamp for when the frame begins in Vulkan/D3D12 applications.
  2. (Optional) To avoid having WaitGetPoses access the Vulkan queue so that the queue can be accessed from
  another thread while WaitGetPoses is executing.

More accurate GPU timestamp for the start of the frame is achieved by the application calling
SubmitExplicitTimingData immediately before its first submission to the Vulkan/D3D12 queue.
This is more accurate because normally this GPU timestamp is recorded during WaitGetPoses.  In D3D11,
WaitGetPoses queues a GPU timestamp write, but it does not actually get submitted to the GPU until the
application flushes.  By using SubmitExplicitTimingData, the timestamp is recorded at the same place for
Vulkan/D3D12 as it is for D3D11, resulting in a more accurate GPU time measurement for the frame.

Avoiding WaitGetPoses accessing the Vulkan queue can be achieved using SetExplicitTimingMode as well.  If this is desired,
the application should set the timing mode to Explicit_ApplicationPerformsPostPresentHandoff and *MUST* call PostPresentHandoff
itself. If these conditions are met, then WaitGetPoses is guaranteed not to access the queue.  Note that PostPresentHandoff
and SubmitExplicitTimingData will access the queue, so only WaitGetPoses becomes safe for accessing the queue from another
thread.
N)r  r8  )r  
timingModer%  s      r   r8  #IVRCompositor.setExplicitTimingModed  s    *   66
:r   c                     U R                   R                  nU" 5       n[        R                  R                  R                  U5        g)a(  
[ Vulkan/D3D12 Only ]
Submit explicit timing data.  When SetExplicitTimingMode is true, this must be called immediately before
the application's first vkQueueSubmit (Vulkan) or ID3D12CommandQueue::ExecuteCommandLists (D3D12) of each frame.
This function will insert a GPU timestamp write just before the application starts its rendering.  This function
will perform a vkQueueSubmit on Vulkan so must not be done simultaneously with VkQueue operations on another thread.
Returns VRCompositorError_RequestFailed if SetExplicitTimingMode is not enabled.
N)r  r9  r'   ry  rQ  r{  )r  r%  r}  s      r   r9  &IVRCompositor.submitExplicitTimingData|  s6       99));;EBr   c                 @    U R                   R                  nU" 5       nU$ )z
Indicates whether or not motion smoothing is enabled by the user settings.
If you want to know if motion smoothing actually triggered due to a late frame, check Compositor_FrameTiming
m_nReprojectionFlags & VRCompositor_ReprojectionMotion instead.
)r  r:  r@  s      r   r:  &IVRCompositor.isMotionSmoothingEnabled  rQ  r   c                 @    U R                   R                  nU" 5       nU$ )zOIndicates whether or not motion smoothing is supported by the current hardware.)r  r;  r@  s      r   r;  (IVRCompositor.isMotionSmoothingSupported  s      ;;r   c                 @    U R                   R                  nU" 5       nU$ )z
Indicates whether or not the current scene focus app is currently loading.  This is inferred from its use of FadeGrid to
explicitly fade to the compositor to cover up the fact that it cannot render at a sustained full framerate during this time.
)r  r<  r@  s      r   r<  +IVRCompositor.isCurrentSceneFocusAppLoading  s!    
   >>r   renderModelPathc                     U R                   R                  nUb
  [        USS9nU" U[        U5      [        U5      U5      n[        R
                  R                  R                  U5        g)a  
Override the stage model used in the compositor to replace the grid.  RenderModelPath is a full path the an OBJ file to load.
This file will be loaded asynchronously from disk and uploaded to the gpu by the runtime.  Once ready for rendering, the
VREvent StageOverrideReady will be sent.  Use FadeToGrid to reveal.  Call ClearStageOverride to free the associated resources when finished.
Nr  r  )r  r=  r  r+   r'   ry  rQ  r{  )r  r  rj  renderSettingssizeOfRenderSettingsr%  r}  s          r   r=  $IVRCompositor.setStageOverride_Async  s\       77&#OgFO?E)$4eN6KMab));;EBr   c                 >    U R                   R                  nU" 5         g)z7Resets the stage to its default user specified setting.N)r  r>  r  s     r   r>   IVRCompositor.clearStageOverride  r  r   c                 l    U R                   R                  n[        5       nU" [        U5      U5      nXC4$ )z
Returns true if pBenchmarkResults is filled it.  Sets pBenchmarkResults with the result of the compositor benchmark.
nSizeOfBenchmarkResults should be set to sizeof(Compositor_BenchmarkResults)
)r  r?  r  r+   )r  sizeOfBenchmarkResultsr%  benchmarkResultsr-  s        r   r?  +IVRCompositor.getCompositorBenchmarkResults  s:    
   >>68E*+-CD''r   c                    U R                   R                  n[        5       n[        5       nU" [        U5      [        U5      5      n[        R
                  R                  R                  U5        UR                  UR                  4$ )zReturns the frame id associated with the poses last returned by WaitGetPoses.  Deltas between IDs correspond to number of headset vsync intervals.)	r  r@  rn  r+   r'   ry  rQ  r{  r  )r  r%  renderPosePredictionIDgamePosePredictionIDr}  s        r   r@  &IVRCompositor.getLastPosePredictionIDs  sm      99!)'z5/0%8L2MN));;EB%++-A-G-GGGr   c                 T   U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" XU5      n[        R                  R                  R                  U5        U$ )zdGet the most up-to-date predicted (or recorded - up to 100ms old) set of poses for a given frame id.Nr   r   )r  rA  rS  r*   rT  r+   r  r  r'   ry  rQ  r{  )r  posePredictionID	poseArrayr%  poseArrayArgposeArrayCountr}  s          r   rA  IVRCompositor.getPosesForFrame  s      11LN	6<<00 1.L ^N,q03I 1.LN#>B));;EBr   r  r  )r   rR  )NNr   )?r   r   r   r   r  r  r  r  r  r  r  Submit_Defaultr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r#   r=  r>  r?  r@  rA  r   r   r   r   rm  rm    s~   @4
!.F.6* 7; & +/N C* LP]k C
	&95 9u 9U 9% 9X] 9tx 9   d  
C(






	-+.
  
2B0C
Cc 
C{ 
C
(Hr   rm  c                       \ rS rSrS\" S\\5      4S\" S\" \5      \" \5      5      4S\" S\5      4S\" \5      4S\" S\5      4S\" \5      4S	\" \	5      4S
\" S\	\	5      4S\" S\" \	5      \" \	5      5      4/	r
Srg)IVRHeadsetView_FnTablei  setHeadsetViewSizeNgetHeadsetViewSizesetHeadsetViewModegetHeadsetViewModesetHeadsetViewCroppedgetHeadsetViewCroppedgetHeadsetViewAspectRatiosetHeadsetViewBlendRangegetHeadsetViewBlendRanger   )r   r   r   r   r  rn  r  HeadsetViewMode_trG  r  r  r   r   r   r   r  r    s    	6tXxPQ	6tWX=NPWX`Pabc	6t=NOP	67HIJ	 "9$"LM	 "9+"FG	$&=g&FG	#%<T7G%TU	#%<T77CSU\]dUe%fg
Hr   r  c                   l    \ rS rSrS rSS jrS rSS jrS rSS	 jr	S
 r
S rS\S\SS4S jrS rSrg)rz  i  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z*Error retrieving VR API for IVRHeadsetView)	IVRHeadsetView_Versionr  r  r  r  r  r   r  r  r  s        r   r  IVRHeadsetView.__init__  U    ,{+k)(/79IJJKK*33r   r   Nc                 @    U R                   R                  nU" X5        g)a  
Sets the resolution in pixels to render the headset view. These values are clamped to k_unHeadsetViewMaxWidth
and k_unHeadsetViewMaxHeight respectively. For cropped views, the rendered output will be fit to aspect ratio
defined by the the specified dimensions. For uncropped views, the caller should use GetHeadsetViewAspectRation
to adjust the requested render size to avoid squashing or stretching, and then apply letterboxing to compensate
when displaying the results.
N)r  r  )r  r&  r'  r%  s       r   r  !IVRHeadsetView.setHeadsetViewSize  s       33
5r   c                     U R                   R                  n[        5       n[        5       nU" [        U5      [        U5      5        UR                  UR                  4$ )z<Gets the current resolution used to render the headset view.)r  r  rn  r+   r  r$  s       r   r  !IVRHeadsetView.getHeadsetViewSize  sF      33

5<v'{{FLL((r   c                 @    U R                   R                  nU" U5        g)z-Set the mode used to render the headset view.N)r  r  )r  headsetViewModer%  s      r   r  !IVRHeadsetView.setHeadsetViewMode  s      33
?r   c                 @    U R                   R                  nU" 5       nU$ )z5Get the current mode used to render the headset view.)r  r  r@  s      r   r  !IVRHeadsetView.getHeadsetViewMode	  rM  r   c                 @    U R                   R                  nU" U5        g)zcSet whether or not the headset view should be rendered cropped to hide the hidden area mesh or not.N)r  r  )r  croppedr%  s      r   r  $IVRHeadsetView.setHeadsetViewCropped  s      66
7r   c                 @    U R                   R                  nU" 5       nU$ )z4Get the current cropping status of the headset view.)r  r  r@  s      r   r  $IVRHeadsetView.getHeadsetViewCropped  r  r   c                 @    U R                   R                  nU" 5       nU$ )zhGet the aspect ratio (width:height) of the uncropped headset view (accounting for the current set mode).)r  r  r@  s      r   r  (IVRHeadsetView.getHeadsetViewAspectRatio        ::r   startPctendPctc                 @    U R                   R                  nU" X5        g)ziSet the range [0..1] that the headset view blends across the stereo overlapped area in cropped both mode.N)r  r  )r  r  r  r%  s       r   r  'IVRHeadsetView.setHeadsetViewBlendRange   s      99
8r   c                     U R                   R                  n[        5       n[        5       nU" [        U5      [        U5      5        UR                  UR                  4$ )zqGet the current range [0..1] that the headset view blends across the stereo overlapped area in cropped both mode.)r  r  r  r+   r  )r  r%  r  r  s       r   r  'IVRHeadsetView.getHeadsetViewBlendRange%  sF      999
5?E&M*~~v||++r   r  r  )r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   rz  rz    sI    4	)

  $ 
,r   rz  c                   d    \ rS rSrS\" \\\\\	\
\" \5      \" \5      5      4S\" \\5      4/rSrg)IVRNotifications_FnTablei.  createNotificationremoveNotificationr   N)r   r   r   r   r  EVRNotificationErrorr  r}  EVRNotificationTyper  EVRNotificationStyler  r  VRNotificationIdr  r   r   r   r   r  r  .  sq    	67KM^`hj}  @H  J^  `g  h|  `}  F  GW  X   Y  	Z	67KM]^_Hr   r  c                   6    \ rS rSrSrS rS\4S jrS	S jrSr	g)
r  i5  z;Allows notification sources to interact with the VR system.c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z,Error retrieving VR API for IVRNotifications)	IVRNotifications_Versionr  r  r  r  r  r   r  r  r  s        r   r  IVRNotifications.__init__8  U    .{+k)*/79IJLMM*33r   textc                     U R                   R                  nUb
  [        USS9n[        5       nU" XX4U[	        U5      [	        U5      5      n	[
        R                  R                  R                  U	5        U$ )as  
Create a notification and enqueue it to be shown to the user.
An overlay handle is required to create a notification, as otherwise it would be impossible for a user to act on it.
To create a two-line notification, use a line break ('\n') to split the text into two lines.
The pImage argument may be NULL, in which case the specified overlay's icon will be used instead.
r  r  )	r  r  r  r  r+   r'   ry  NotificationErrorr{  )
r  r  	userValuer  r!  styleimager%  r  r}  s
             r   r  #IVRNotifications.createNotificationB  sk       330D)+=U%uuUcOde++==eDr   Nc                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g)zJDestroy a notification, hiding it first if it currently shown to the user.N)r  r  r'   ry  r#  r{  )r  r  r%  r}  s       r   r  #IVRNotifications.removeNotificationQ  s7      33>"++==eDr   r  r  )
r   r   r   r   r  r  r#   r  r  r   r   r   r   r  r  5  s    E4 Er   r  c                   
   \ rS rSr/ S\" \\\" \5      5      4PS\" \\\\" \5      5      4PS\" \\\\\" \5      5      4PS\" \\5      4PS\" \	\\\	\" \5      5      4PS\" \	\\\	\" \5      5      4PS\" \\\5      4PS	\" \\\
\	\" \	5      \" \	5      5      4PS
\" \\5      4PS\" \\\	5      4PS\" \	\5      4PS\" \\\\5      4PS\" \\\\" \5      5      4PS\" \\\" \	5      5      4PS\" \\\\\5      4PS\" \\\" \5      \" \5      \" \5      5      4PS\" \\\5      4PS\" \\\" \5      5      4PS\" \\\5      4PS\" \\\" \5      5      4PS\" \\\	5      4PS\" \\\" \	5      5      4PS\" \\\5      4PS\" \\\" \5      5      4PS\" \\\5      4PS\" \\\" \5      5      4PS\" \\\5      4PS\" \\\" \5      5      4PS\" \\\5      4PS\" \\\" \5      5      4PS \" \\\" \5      5      4PS!\" \\\" \5      5      4PS"\" \\\" \5      5      4PS#\" \\\\" \5      5      4PS$\" \\\" \5      \" \5      5      4PS%\" \\\\" \5      5      4PS&\" \\\" \5      \" \5      5      4PS'\" \\\\5      4PS(\" \\\" \5      \\	5      4PS)\" \\\" \5      5      4PS*\" \\\" \5      5      4PS+\" \\\\" \5      \" \5      \5      4PS,\" \\\\5      4PS-\" \\5      4PS.\" \\5      4PS/\" \\5      4PS0\" \\\\\" \5      5      4PS1\" \\	5      4PS2\" \\\" \5      \	5      4PS3\" \\\" \5      5      4PS4\" \\\5      4PS5\" \\\" \5      5      4PS6\" \\\" \5      5      4PS7\" \\\" \5      \" \5      5      4PS8\" \\5      4PS9\" \\\" \5      \	\	5      4PS:\" \\\\\5      4PS;\" \\\5      4PS<\" \\\" \5      5      4PS=\" \\5      4PS>\" \\\" \5      5      4PS?\" \\5      4PS@\" \\\
\	\	\	5      4PSA\" \\\5      4PSB\" \\\" \
5      \
\" \	5      \" \	5      \" \	5      \" \5      \" \5      \" \5      5
      4PSC\" \\\
5      4PSD\" \\\" \	5      \" \	5      5      4PSE\" \\\\" \5      \" \5      5      4PSF\" \5      4PSG\" \\5      4PSH\" \\\	5      4PSI\" \\\" \	5      5      4PSJ\" SK\5      4PSL\" \5      4PSM\" \\\\	\\	\\ 5      4PSN\" \\\\\	\\	\\ 5	      4PSO\" \	\\	5      4PSP\" SK5      4PSQ\" SK\\" \5      5      4PSR\" SK\\!5      4PSS\" \"\\\\\\5      4PST\" SK5      4Pr#SUr$gK)VIVROverlay_FnTableiX  findOverlaycreateOverlaycreateSubviewOverlaydestroyOverlaygetOverlayKeygetOverlayNamesetOverlayNamegetOverlayImageDatagetOverlayErrorNameFromEnumsetOverlayRenderingPidgetOverlayRenderingPidsetOverlayFlaggetOverlayFlaggetOverlayFlagssetOverlayColorgetOverlayColorsetOverlayAlphagetOverlayAlphasetOverlayTexelAspectgetOverlayTexelAspectsetOverlaySortOrdergetOverlaySortOrdersetOverlayWidthInMetersgetOverlayWidthInMeterssetOverlayCurvaturegetOverlayCurvaturesetOverlayPreCurvePitchgetOverlayPreCurvePitchsetOverlayTextureColorSpacegetOverlayTextureColorSpacesetOverlayTextureBoundsgetOverlayTextureBoundsgetOverlayTransformTypesetOverlayTransformAbsolutegetOverlayTransformAbsolute(setOverlayTransformTrackedDeviceRelative(getOverlayTransformTrackedDeviceRelative)setOverlayTransformTrackedDeviceComponent)getOverlayTransformTrackedDeviceComponentsetOverlayTransformCursorgetOverlayTransformCursorsetOverlayTransformProjectionsetSubviewPositionshowOverlayhideOverlayisOverlayVisible!getTransformForOverlayCoordinateswaitFrameSyncpollNextOverlayEventgetOverlayInputMethodsetOverlayInputMethodgetOverlayMouseScalesetOverlayMouseScalecomputeOverlayIntersectionisHoverTargetOverlaysetOverlayIntersectionMask triggerLaserMouseHapticVibrationsetOverlayCursor setOverlayCursorPositionOverride"clearOverlayCursorPositionOverridesetOverlayTextureclearOverlayTexturesetOverlayRawsetOverlayFromFilegetOverlayTexturereleaseNativeOverlayHandlegetOverlayTextureSizecreateDashboardOverlayisDashboardVisibleisActiveDashboardOverlaysetDashboardOverlaySceneProcessgetDashboardOverlaySceneProcessshowDashboardNgetPrimaryDashboardDeviceshowKeyboardshowKeyboardForOverlaygetKeyboardTexthideKeyboardsetKeyboardTransformAbsolutesetKeyboardPositionForOverlayshowMessageOverlaycloseMessageOverlayr   )%r   r   r   r   r  EVROverlayErrorr  r  r  rn  rR  VROverlayFlagsrG  r  rT  rV  VROverlayTransformTyper  r  rP  r&  r  r  rK  VROverlayInputMethodr  r  r  rN  rS  EGamepadTextInputModeEGamepadTextInputLineModer}  r:  VRMessageOverlayResponser  r   r   r   r   r+  r+  X  s   S	/7SdKefgS	1/8XW^_pWqrsS 
 !8J[]egoqx  zK  rL  "M  	NS 
2?DUVW	S
 
1(<MxYacjkzc{|}S 
28=NPXZbdkl{d|}~S 
2?DUW_`aS 
 7IZ\dfnpw  yA  qB  DK  LT  DU  !V  	WS 
'(?/(Z[S 
"#:?L]_g#hiS 
"#:8EV#WXS 
2?DUWegrstS 
2?DUWegnozg{|}S 
3OEVX_`hXijkS 
3OEVX_ahjqrsS  
3OEVX_`gXhjqryjz  }D  EL  }M  N  	O!S" 
3OEVX_`a#S$ 
3OEVX_`gXhij%S& 
!"9/K\^e"fg'S( 
!"9/K\^efm^n"op)S* 
 7IZ\d ef+S, 
 7IZ\cdl\m no-S. 
#$;OM^`g$hi/S0 
#$;OM^`gho`p$qr1S2 
 7IZ\c de3S4 
 7IZ\cdk\l mn5S6 
#$;OM^`g$hi7S8 
#$;OM^`gho`p$qr9S: 
'(?Qbdo(pq;S< 
'(?Qbdklwdx(yz=S> 
#$;OM^`ghy`z${|?S@ 
#$;OM^`ghy`z${|ASB 
#$;OM^`gh~`  %A  	BCSD 
'(?Qbd{  ~E  FS  ~T  )U  	VESF 
'(?Qbdk  mD  eE  GN  O\  G]  )^  	_GSH 
45L_^o  rF  HO  P]  H^  6_  	`ISJ 
45L_^oqx  zN  rO  QX  Yf  Qg  6h  	iKSL 
56Mo_p  sG  IQ  7R  	SMSN 
56Mo_pry  {O  sP  RZ  \d  7e  	fOSP 
%&=oO`bijvbw&xyQSR 
%&=oO`bijvbw&xySST 
)*A/Sdf}  @G  HU  @V  X_  `u  Xv  x~  +  	@USV 
6HY[bdklmWSX 
/ARSTYSZ 
/ARST[S\ 
4[BSTU]S^ 
-.EoWh  kB  DP  RY  Zg  Rh  /i  	j_S` 
1/8LMaSb 
 !8FWY`ajYkmu!vwcSd 
!"9/K\^efz^{"|}eSf 
!"9/K\^r"stgSh 
 !8J[]deq]r!stiSj 
 !8J[]deq]r!stkSl 
&'>{L]_f  hE  `F  HO  Pn  Ho  (p  	qmSn 
 !8FW!XYoSp 
&'>Pacj  lP  dQ  S[  ]e  (f  	gqSr 
,-D_Vgipry  |C  .D  	EsSt 
4_FWYjkluSv 
,-D_Vgipq}i~-  	AwSx 
./FXi/jkySz 
5oGXZabkZlmn{S| 
 7IZ [\}S~ 
1/CTV^`hjrt|}~S@ 
6HY[cdeASB 
5oGXZabjZkmuw~  @H  xI  KR  S[  K\  ^e  fn  ^o  qx  yE  qF  HO  P[  H\  ^e  fw  ^x  y  	zCSD 
&'>Pack'lmESF 
!"9/K\^efn^oqx  zB  rC  #D  	EGSH 
"#:?HV^`ghy`z  }D  EV  }W  $X  	YISJ 
6{CDKSL 
$%<[J[%\]MSN 
+,COUfhp,qrOSP 
+,COUfhopxhy,z{QSR 
1$ABSST 
%&=>R&STUSV 
0BWYrt|  G  IQ  S[  ]e  f  	gWSX 
"#:?L]_t  wP  RZ  \d  fn  px  zB  $C  	DYSZ 
3HhQR[S\ 
067]S^ 
()@G^`ghu`v)wx_S` 
)*A$HY[e*fgaSb 
67OQY[cemow  zB  DL   M  	NcSd 
 7 =>eSHr   r+  c                      \ rS rSrS rS\4S jrS\S\4S jrS\S\4S	 jrSvS jr	S r
S rS\S
S4S jrS rS rSvS jrS rSvS jrS rS rS\S\S\S
S4S jrS rS\S
S4S jrS rS \S
S4S! jrS" rSvS# jrS$ rS%\S
S4S& jrS' rS(\S
S4S) jrS* r S+\S
S4S, jr!S- r"SvS. jr#S/ r$SvS0 jr%S1 r&S2 r'SvS3 jr(S4 r)SvS5 jr*S6 r+S7\S
S4S8 jr,S9 r-SvS: jr.S; r/SvS< jr0S=\S>\S
S4S? jr1SvS@ jr2SvSA jr3SB r4SC r5SvSD jr6SE r7SF r8SvSG jr9SH r:SvSI jr;SJ r<SK r=\>" \?5      4SL jr@SM\SN\SO\S
S4SP jrASvSQ jrBSvSR jrCSvSS jrDSvST jrESvSU jrFSvSV jrGSW\S
S4SX jrHSY rISvSZ jrJS[ rKS\S\\4S] jrLS^ rMS_ rNSvS` jrOSa rPSb\S
S4Sc jrQSd rRSe\Sf\S
S4Sg jrSSe\Sf\S
S4Sh jrTSi rUSvSj jrVSvSk jrWSvSl jrXSwSm\Sn\So\Sp\Sq\Sr\4Ss jjrYSvSt jrZSur[g)xrq  i  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z&Error retrieving VR API for IVROverlay)	IVROverlay_Versionr  r+  r  r  r  r   r  r  r  s        r   r  IVROverlay.__init__  sU    ({+k)$/79IJFGG*33r   
overlayKeyc                     U R                   R                  nUb
  [        USS9n[        5       nU" U[	        U5      5      n[
        R                  R                  R                  U5        UR                  $ )z1Finds an existing overlay with the specified key.r  r  )
r  r,  r  r  r+   r'   ry  OverlayErrorr{  r  )r  r  r%  r  r}  s        r   r,  IVROverlay.findOverlay  sd      ,,!zG<J)+:u]34&&88?"""r   overlayNamec                    U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" X[	        U5      5      n[
        R                  R                  R                  U5        UR                  $ )zQCreates a new named overlay. All overlays start hidden and with default settings.r  r  )
r  r-  r  r  r+   r'   ry  r  r{  r  )r  r  r  r%  r  r}  s         r   r-  IVROverlay.createOverlay  sv      ..!zG<J"g>K)+:E-,@A&&88?"""r   subviewOverlayKeysubviewOverlayNamec                    U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" XU[	        U5      5      n[
        R                  R                  R                  U5        UR                  $ )z
Creates a Subview Overlay, which is a separate image that gets composited onto an existing parent overlay based on a 2D transform.
Subview overlays may only be created for parent overlays of the same process.
r  r  )
r  r.  r  r  r+   r'   ry  r  r{  r  )r  parentOverlayHandler  r  r%  subviewOverlayHandler}  s          r   r.  IVROverlay.createSubviewOverlay  s    
   55( %&7' J)!&'9G!L02&;MuUiOjk&&88?#)))r   r   Nc                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g)z
Destroys the specified overlay. When an application calls VR_Shutdown all overlays created by that app are
automatically destroyed.
N)r  r/  r'   ry  r  r{  r  r  r%  r}  s       r   r/  IVROverlay.destroyOverlay  s9    
   //=!&&88?r   c                    U R                   R                  n[        5       nU" USS[        U5      5      n [        R
                  R                  R                  UR                  5        [        R                  " U5      nU" XU[        U5      5        [        R
                  R                  R                  UR                  5        [        UR                  5      R                  S5      $ ! [        R
                  R                   a     Nf = f)z
Fills the provided buffer with the string key of the overlay. Returns the size of buffer required to store the key, including
the terminating null character. k_unVROverlayMaxKeyLength will be enough bytes to fit the string.
Nr   r  )r  r0  r~  r+   r'   ry  r  r{  r  r  r*   r  r  r  r  r  r%  r}  r  r  s         r   r0  IVROverlay.getOverlayKey  s    
   ..!tQe=
	**<<U[[I ++J7
=U5\:&&88EU[[!((11   44 		r  c                    U R                   R                  n[        5       nU" USS[        U5      5      n [        R
                  R                  R                  UR                  5        [        R                  " U5      nU" XU[        U5      5        [        R
                  R                  R                  UR                  5        [        UR                  5      R                  S5      $ ! [        R
                  R                   a     Nf = f)z
Fills the provided buffer with the friendly name of the overlay. Returns the size of buffer required to store the key, including
the terminating null character. k_unVROverlayMaxNameLength will be enough bytes to fit the string.
Nr   r  )r  r1  r~  r+   r'   ry  r  r{  r  r  r*   r  r  r  r  s         r   r1  IVROverlay.getOverlayName  s    
   //!tQe=
	**<<U[[I ++J7
=U5\:&&88EU[[!((11   44 		r  namec                     U R                   R                  nUb
  [        USS9nU" X5      n[        R                  R
                  R                  U5        g)z$set the name to use for this overlayNr  r  )r  r2  r  r'   ry  r  r{  )r  r  r  r%  r}  s        r   r2  IVROverlay.setOverlayName
  sI      //0D='&&88?r   c           	      &   U R                   R                  n[        5       n[        5       nU" U[        U5      U[        U5      [        U5      5      n[        R
                  R                  R                  U5        UR                  UR                  4$ )z
Gets the raw image data from an overlay. Overlay image data is always returned as RGBA data, 4 bytes per pixel. If the buffer is not large enough, width and height
will be set and VROverlayError_ArrayTooSmall is returned.
)	r  r3  rn  r+   r'   ry  r  r{  r  )r  r  r  r  r%  r&  r'  r}  s           r   r3  IVROverlay.getOverlayImageData  so    
   44
=%-U5\5QW=Y&&88?{{FLL((r   c                 `    U R                   R                  nU" U5      nUR                  S5      $ )z
returns a string that corresponds with the specified overlay error. The string will be the name
of the error enum value for all valid error codes
r  )r  r4  r  r  s       r   r4  &IVROverlay.getOverlayErrorNameFromEnum  s-    
   <<E}}W%%r   c                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)z
Sets the pid that is allowed to render to this overlay (the creator pid is always allow to render),
by default this is the pid of the process that made the overlay
N)r  r5  r'   ry  r  r{  )r  r  pIDr%  r}  s        r   r5  !IVROverlay.setOverlayRenderingPid'  s9    
   77=&&&88?r   c                 B    U R                   R                  nU" U5      nU$ )z6Gets the pid that is allowed to render to this overlay)r  r6  r  r  r%  r-  s       r   r6  !IVROverlay.getOverlayRenderingPid0  s"      77M"r   c                     U R                   R                  nU" XU5      n[        R                  R                  R                  U5        g)z(Specify flag setting for a given overlayN)r  r7  r'   ry  r  r{  )r  r  overlayFlagenabledr%  r}  s         r   r7  IVROverlay.setOverlayFlag6  s9      //=w7&&88?r   c                     U R                   R                  n[        5       nU" X[        U5      5      n[        R
                  R                  R                  U5        U$ )z%Sets flag setting for a given overlay)r  r8  rG  r+   r'   ry  r  r{  )r  r  r  r%  r  r}  s         r   r8  IVROverlay.getOverlayFlag<  sI      //-=uW~>&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )z&Gets all the flags for a given overlay)	r  r9  rn  r+   r'   ry  r  r{  r  )r  r  r%  flagsr}  s        r   r9  IVROverlay.getOverlayFlagsD  sN      00
=%,/&&88?{{r   r~  r  r  c                     U R                   R                  nU" XX45      n[        R                  R                  R                  U5        g)zDSets the color tint of the overlay quad. Use 0.0 to 1.0 per channel.N)r  r:  r'   ry  r  r{  )r  r  r~  r  r  r%  r}  s          r   r:  IVROverlay.setOverlayColorL  s9      00=u3&&88?r   c                 N   U R                   R                  n[        5       n[        5       n[        5       nU" U[        U5      [        U5      [        U5      5      n[        R
                  R                  R                  U5        UR                  UR                  UR                  4$ )z(Gets the color tint of the overlay quad.)	r  r;  r  r+   r'   ry  r  r{  r  )r  r  r%  r~  r  r  r}  s          r   r;  IVROverlay.getOverlayColorR  sw      00i	y=%*eElE$KH&&88?yy%++tzz11r   r  c                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)zaSets the alpha of the overlay quad. Use 1.0 for 100 percent opacity to 0.0 for 0 percent opacity.N)r  r<  r'   ry  r  r{  )r  r  r  r%  r}  s        r   r<  IVROverlay.setOverlayAlpha\  s7      00=(&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )zaGets the alpha of the overlay quad. By default overlays are rendering at 100 percent alpha (1.0).)	r  r=  r  r+   r'   ry  r  r{  r  )r  r  r%  r  r}  s        r   r=  IVROverlay.getOverlayAlphab  sN      00	=%,/&&88?{{r   texelAspectc                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)z
Sets the aspect ratio of the texels in the overlay. 1.0 means the texels are square. 2.0 means the texels
are twice as wide as they are tall. Defaults to 1.0.
N)r  r>  r'   ry  r  r{  )r  r  r  r%  r}  s        r   r>   IVROverlay.setOverlayTexelAspectj  s9    
   66=.&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )zCGets the aspect ratio of the texels in the overlay. Defaults to 1.0)	r  r?  r  r+   r'   ry  r  r{  r  )r  r  r%  r  r}  s        r   r?   IVROverlay.getOverlayTexelAspects  sQ      66i=%"45&&88?   r   c                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)a  
Sets the rendering sort order for the overlay. Overlays are rendered this order:
   Overlays owned by the scene application
   Overlays owned by some other application

Within a category overlays are rendered lowest sort order to highest sort order. Overlays with the same
sort order are rendered back to front base on distance from the HMD.

Subview overlays are always drawn immediately on top of their parent overlay, and the sort order is
only relative to their peer subviews for that overlay.

Sort order defaults to 0.
N)r  r@  r'   ry  r  r{  )r  r  	sortOrderr%  r}  s        r   r@  IVROverlay.setOverlaySortOrder{  s9       44=,&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )zOGets the sort order of the overlay. See SetOverlaySortOrder for how this works.)	r  rA  rn  r+   r'   ry  r  r{  r  )r  r  r%  r  r}  s        r   rA  IVROverlay.getOverlaySortOrder  sO      44J	=%	"23&&88?r   widthInMetersc                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)zoSets the width of the overlay quad in meters. By default overlays are rendered on a quad that is 1 meter acrossN)r  rB  r'   ry  r  r{  )r  r  r  r%  r}  s        r   rB  "IVROverlay.setOverlayWidthInMeters  s7      88=0&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )zrReturns the width of the overlay quad in meters. By default overlays are rendered on a quad that is 1 meter across)	r  rC  r  r+   r'   ry  r  r{  r  )r  r  r%  r  r}  s        r   rC  "IVROverlay.getOverlayWidthInMeters  sQ      88	=%"67&&88?"""r   	curvaturec                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)z
Use to draw overlay as a curved surface. Curvature is a percentage from (0..1] where 1 is a fully closed cylinder.
For a specific radius, curvature can be computed as: overlay.width / (2 PI r).
N)r  rD  r'   ry  r  r{  )r  r  r  r%  r}  s        r   rD  IVROverlay.setOverlayCurvature  s9    
   44=,&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )zdReturns the curvature of the overlay as a percentage from (0..1] where 1 is a fully closed cylinder.)	r  rE  r  r+   r'   ry  r  r{  r  )r  r  r%  r  r}  s        r   rE  IVROverlay.getOverlayCurvature  sO      44I	=%	"23&&88?r   radiansc                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)zfSets the pitch angle (in radians) of the overlay before curvature is applied -- to form a fan or disk.N)r  rF  r'   ry  r  r{  )r  r  r  r%  r}  s        r   rF  "IVROverlay.setOverlayPreCurvePitch  s7      88=*&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )z=Returns the overlay's set pre-curve pitch angle (in radians).)	r  rG  r  r+   r'   ry  r  r{  r  )r  r  r%  r  r}  s        r   rG  "IVROverlay.getOverlayPreCurvePitch  sN      88)=%.1&&88?}}r   c                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)z
Sets the colorspace the overlay texture's data is in.  Defaults to 'auto'.
If the texture needs to be resolved, you should call SetOverlayTexture with the appropriate colorspace instead.
N)r  rH  r'   ry  r  r{  )r  r  textureColorSpacer%  r}  s        r   rH  &IVROverlay.setOverlayTextureColorSpace  s9    
   <<=4&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        U$ )z.Gets the overlay's current colorspace setting.)r  rI  rT  r+   r'   ry  r  r{  )r  r  r%  r  r}  s        r   rI  &IVROverlay.getOverlayTextureColorSpace  sM      <<'M=%(9":;&&88?  r   c                     U R                   R                  nU" U[        U5      5      n[        R                  R
                  R                  U5        g)zzSets the part of the texture to use for the overlay. UV Min is the upper left corner and UV Max is the lower right corner.N)r  rJ  r+   r'   ry  r  r{  )r  r  overlayTextureBoundsr%  r}  s        r   rJ  "IVROverlay.setOverlayTextureBounds  s?      88=%(<"=>&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        U$ )zzGets the part of the texture to use for the overlay. UV Min is the upper left corner and UV Max is the lower right corner.)r  rK  rV  r+   r'   ry  r  r{  )r  r  r%  r  r}  s        r   rK  "IVROverlay.getOverlayTextureBounds  sN      8802=%(<"=>&&88?##r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        U$ )z+Returns the transform type of this overlay.)r  rL  r  r+   r'   ry  r  r{  )r  r  r%  transformTyper}  s        r   rL  "IVROverlay.getOverlayTransformType  sL      88.0=%"67&&88?r   c                     U R                   R                  nU" X[        U5      5      n[        R                  R
                  R                  U5        g)z/Sets the transform to absolute tracking origin.N)r  rM  r+   r'   ry  r  r{  )r  r  trackingOrigin trackingOriginToOverlayTransformr%  r}  s         r   rM  &IVROverlay.setOverlayTransformAbsolute  s?      <<=%8X2YZ&&88?r   c                     U R                   R                  n[        5       n[        5       nU" U[	        U5      [	        U5      5      n[
        R                  R                  R                  U5        X44$ )z[Gets the transform if it is absolute. Returns an error if the transform is some other type.)	r  rN  r  r  r+   r'   ry  r  r{  )r  r  r%  r  r  r}  s         r   rN  &IVROverlay.getOverlayTransformAbsolute  s_      <<02+8?(=%"7?_9`a&&88???r   c                     U R                   R                  nU" X[        U5      5      n[        R                  R
                  R                  U5        g)zPSets the transform to relative to the transform of the specified tracked device.N)r  rO  r+   r'   ry  r  r{  )r  r  trackedDevicetrackedDeviceToOverlayTransformr%  r}  s         r   rO  3IVROverlay.setOverlayTransformTrackedDeviceRelative  s?      II=7V1WX&&88?r   c                     U R                   R                  n[        5       n[        5       nU" U[	        U5      [	        U5      5      n[
        R                  R                  R                  U5        X44$ )zoGets the transform if it is relative to a tracked device. Returns an error if the transform is some other type.)	r  rP  rP  r  r+   r'   ry  r  r{  )r  r  r%  r  r  r}  s         r   rP  3IVROverlay.getOverlayTransformTrackedDeviceRelative  s_      II,.*7/'=%"6>]8^_&&88?==r   componentNamec                     U R                   R                  nUb
  [        USS9nU" XU5      n[        R                  R
                  R                  U5        g)z
Sets the transform to draw the overlay on a rendermodel component mesh instead of a quad. This will only draw when the system is
drawing the device. Overlays with this transform type cannot receive mouse events.
Nr  r  )r  rQ  r  r'   ry  r  r{  )r  r  rr  r  r%  r}  s         r   rQ  4IVROverlay.setOverlayTransformTrackedDeviceComponent  sM    
   JJ$!-'BM=}=&&88?r   c                 Z   U R                   R                  n[        5       nU" U[        U5      SS5      n[        R
                  " U5      nU" U[        U5      XT5      n[        R                  R                  R                  U5        U[        UR                  5      R                  S5      4$ )zLGets the transform information when the overlay is rendering on a component.Nr   r  )r  rR  rP  r+   r*   r  r'   ry  r  r{  r  r  r  )r  r  r%  rr  componentNameSizer  r}  s          r   rR  4IVROverlay.getOverlayTransformTrackedDeviceComponent  s      JJ*,}eK.@$J334EF=%"4mW&&88?E-"5"56==gFFFr   c                     U R                   R                  nU" U[        U5      5      n[        R                  R
                  R                  U5        g)z
Sets the hotspot for the specified overlay when that overlay is used as a cursor. These are in texture space with 0,0 in the upper left corner of
the texture and 1,1 in the lower right corner of the texture.
N)r  rS  r+   r'   ry  r  r{  )r  cursorOverlayHandlehotspotr%  r}  s        r   rS  $IVROverlay.setOverlayTransformCursor  s@    
   ::&g7&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        U$ )z7Gets cursor hotspot/transform for the specified overlay)r  rT  r&  r+   r'   ry  r  r{  )r  r  r%  r  r}  s        r   rT  $IVROverlay.getOverlayTransformCursor%  sI      ::.=%.1&&88?r   c                     U R                   R                  nU" X[        U5      [        U5      U5      n[        R                  R
                  R                  U5        g)z(Sets the overlay as a projection overlayN)r  rU  r+   r'   ry  r  r{  )r  r  r  r  
projectionr,  r%  r}  s           r   rU  (IVROverlay.setOverlayTransformProjection-  sK      >>=%8X2Y[`ak[lnqr&&88?r   r*  r+  c                     U R                   R                  nU" XU5      n[        R                  R                  R                  U5        g)zPositions a subview overlay to a position within the parent overlay, from the top-left corners of each overlay, in the pixel coordinate space of the parent standalone overlay.N)r  rV  r'   ry  r  r{  )r  r  r*  r+  r%  r}  s         r   rV  IVROverlay.setSubviewPosition3  s9      33=Q'&&88?r   c                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g)z<Shows the VR overlay. Not applicable for Dashboard Overlays.N)r  rW  r'   ry  r  r{  r  s       r   rW  IVROverlay.showOverlay9  7      ,,=!&&88?r   c                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g)z<Hides the VR overlay. Not applicable for Dashboard Overlays.N)r  rX  r'   ry  r  r{  r  s       r   rX  IVROverlay.hideOverlay?  r	  r   c                 B    U R                   R                  nU" U5      nU$ )zReturns true if the overlay is currently visible, applicable for all overlay types except Dashboard Thumbnail overlays. VREvent_OverlayShown and VREvent_OverlayHidden reflect changes to this value.)r  rY  r  s       r   rY  IVROverlay.isOverlayVisibleE  s"      11M"r   c                     U R                   R                  n[        5       nU" XU[        U5      5      n[        R
                  R                  R                  U5        U$ )zGet the transform in 3d space associated with a specific 2d point in the overlay's coordinate space (where 0,0 is the lower left). -Z points out of the overlay)r  rZ  r  r+   r'   ry  r  r{  )r  r  r  coordinatesInOverlayr%  rj  r}  s          r   rZ  ,IVROverlay.getTransformForOverlayCoordinatesK  sN      BB!O	=2FiHXY&&88?r   c                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g)a<  
This function will block until the top of each frame, and can therefore be used to synchronize with the runtime's update rate.
Note: In non-async mode, some signals may be dropped due to scene app performance, so passing a timeout of 1000/refresh rate
may be useful depending on the overlay app's desired behavior.
N)r  r[  r'   ry  r  r{  )r  	timeoutMsr%  r}  s       r   r[  IVROverlay.waitFrameSyncS  s8       ..9&&88?r   c                 x    U R                   R                  n[        [        5      nU" U[	        U5      U5      nXR4$ )z
Returns true and fills the event with the next event on the overlay's event queue, if there is one.
If there are no events this method returns false. uncbVREvent should be the size in bytes of the VREvent_t struct
)r  r\  rp  rK  r+   )r  r  r  r%  r  r-  s         r   r\  IVROverlay.pollNextOverlayEvent]  s9    
   55#M5<9}r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        U$ )z=Returns the current input settings for the specified overlay.)r  r]  r  r+   r'   ry  r  r{  )r  r  r%  inputMethodr}  s        r   r]   IVROverlay.getOverlayInputMethodg  sL      66*,=%"45&&88?r   c                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)z2Sets the input settings for the specified overlay.N)r  r^  r'   ry  r  r{  )r  r  r	  r%  r}  s        r   r^   IVROverlay.setOverlayInputMethodo  s7      66=.&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        U$ )z
Gets the mouse scaling factor that is used for mouse events. The actual texture may be a different size, but this is
typically the size of the underlying UI in pixels.
)r  r_  r&  r+   r'   ry  r  r{  )r  r  r%  
mouseScaler}  s        r   r_  IVROverlay.getOverlayMouseScaleu  sM    
   55!^
=%
"34&&88?r   c                     U R                   R                  nU" U[        U5      5      n[        R                  R
                  R                  U5        g)z
Sets the mouse scaling factor that is used for mouse events. The actual texture may be a different size, but this is
typically the size of the underlying UI in pixels (not in world space).
N)r  r`  r+   r'   ry  r  r{  )r  r  r	  r%  r}  s        r   r`  IVROverlay.setOverlayMouseScale  s@    
   55=%
"34&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      [        U5      5      nXT4$ )z
Computes the overlay-space pixel coordinates of where the ray intersects the overlay with the
specified settings. Returns false if there is no intersection.
)r  ra  r  r+   )r  r  paramsr%  resultsr-  s         r   ra  %IVROverlay.computeOverlayIntersection  s;    
   ;;02M5=%.Ar   c                 B    U R                   R                  nU" U5      nU$ )z
Returns true if the specified overlay is the hover target. An overlay is the hover target when it is the last overlay "moused over"
by the virtual mouse pointer
)r  rb  r  s       r   rb  IVROverlay.isHoverTargetOverlay  s$    
   55M"r   c                     U R                   R                  n[        5       nU" U[        U5      X#5      n[        R
                  R                  R                  U5        U$ )z
Sets a list of primitives to be used for controller ray intersection
typically the size of the underlying UI in pixels (not in world space).
)r  rc  r  r+   r'   ry  r  r{  )r  r  numMaskPrimitivesprimitiveSizer%  maskPrimitivesr}  s          r   rc  %IVROverlay.setOverlayIntersectionMask  sQ    
   ;;=?=%"79JZ&&88?r   durationSeconds	frequency	amplitudec                     U R                   R                  nU" XX45      n[        R                  R                  R                  U5        g)zOTriggers a haptic event on the laser mouse controller for the specified overlayN)r  rd  r'   ry  r  r{  )r  r  r#	  r$	  r%	  r%  r}  s          r   rd  +IVROverlay.triggerLaserMouseHapticVibration  s9      AA=9H&&88?r   c                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)zSets the cursor to use for the specified overlay. This will be drawn instead of the generic blob when the laser mouse is pointed at the specified overlayN)r  re  r'   ry  r  r{  )r  r  cursorHandler%  r}  s        r   re  IVROverlay.setOverlayCursor  s7      11=/&&88?r   c                     U R                   R                  nU" U[        U5      5      n[        R                  R
                  R                  U5        g)z
Sets the override cursor position to use for this overlay in overlay mouse coordinates. This position will be used to draw the cursor
instead of whatever the laser mouse cursor position is.
N)r  rf  r+   r'   ry  r  r{  )r  r  cursorr%  r}  s        r   rf  +IVROverlay.setOverlayCursorPositionOverride  s?    
   AA=%-0&&88?r   c                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g)z4Clears the override cursor position for this overlayN)r  rg  r'   ry  r  r{  r  s       r   rg  -IVROverlay.clearOverlayCursorPositionOverride  s7      CC=!&&88?r   c                     U R                   R                  nU" U[        U5      5      n[        R                  R
                  R                  U5        g)z
Texture to draw for the overlay. This function can only be called by the overlay's creator or renderer process (see SetOverlayRenderingPid) .

OpenGL dirty state:
  glBindTexture
N)r  rh  r+   r'   ry  r  r{  )r  r  r  r%  r}  s        r   rh  IVROverlay.setOverlayTexture  s?       22=%.1&&88?r   c                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g)zPUse this to tell the overlay system to release the texture set for this overlay.N)r  ri  r'   ry  r  r{  r  s       r   ri  IVROverlay.clearOverlayTexture  s7      44=!&&88?r   c                     U R                   R                  nU" U[        U5      X4U5      n[        R                  R
                  R                  U5        g)z
Separate interface for providing the data as a stream of bytes, but there is an upper bound on data
that can be sent. This function can only be called by the overlay's renderer process.
N)r  rj  r+   r'   ry  r  r{  )r  r  r  r&  r'  bytesPerPixelr%  r}  s           r   rj  IVROverlay.setOverlayRaw  sC    
   ..=%-N&&88?r   filePathc                     U R                   R                  nUb
  [        USS9nU" X5      n[        R                  R
                  R                  U5        g)z
Separate interface for providing the image through a filename: can be png or jpg, and should not be bigger than 1920x1080.
This function can only be called by the overlay's renderer process
Nr  r  )r  rk  r  r'   ry  r  r{  )r  r  r7	  r%  r}  s        r   rk  IVROverlay.setOverlayFromFile  sK    
   33X8H=+&&88?r   c                    U R                   R                  n[        5       n[        5       n[        5       n[        5       n[	        5       n[        5       n	[        5       n
U" U[        U5      [        U5      [        U5      [        U5      [        U5      [        U5      [        U	5      [        U
5      5	      n[        R                  R                  R                  U5        UR                  UR                  UR                  UR                  XU
4$ )a\  
Get the native texture handle/device for an overlay you have created.
On windows this handle will be a ID3D11ShaderResourceView with a ID3D11Texture2D bound.

The texture will always be sized to match the backing texture you supplied in SetOverlayTexture above.

You MUST call ReleaseNativeOverlayHandle() with pNativeTextureHandle once you are done with this texture.

pNativeTextureHandle is an OUTPUT, it will be a pointer to a ID3D11ShaderResourceView *.
pNativeTextureRef is an INPUT and should be a ID3D11Resource *. The device used by pNativeTextureRef will be used to bind pNativeTextureHandle.
)r  rl  rR  rn  rS  rT  rV  r+   r'   ry  r  r{  r  )r  r  nativeTextureRefr%  nativeTextureHandler&  r'  nativeFormataPIType
colorSpacer  r}  s               r   rl  IVROverlay.getOverlayTexture  s
      22&j
z. ]
)+=%(;"<eDT>UW\]bWcejkqerty  {G  uH  JO  PW  JX  Z_  `j  Zk  mr  s@  mA  B&&88?"((%++v||\EWEWY`n{{{r   c                     U R                   R                  nU" U[        U5      5      n[        R                  R
                  R                  U5        g)z
Release the pNativeTextureHandle provided from the GetOverlayTexture call, this allows the system to free the underlying GPU resources for this object,
so only do it once you stop rendering this texture.
N)r  rm  r+   r'   ry  r  r{  )r  r  r<	  r%  r}  s        r   rm  %IVROverlay.releaseNativeOverlayHandle  sA    
   ;;=%(;"<=&&88?r   c                    U R                   R                  n[        5       n[        5       nU" U[        U5      [        U5      5      n[        R
                  R                  R                  U5        UR                  UR                  4$ )z#Get the size of the overlay texture)	r  rn  rn  r+   r'   ry  r  r{  r  )r  r  r%  r&  r'  r}  s         r   rn   IVROverlay.getOverlayTextureSize  sd      66
=%,f>&&88?{{FLL((r   overlayFriendlyNamec                 D   U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       n[        5       nU" X[	        U5      [	        U5      5      n[
        R                  R                  R                  U5        UR                  UR                  4$ )z2Creates a dashboard overlay and returns its handler  r  )
r  ro  r  r  r+   r'   ry  r  r{  r  )r  r  rE	  r%  
mainHandlethumbnailHandler}  s          r   ro  !IVROverlay.createDashboardOverlay  s      77!zG<J*"'(;g"N&(
+-:E*4Eu_G]^&&88?!6!666r   c                 @    U R                   R                  nU" 5       nU$ )z(Returns true if the dashboard is visible)r  rp  r@  s      r   rp  IVROverlay.isDashboardVisible  rM  r   c                 B    U R                   R                  nU" U5      nU$ )z_returns true if the dashboard is visible and the specified overlay is the active system Overlay)r  rq  r  s       r   rq  #IVROverlay.isActiveDashboardOverlay$  s"      99M"r   c                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)zWSets the dashboard overlay to only appear when the specified process ID has scene focusN)r  rr  r'   ry  r  r{  )r  r  r  r%  r}  s        r   rr  *IVROverlay.setDashboardOverlaySceneProcess*  s7      @@=,&&88?r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )zLGets the process ID that this dashboard overlay requires to have scene focus)	r  rs  rn  r+   r'   ry  r  r{  r  )r  r  r%  r  r}  s        r   rs  *IVROverlay.getDashboardOverlaySceneProcess0  sO      @@J	=%	"23&&88?r   overlayToShowc                 Z    U R                   R                  nUb
  [        USS9nU" U5        g)zShows the dashboard.Nr  r  )r  rt  r  )r  rR	  r%  s      r   rt  IVROverlay.showDashboard8  s-      ..$!-'BM
=r   c                 @    U R                   R                  nU" 5       nU$ )zlReturns the tracked device index that has the laser pointer in the dashboard, or the last one that was used.)r  ru  r@  s      r   ru  $IVROverlay.getPrimaryDashboardDevice?  r  r   descriptionexistingTextc           	          U R                   R                  nUb
  [        USS9nUb
  [        USS9nU" XX4XVU5      n	[        R                  R
                  R                  U	5        g)z
Show the virtual keyboard to accept input. In most cases, you should pass KeyboardFlag_Modal to enable modal overlay
behavior on the keyboard itself. See EKeyboardFlags for more.
Nr  r  )r  rv  r  r'   ry  r  r{  )
r  	inputModelineInputModer  rW	  charMaxrX	  r$  r%  r}  s
             r   rv  IVROverlay.showKeyboardE  sd    
   --"g>K# @L9UXab&&88?r   c	           
          U R                   R                  n	Ub
  [        USS9nUb
  [        USS9nU	" XX4XVXx5      n
[        R                  R
                  R                  U
5        g)z
Show the virtual keyboard to accept input for an overlay. In most cases, you should pass KeyboardFlag_Modal to enable modal
overlay behavior on the keyboard itself. See EKeyboardFlags for more.
Nr  r  )r  rw  r  r'   ry  r  r{  )r  r  rZ	  r[	  r  rW	  r\	  rX	  r$  r%  r}  s              r   rw  !IVROverlay.showKeyboardForOverlayR  sd    
   77"g>K# @L=];Yeq&&88?r   c                     U R                   R                  nU" SS5      n[        R                  " U5      nU" X"5        [	        UR
                  5      R                  S5      $ )z1Get the text that was entered into the text inputNr   r  )r  rx  r*   r  r  r  r  )r  r%  r!  s      r   rx  IVROverlay.getKeyboardText_  sO      00${**40
4TZZ ''00r   c                 >    U R                   R                  nU" 5         g)zHide the virtual keyboardN)r  ry  r  s     r   ry  IVROverlay.hideKeyboardg  s      --
r   c                 T    U R                   R                  nU" U[        U5      5        g)z/Set the position of the keyboard in world spaceN)r  rz  r+   )r  r  !trackingOriginToKeyboardTransformr%  s       r   rz  'IVROverlay.setKeyboardTransformAbsolutel  s#      ==
>5!BCDr   c                 @    U R                   R                  nU" X5        g)zSet the position of the keyboard in overlay space by telling it to avoid a rectangle in the overlay. Rectangle coords have (0,0) in the bottom leftN)r  r{  )r  r  r  r%  s       r   r{  (IVROverlay.setKeyboardPositionForOverlayq  s      >>
=r   r!  captionbutton0Textbutton1Textbutton2Textbutton3Textc                     U R                   R                  nUb
  [        USS9nUb
  [        USS9nUb
  [        USS9nUb
  [        USS9nUb
  [        USS9nUb
  [        USS9nU" XX4XV5      nU$ )zBShow the message overlay. This will block and return you a result.r  r  )r  r|  r  )	r  r!  ri	  rj	  rk	  rl	  rm	  r%  r-  s	            r   r|  IVROverlay.showMessageOverlayv  s      330DGg6G"g>K"g>K"g>K"g>KD;[Vr   c                 >    U R                   R                  nU" 5         g)zJIf the calling process owns the overlay and it's open, this will close it.N)r  r}  r  s     r   r}  IVROverlay.closeMessageOverlay  r  r   r  r  )NNN)\r   r   r   r   r  r#   r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rp  r  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r   r   r   r   rq  rq    sn   4#c #
# 
## 
#*3 *dg *@2"2"@# @$ @
)&@@@% @ @U @W[ @2@E @d @@ @$ @!@$@E @d @#@E @d @@e @ @@!@$@@@>	@cf 	@ko 	@G@@@5 @U @t @@@@@	@ Z`  aE  ZF 	@u @af @sx @  ~B @@@@	@@@	@# 	@$ 	@|0@)7 73 7@3 4 @ @eh @x| @@be @  B @  RV @1
E
 
s S s Y\ ru   LO $r   rq  c            
           \ rS rSrS\" \\\" \5      \" \	5      \
5      4S\" \\" \	5      5      4S\" S\\" \5      5      4S\" \\5      4/rSrg)IVROverlayView_FnTablei  acquireOverlayViewreleaseOverlayViewpostOverlayEventNisViewingPermittedr   )r   r   r   r   r  r~  r  r  r  r  rn  rK  rG  r  r   r   r   r   rs	  rs	    s    	6HY[bcs[tv}  N  wO  QY   Z  	[	6P_H`ab	4T;LgV_N`ab	6{DUVW	Hr   rs	  c                   6    \ rS rSrS rS rS rS	S jrS rSr	g)
ru  i  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z*Error retrieving VR API for IVROverlayView)	IVROverlayView_Versionr  rs	  r  r  r  r   r  r  r  s        r   r  IVROverlayView.__init__  r  r   c                    U R                   R                  n[        5       n[        5       n[	        [        5      nU" U[        U5      [        U5      U5      n[        R                  R                  R                  U5        X44$ )a7  
Acquire an OverlayView_t from an overlay handle

The overlay view can be used to sample the contents directly by a native API. The
contents of the OverlayView_t will remain unchanged through the lifetime of the
OverlayView_t.

The caller acquires read privileges over the OverlayView_t, but should not
write to it.

AcquireOverlayView() may be called on the same ulOverlayHandle multiple times to
refresh the image contents. In this case the caller is strongly encouraged to re-use
the same pOverlayView for all re-acquisition calls.

If the producer has not yet queued an image, AcquireOverlayView will return success,
and the Texture_t will have the expected ETextureType. However, the Texture_t->handle
will be nullptr. Once the producer generates the first overlay frame, Texture_t->handle
will become a valid handle.
)
r  rt	  r  r  rp  r+   r'   ry  r  r{  )r  r  r%  nativeDeviceoverlayViewoverlayViewSizer}  s          r   rt	  !IVROverlayView.acquireOverlayView  sl    (   33')%' 1=%"5u[7I?[&&88?((r   c                     U R                   R                  n[        5       nU" [        U5      5      n[        R
                  R                  R                  U5        U$ )aP  
Release an acquired OverlayView_t

Denotes that pOverlayView will no longer require access to the resources it acquired in
all previous calls to AcquireOverlayView().

All OverlayView_t*'s provided to AcquireOverlayView() as pOverlayViews must be
passed into ReleaseOverlayView() in order for the underlying GPU resources to be freed.
)r  ru	  r  r+   r'   ry  r  r{  )r  r%  r~	  r}  s       r   ru	  !IVROverlayView.releaseOverlayView  sL       33%'5%&&&88?r   Nc                 T    U R                   R                  nU" U[        U5      5        g)zPosts an overlay eventN)r  rv	  r+   )r  r  r  r%  s       r   rv	  IVROverlayView.postOverlayEvent  s!      11
=%,'r   c                 B    U R                   R                  nU" U5      nU$ )zJDetermines whether this process is permitted to view an overlay's content.)r  rw	  r  s       r   rw	  !IVROverlayView.isViewingPermitted  s"      33M"r   r  r  )
r   r   r   r   r  rt	  ru	  rv	  rw	  r   r   r   r   ru  ru    s    4)8 (
r   ru  c                   t   \ rS rSrS\" \\\" \" \5      5      5      4S\" S\" \5      5      4S\" \\	\" \" \
5      5      5      4S\" S\" \
5      5      4S\" \\	\\" \5      5      4S\" \\	\5      4S	\" S\5      4S
\" \\\\5      4S\" \5      4S\" \\5      4S\" \\\\\5      4S\" \\\5      4S\" \\\\\5      4S\" \\\\\" \5      \" \5      5      4S\" \\\\" \5      \" \5      \" \5      5      4S\" \\\5      4S\" \\\\\" \5      5      4S\" \\\\\" \5      5      4S\" \\5      4/rSrg)IVRRenderModels_FnTablei  loadRenderModel_AsyncfreeRenderModelNloadTexture_AsyncfreeTextureloadTextureD3D11_AsyncloadIntoTextureD3D11_AsyncfreeTextureD3D11getRenderModelNamegetRenderModelCountgetComponentCountgetComponentNamegetComponentButtonMaskgetComponentRenderModelNamegetComponentStateForDevicePathgetComponentStaterenderModelHasComponentgetRenderModelThumbnailURLgetRenderModelOriginalPathgetRenderModelErrorNameFromEnumr   )r   r   r   r   r  EVRRenderModelErrorr  r  r  r  r   rR  rn  r}  rG  r  r  rR  r^  r  r   r   r   r   r	  r	    sK   	 "9:MxY`ahivawYx"yz	3D'-:PQR	56I;X_`g  iA  aB  YC  D  	E	/g>V6WXY	!#:;NP[]egnowgx#yz	%'>?RT_ai'jk	4T8DE	6x8U]^_	 7 AB	5hIJ	4XxS[]efg	!#:8Xx#XY	&(?(T\^fhp(qr	)+B;PXZbdx  {B  Ce  {f  ho  pL  hM  ,N  	O	5k8XW^_rWsu|  ~`  va  cj  kG  cH  I  	J	"$;KS[$\]	%'>xS[]egn  pC  hD  (E  	F	%'>xS[]egn  pC  hD  (E  	F	*,CHNa,bc'Hr   r	  c                       \ rS rSrS rS\4S jrSS jrS rSS jr	S	 r
SS
 jrSS jrS rS rS\4S jrS\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\4S jrS\4S jrS rSrg)r  i  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z+Error retrieving VR API for IVRRenderModels)	IVRRenderModels_Versionr  r	  r  r  r  r   r  r  r  s        r   r  IVRRenderModels.__init__  r  r   renderModelNamec                    U R                   R                  nUb
  [        USS9n[        [        5      " 5       nU" U[        U5      5      nU(       a  UR                  nOSn[        R                  R                  R                  U5        U$ )a  
Loads and returns a render model for use in the application. pchRenderModelName should be a render model name
from the Prop_RenderModelName_String property or an absolute path name to a render model on disk.

The resulting render model is valid until VR_Shutdown() is called or until FreeRenderModel() is called. When the
application is finished with the render model it should call FreeRenderModel() to free the memory associated
with the model.

The method returns VRRenderModelError_Loading while the render model is still being loaded.
The method returns VRRenderModelError_None once loaded successfully, otherwise will return an error.
Nr  r  )r  r	  r  r  r  r+   r  r'   ry  RenderModelErrorr{  )r  r	  r%  renderModelr}  s        r   r	  %IVRRenderModels.loadRenderModel_Async  sx       66&#OgFOm,.?E+$67%..KK**<<UCr   Nc                 R    U R                   R                  nU" [        U5      5        g)zQ
Frees a previously returned render model
It is safe to call this on a null ptr.
N)r  r	  r+   )r  r	  r%  s      r   r	  IVRRenderModels.freeRenderModel  s"    
   00
5r   c                     U R                   R                  n[        [        5      " 5       nU" U[	        U5      5      nU(       a  UR
                  nOSn[        R                  R                  R                  U5        U$ )z7Loads and returns a texture for use in the application.N)
r  r	  r  r   r+   r  r'   ry  r	  r{  )r  r  r%  r  r}  s        r   r	  !IVRRenderModels.loadTexture_Async  sc      222359eGn-&&GG**<<UCr   c                 R    U R                   R                  nU" [        U5      5        g)zL
Frees a previously returned texture
It is safe to call this on a null ptr.
N)r  r	  r+   )r  r  r%  s      r   r	  IVRRenderModels.freeTexture)  s!    
   ,,
5>r   c                     U R                   R                  n[        5       nU" U[        U5      [        U5      5      n[        R
                  R                  R                  U5        UR                  $ )z/Creates a D3D11 texture and loads data into it.)	r  r	  rR  r+   r'   ry  r	  r{  r  )r  r  d3D11Devicer%  d3D11Texture2Dr}  s         r   r	  &IVRRenderModels.loadTextureD3D11_Async1  sX      77!9eK0%2GH**<<UC###r   c                     U R                   R                  nU" U[        U5      5      n[        R                  R
                  R                  U5        g)z:Helper function to copy the bits into an existing texture.N)r  r	  r+   r'   ry  r	  r{  )r  r  
dstTexturer%  r}  s        r   r	  *IVRRenderModels.loadIntoTextureD3D11_Async9  s>      ;;9eJ/0**<<UCr   c                 R    U R                   R                  nU" [        U5      5        g)zaUse this to free textures created with LoadTextureD3D11_Async instead of calling Release on them.N)r  r	  r+   )r  r	  r%  s      r   r	   IVRRenderModels.freeTextureD3D11?  s       11
5 !r   c                     U R                   R                  nU" USS5      n[        R                  " U5      nU" XU5        [	        UR
                  5      R                  S5      $ )a1  
Use this to get the names of available render models.  Index does not correlate to a tracked device index, but
is only used for iterating over all available render models.  If the index is out of range, this function will return 0.
Otherwise, it will return the size of the buffer required for the name.
Nr   r  )r  r	  r*   r  r  r  r  )r  renderModelIndexr%  renderModelNameLenr	  s        r   r	  "IVRRenderModels.getRenderModelNameD  s^       33 0$: 556HI
.@A_**+227;;r   c                 @    U R                   R                  nU" 5       nU$ )z.Returns the number of available render models.)r  r	  r@  s      r   r	  #IVRRenderModels.getRenderModelCountP  r  r   c                 \    U R                   R                  nUb
  [        USS9nU" U5      nU$ )a0  
Returns the number of components of the specified render model.
Components are useful when client application wish to draw, label, or otherwise interact with components of tracked objects.
Examples controller components:
 renderable things such as triggers, buttons
 non-renderable things which include coordinate systems such as 'tip', 'base', a neutral controller agnostic hand-pose
 If all controller components are enumerated and rendered, it will be equivalent to drawing the traditional render model
 Returns 0 if components not supported, >0 otherwise
r  r  )r  r	  r  )r  r	  r%  r-  s       r   r	  !IVRRenderModels.getComponentCountV  s6       22&#OgFOO$r   c                     U R                   R                  nUb
  [        USS9nU" XSS5      n[        R                  " U5      nU" XXT5        [        UR
                  5      R                  S5      $ )a+  
Use this to get the names of available components.  Index does not correlate to a tracked device index, but
is only used for iterating over all available components.  If the index is out of range, this function will return 0.
Otherwise, it will return the size of the buffer required for the name.
Nr  r  r   )r  r	  r  r*   r  r  r  )r  r	  componentIndexr%  componentNameLenr  s         r   r	   IVRRenderModels.getComponentNamef  sm       11&#OgFOotQG334DE
?ML](()0099r   r  c                 v    U R                   R                  nUb
  [        USS9nUb
  [        USS9nU" X5      nU$ )as  
Get the button mask for all buttons associated with this component
If no buttons (or axes) are associated with this component, return 0
Note: multiple components may be associated with the same button. Ex: two grip buttons on a single controller.
Note: A single component may be associated with multiple buttons. Ex: A trackpad which also provides "D-pad" functionality
r  r  )r  r	  r  r  r	  r  r%  r-  s        r   r	  &IVRRenderModels.getComponentButtonMaskt  sH       77&#OgFO$!-'BMO3r   c                     U R                   R                  nUb
  [        USS9nUb
  [        USS9nU" XSS5      n[        R                  " U5      nU" XXT5        [        UR
                  5      R                  S5      $ )a  
Use this to get the render model name for the specified rendermode/component combination, to be passed to LoadRenderModel.
If the component name is out of range, this function will return 0.
Otherwise, it will return the size of the buffer required for the name.
Nr  r  r   )r  r	  r  r*   r  r  r  )r  r	  r  r%  componentRenderModelNameLencomponentRenderModelNames         r   r	  +IVRRenderModels.getComponentRenderModelName  s       <<&#OgFO$!-'BM&(q&Q##)#>#>?Z#[ 
?+Ca-334;;GDDr   c           	          U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" XU[	        U5      [	        U5      5      nXv4$ )a5  
Use this to query information about the component, as a function of the controller state.

For dynamic controller components (ex: trigger) values will reflect component motions
For static components this will return a consistent value independent of the VRControllerState_t

If the pchRenderModelName or pchComponentName is invalid, this will return false (and transforms will be set to identity).
Otherwise, return true
Note: For dynamic objects, visibility may be dynamic. (I.e., true/false will be returned based on controller state and controller mode state )
r  r  )r  r	  r  rR  r+   )r  r	  r  r  rH  r%  componentStater-  s           r   r	  .IVRRenderModels.getComponentStateForDevicePath  sd       ??&#OgFO$!-'BM57OJeeTbNcd%%r   c           	          U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        5       nU" X[	        U5      [	        U5      [	        U5      5      nXv4$ )zThis version of GetComponentState takes a controller state block instead of an action origin. This function is deprecated. You should use the new input system and GetComponentStateForDevicePath instead.r  r  )r  r	  r  rR  r+   )r  r	  r  r  rH  r%  r	  r-  s           r   r	  !IVRRenderModels.getComponentState  si      22&#OgFO$!-'BM57OE/4JERWLZ_`nZop%%r   c                 v    U R                   R                  nUb
  [        USS9nUb
  [        USS9nU" X5      nU$ )zHReturns true if the render model has a component with the specified namer  r  )r  r	  r  r	  s        r   r	  'IVRRenderModels.renderModelHasComponent  sF      88&#OgFO$!-'BMO3r   c                 4   U R                   R                  nUb
  [        USS9n[        5       nU" USS[	        U5      5      n [
        R                  R                  R                  UR                  5        [        R                  " U5      nU" XU[	        U5      5        [
        R                  R                  R                  UR                  5        [        UR                  5      R                  S5      $ ! [
        R                  R                   a     Nf = f)z;Returns the URL of the thumbnail image for this rendermodelNr  r  r   )r  r	  r  r	  r+   r'   ry  r	  r{  r  r  r*   r  r  )r  r	  r%  r}  thumbnailURLLenthumbnailURLs         r   r	  *IVRRenderModels.getRenderModelThumbnailURL  s      ;;&#OgFO#%_dAuU|D	..@@M 22?C
?/5<H**<<U[[I\''(//88   44 		r*  c                 4   U R                   R                  nUb
  [        USS9n[        5       nU" USS[	        U5      5      n [
        R                  R                  R                  UR                  5        [        R                  " U5      nU" XU[	        U5      5        [
        R                  R                  R                  UR                  5        [        UR                  5      R                  S5      $ ! [
        R                  R                   a     Nf = f)a  
Provides a render model path that will load the unskinned model if the model name provided has been replace by the user. If the model
hasn't been replaced the path value will still be a valid path to load the model. Pass this to LoadRenderModel_Async, etc. to load the
model.
Nr  r  r   )r  r	  r  r	  r+   r'   ry  r	  r{  r  r  r*   r  r  )r  r	  r%  r}  originalPathLenoriginalPaths         r   r	  *IVRRenderModels.getRenderModelOriginalPath  s       ;;&#OgFO#%_dAuU|D	..@@M 22?C
?/5<H**<<U[[I\''(//88   44 		r*  c                 `    U R                   R                  nU" U5      nUR                  S5      $ )z)Returns a string for a render model errorr  )r  r	  r  r  s       r   r	  /IVRRenderModels.getRenderModelErrorNameFromEnum  s+      @@E}}W%%r   r  r  )r   r   r   r   r  r#   r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r   r   r   r   r  r    s    4S 0
$D"

<  : :c # E3 Es E &c &RU &(	& 	&S 	&s 3 9# 9 9# 9(&r   r  c                       \ rS rSrS\" S\" \5      \" \5      \" \5      \" \5      5      4S\" S\\" \5      \" \5      \" \5      \" \5      5      4S\" S\" \5      \" \5      5      4/r	Sr
g)IVRExtendedDisplay_FnTablei  getWindowBoundsNgetEyeOutputViewportr  r   )r   r   r   r   r  r  ro  rn  r  r  r   r   r   r   r	  r	    s    	3D'':JGT[L\^efn^oqx  zB  rC  D  	E	!8vwxGXZabjZkmtu}m~  AH  IQ  AR  "S  	T	5dGG<LgV]N^_`Hr   r	  c                   0    \ rS rSrSrS rS rS rS rSr	g)	r  i  a  
NOTE: Use of this interface is not recommended in production applications. It will not work for displays which use
direct-to-display mode. Creating our own window is also incompatible with the VR compositor and is not available when the compositor is running.
c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z.Error retrieving VR API for IVRExtendedDisplay)	IVRExtendedDisplay_Versionr  r	  r  r  r  r   r  r  r  s        r   r  IVRExtendedDisplay.__init__  sU    0{+k),/79IJNOO*33r   c                 8   U R                   R                  n[        5       n[        5       n[        5       n[        5       nU" [	        U5      [	        U5      [	        U5      [	        U5      5        UR
                  UR
                  UR
                  UR
                  4$ )z@Size and position that the window needs to be on the VR display.)r  r	  ro  rn  r+   r  )r  r%  r*  r+  r&  r'  s         r   r	  "IVRExtendedDisplay.getWindowBounds  sl      00II

58U1XuU|U6];wwfll::r   c           	      :   U R                   R                  n[        5       n[        5       n[        5       n[        5       nU" U[        U5      [        U5      [        U5      [        U5      5        UR                  UR                  UR                  UR                  4$ )zOGets the viewport in the frame buffer to draw the output of the distortion into)r  r	  rn  r+   r  )r  r,  r%  r*  r+  r&  r'  s          r   r	  'IVRExtendedDisplay.getEyeOutputViewport	  sn      55JJ

3a%(E%L%-@wwfll::r   c                     U R                   R                  n[        5       n[        5       nU" [        U5      [        U5      5        UR                  UR                  4$ )z
[D3D10/11 Only]
Returns the adapter index and output index that the user should pass into EnumAdapters and EnumOutputs
to create the device and swap chain in DX10 and DX11. If an error occurs both indices will be set to -1.
rC  )r  r%  rD  adapterOutputIndexs       r   r  $IVRExtendedDisplay.getDXGIOutputInfo  sQ       22y$Y
5&8 9:!!#5#;#;;;r   r  N)
r   r   r   r   r  r  r	  r	  r  r   r   r   r   r  r    s    
4;;
<r   r  c                   2   \ rS rSrS\" \\5      4S\" \\\" \	5      5      4S\" \\\
\" \5      \" \5      \" \5      5      4S\" \\\\
\" \5      \" \5      5      4S\" \\\\
\\\" \5      5      4S\" \\\" \5      5      4S\" \\5      4S	\" \\\
\\\" \5      \5      4S
\" \\\
\" \5      \" \5      \" \5      5      4S\" \\\
\\" \5      \" \5      \5      4S\" \\\
\" \5      \" \5      \5      4S\" \\\5      4S\" S\5      4S\" \5      4/rSrg)IVRTrackedCamera_FnTablei   getCameraErrorNameFromEnum	hasCameragetCameraFrameSizegetCameraIntrinsicsgetCameraProjectionacquireVideoStreamingServicereleaseVideoStreamingServicegetVideoStreamFrameBuffergetVideoStreamTextureSizegetVideoStreamTextureD3D11getVideoStreamTextureGLreleaseVideoStreamTextureGLsetCameraTrackingSpaceNgetCameraTrackingSpacer   )r   r   r   r   r  r  EVRTrackedCameraErrorrP  r  rG  rl  rn  r&  r  r  TrackedCameraHandle_trR  rd  rV  rE  r  r  r   r   r   r   r	  r	     s   	%'>xI^'_`	-.CEY[bcn[opq	67LNbd}  @G  HP  @Q  SZ  [c  Sd  fm  nv  fw   x  	y	 78MOcem  pI  KR  S_  K`  bi  jv  bw  !x  	y	 78MOcem  pI  KR  T[  ]d  er  ]s  !t  	u	')@AVXlnu  wL  oM  *N  	O	')@AVXm)no	$&=>SUj  mF  HP  RZ  \c  dB  \C  EM  'N  	O	$&=>SUi  lE  GN  O`  Ga  cj  ks  ct  v}  ~F  vG  'H  	I	%'>?TVk  nG  IQ  SZ  [c  Sd  fm  nL  fM  OW  (X  	Y	"$;<QSh  kD  FM  NV  FW  Y`  a  Y@  BJ  %K  	L	&(?@UWlnv(wx	!#:4AX#YZ	!#:;R#STHr   r	  c                       \ rS rSrS rS rS rS rS rS\	S\	4S	 jr
S
 rSS jrS rS rS rS rSS jrSS jrS rSrg)r  i3  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z,Error retrieving VR API for IVRTrackedCamera)	IVRTrackedCamera_Versionr  r	  r  r  r  r   r  r  r  s        r   r  IVRTrackedCamera.__init__4  r   r   c                 `    U R                   R                  nU" U5      nUR                  S5      $ )zReturns a string for an errorr  )r  r	  r  )r  cameraErrorr%  r-  s       r   r	  +IVRTrackedCamera.getCameraErrorNameFromEnum>  s+      ;;K}}W%%r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        U$ )zEFor convenience, same as tracked property request Prop_HasCamera_Bool)r  r	  rG  r+   r'   ry  TrackedCameraErrorr{  )r  rr  r%  r	  r}  s        r   r	  IVRTrackedCamera.hasCameraD  sK      **M	;i 01,,>>uEr   c           	      N   U R                   R                  n[        5       n[        5       n[        5       nU" X[        U5      [        U5      [        U5      5      n[        R
                  R                  R                  U5        UR                  UR                  UR                  4$ zGets size of the image frame.)	r  r	  rn  r+   r'   ry  r
  r{  r  )r  rr  	frameTyper%  r&  r'  frameBufferSizer}  s           r   r	  #IVRTrackedCamera.getCameraFrameSizeL  sz      33
"*;5<voH^_,,>>uE{{FLL/*?*???r   c           	          U R                   R                  n[        5       n[        5       nU" XU[        U5      [        U5      5      n[        R
                  R                  R                  U5        XV4$ r)   )r  r	  r&  r+   r'   ry  r
  r{  )r  rr  cameraIndexr
  r%  focalLengthcenterr}  s           r   r	  $IVRTrackedCamera.getCameraIntrinsicsV  s^      44"n;Yk8JERXMZ,,>>uE""r   zNearzFarc           
          U R                   R                  n[        5       nU" XX4U[        U5      5      n[        R
                  R                  R                  U5        U$ r)   )r  r	  r  r+   r'   ry  r
  r{  )	r  rr  r

  r
  r
  r
  r%  r  r}  s	            r   r	  $IVRTrackedCamera.getCameraProjection^  sO      44"_
;YtU:EVW,,>>uEr   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        U$ )a  
Acquiring streaming service permits video streaming for the caller. Releasing hints the system that video services do not need to be maintained for this client.
If the camera has not already been activated, a one time spin up may incur some auto exposure as well as initial streaming frame delays.
The camera should be considered a global resource accessible for shared consumption but not exclusive to any caller.
The camera may go inactive due to lack of active consumers or headset idleness.
)r  r	  r	  r+   r'   ry  r
  r{  )r  rr  r%  rO  r}  s        r   r	  -IVRTrackedCamera.acquireVideoStreamingServicee  sL       ==&(;f.,,>>uEr   Nc                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g r)   )r  r	  r'   ry  r
  r{  )r  trackedCamerar%  r}  s       r   r	  -IVRTrackedCamera.releaseVideoStreamingServicer  s7      ===!,,>>uEr   c           	          U R                   R                  n[        5       n[        [        5      nU" X[	        U5      U[	        U5      U5      n[
        R                  R                  R                  U5        U$ )a%  
Copies the image frame into a caller's provided buffer. The image data is currently provided as RGBA data, 4 bytes per pixel.
A caller can provide null for the framebuffer or frameheader if not desired. Requesting the frame header first, followed by the frame buffer allows
the caller to determine if the frame as advanced per the frame header sequence.
If there is no frame available yet, due to initial camera spinup or re-activation, the error will be VRTrackedCameraError_NoFrameAvailable.
Ideally a caller should be polling at ~16ms intervals
)	r  r	  rd  rp  r+   r'   ry  r
  r{  )	r  r
  r
  frameBufferr
  r%  frameHeaderframeHeaderSizer}  s	            r   r	  *IVRTrackedCamera.getVideoStreamFrameBufferw  sg       ::46 !?@=U;-?RWXcRdfuv,,>>uEr   c           	      8   U R                   R                  n[        5       n[        5       n[        5       nU" X[	        U5      [	        U5      [	        U5      5      n[
        R                  R                  R                  U5        XER                  UR                  4$ r
  )
r  r	  rV  rn  r+   r'   ry  r
  r{  r  )r  rr  r
  r%  r  r&  r'  r}  s           r   r	  *IVRTrackedCamera.getVideoStreamTextureSize  st      ::)+
;5+?uuU[}],,>>uEkk6<<77r   c           	      0   U R                   R                  n[        5       n[        5       n[	        [        5      nU" X[        U5      [        U5      [        U5      U5      n[        R                  R                  R                  U5        UR                  U4$ )aL  
Access a shared D3D11 texture for the specified tracked camera stream.
The camera frame type VRTrackedCameraFrameType_Undistorted is not supported directly as a shared texture. It is an interior subregion of the shared texture VRTrackedCameraFrameType_MaximumUndistorted.
Instead, use GetVideoStreamTextureSize() with VRTrackedCameraFrameType_Undistorted to determine the proper interior subregion bounds along with GetVideoStreamTextureD3D11() with
VRTrackedCameraFrameType_MaximumUndistorted to provide the texture. The VRTrackedCameraFrameType_MaximumUndistorted will yield an image where the invalid regions are decoded
by the alpha channel having a zero component. The valid regions all have a non-zero alpha component. The subregion as described by VRTrackedCameraFrameType_Undistorted
guarantees a rectangle where all pixels are valid.
)r  r	  rR  rd  rp  r+   r'   ry  r
  r{  r  )	r  r
  r
  r  r%  r  r
  r
  r}  s	            r   r	  +IVRTrackedCamera.getVideoStreamTextureD3D11  s       ;;"**46 !?@=U3H-I5QhKikpq|k}  @O  P,,>>uE&,,k99r   c                    U R                   R                  n[        5       n[        5       n[	        [        5      nU" X[        U5      [        U5      U5      n[        R                  R                  R                  U5        XE4$ )zBAccess a shared GL texture for the specified tracked camera stream)
r  r	  rE  rd  rp  r+   r'   ry  r
  r{  )r  r
  r
  r%  r  r
  r
  r}  s           r   r	  (IVRTrackedCamera.getVideoStreamTextureGL  sk      88J	46 !?@=U9-=u[?QSbc,,>>uE%%r   c                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g r)   )r  r	  r'   ry  r
  r{  )r  r
  r  r%  r}  s        r   r	  ,IVRTrackedCamera.releaseVideoStreamTextureGL  s7      <<=,,,>>uEr   c                 @    U R                   R                  nU" U5        g r)   )r  r	  )r  universer%  s      r   r	  'IVRTrackedCamera.setCameraTrackingSpace  s      77
8r   c                 @    U R                   R                  nU" 5       nU$ r)   )r  r	  r@  s      r   r	  'IVRTrackedCamera.getCameraTrackingSpace  s      77r   r  r  )r   r   r   r   r  r	  r	  r	  r	  r  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r   r   r   r   r  r  3  s_    4&@#e [` F
8:"&F
r   r  c                       \ rS rSrS\" \\" \5      \\	\	5      4S\" \\" \5      \
5      4S\" \\\" \5      5      4S\" \\\\	\\" \5      5      4S\" \\\5      4S\" \\" \5      \	\	5      4S\" \\\\	\	5      4/rS	rg
)IVRScreenshots_FnTablei  requestScreenshothookScreenshotgetScreenshotPropertyTypegetScreenshotPropertyFilenameupdateScreenshotProgresstakeStereoScreenshotsubmitScreenshotr   N)r   r   r   r   r  EVRScreenshotErrorr  ScreenshotHandle_tEVRScreenshotTyper  r  rn  EVRScreenshotPropertyFilenamesr  r  r   r   r   r   r*
  r*
    s
   	56H'RdJegx  {C  EM  N  	O	23EwO`Gachij	$&=>OQcelm  fA  'B  	C	(*A(L^`~  AI  KS  U\  ]o  Up  +q  	r	#%<=OQcel%mn	!89KWUgMhjrt|!}~	45GI[]npx  {C  D  	EHr   r*
  c                       \ rS rSrSrS rS\S\4S jrSS	 jrS
 r	S r
S\SS4S jrS\S\4S jrS\S\SS4S jrSrg)r  i  z.Allows the application to generate screenshotsc                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z*Error retrieving VR API for IVRScreenshots)	IVRScreenshots_Versionr  r*
  r  r  r  r   r  r  r  s        r   r  IVRScreenshots.__init__  r  r   previewFilename
vRFilenamec                     U R                   R                  n[        5       nUb
  [        USS9nUb
  [        USS9nU" [	        U5      XU5      n[
        R                  R                  R                  U5        U$ )a  
Request a screenshot of the requested type.
A request of the VRScreenshotType_Stereo type will always
work. Other types will depend on the underlying application
support.
The first file name is for the preview image and should be a
regular screenshot (ideally from the left eye). The second
is the VR screenshot in the correct format. They should be
in the same aspect ratio.  Formats per type:
VRScreenshotType_Mono: the VR filename is ignored (can be
nullptr), this is a normal flat single shot.
VRScreenshotType_Stereo:  The VR image should be a
side-by-side with the left eye image on the left.
VRScreenshotType_Cubemap: The VR image should be six square
images composited horizontally.
VRScreenshotType_StereoPanorama: above/below with left eye
panorama being the above image.  Image is typically square
with the panorama being 2x horizontal.

Note that the VR dashboard will call this function when
the user presses the screenshot binding (currently System
Button + Trigger).  If Steam is running, the destination
file names will be in %TEMP% and will be copied into
Steam's screenshot library for the running application
once SubmitScreenshot() is called.
If Steam is not running, the paths will be in the user's
documents folder under Documents\SteamVR\Screenshots.
Other VR applications can call this to initiate a
screenshot outside of user control.
The destination file names do not need an extension,
will be replaced with the correct one for the format
which is currently .png.
r  r  )	r  r+
  r3
  r  r+   r'   ry  ScreenshotErrorr{  )r  r  r:
  r;
  r%  outScreenshotHandler}  s          r   r+
   IVRScreenshots.requestScreenshot  sw    D   2202&#OgFO!zG<J5,-uzR));;EB""r   r   Nc                 P   U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" X45      n[        R                  R                  R                  U5        g)a  
Called by the running VR application to indicate that it
wishes to be in charge of screenshots.  If the
application does not call this, the Compositor will only
support VRScreenshotType_Stereo screenshots that will be
captured without notification to the running app.
Once hooked your application will receive a
VREvent_RequestScreenshot event when the user presses the
buttons to take a screenshot.
Nr   r   )r  r,
  rS  r*   rT  r+   r  r4
  r'   ry  r=
  r{  )r  supportedTypesr%  supportedTypesArgtypesr}  s         r   r,
  IVRScreenshots.hookScreenshot  s       //! $E55 %nQ&7 8'E/!36N %nQ&7 8E$,));;EBr   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  UR                  5        U$ )z
When your application receives a
VREvent_RequestScreenshot event, call these functions to get
the details of the screenshot request.
)	r  r-
  r2
  r+   r'   ry  r=
  r{  r  )r  screenshotHandler%  r}  r-  s        r   r-
  (IVRScreenshots.getScreenshotPropertyType  sQ       ::"$$eEl3));;EKKHr   c           	         U R                   R                  n[        5       nU" XSS[        U5      5      n [        R
                  R                  R                  UR                  5        [        R                  " U5      nU" XXU[        U5      5        [        R
                  R                  R                  UR                  5        [        UR                  5      R                  S5      $ ! [        R
                  R                   a     Nf = f)z
Get the filename for the preview or vr image (see
vr::EScreenshotPropertyFilenames).  The return value is
the size of the string.
Nr   r  )r  r.
  r2
  r+   r'   ry  r=
  r{  r  r  r*   r  r  r  )r  rF
  filenameTyper%  r}  filenames         r   r.
  ,IVRScreenshots.getScreenshotPropertyFilename$  s       >>"$&dAuU|L	--??L ..x8
8uU|L));;EKKHX^^$++G44   44 		r  r  c                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)z
Call this if the application is taking the screen shot
will take more than a few ms processing. This will result
in an overlay being presented that shows a completion
bar.
N)r  r/
  r'   ry  r=
  r{  )r  rF
  r  r%  r}  s        r   r/
  'IVRScreenshots.updateScreenshotProgress6  s:       99#.));;EBr   c                     U R                   R                  n[        5       nUb
  [        USS9nUb
  [        USS9nU" [	        U5      X5      n[
        R                  R                  R                  U5        U$ )ae  
Tells the compositor to take an internal screenshot of
type VRScreenshotType_Stereo. It will take the current
submitted scene textures of the running application and
write them into the preview image and a side-by-side file
for the VR image.
This is similar to request screenshot, but doesn't ever
talk to the application, just takes the shot and submits.
r  r  )	r  r0
  r3
  r  r+   r'   ry  r=
  r{  )r  r:
  r;
  r%  r>
  r}  s         r   r0
  #IVRScreenshots.takeStereoScreenshotA  st       5502&#OgFO!zG<J5,-K));;EB""r   sourcePreviewFilenamesourceVRFilenamec                     U R                   R                  nUb
  [        USS9nUb
  [        USS9nU" XX45      n[        R                  R
                  R                  U5        g)a7  
Submit the completed screenshot.  If Steam is running
this will call into the Steam client and upload the
screenshot to the screenshots section of the library for
the running application.  If Steam is not running, this
function will display a notification to the user that the
screenshot was taken. The paths should be full paths with
extensions.
File paths should be absolute including extensions.
screenshotHandle can be k_unScreenshotHandleInvalid if this
was a new shot taking by the app to be saved and not
initiated by a user (achievement earned or something)
Nr  r  )r  r1
  r  r'   ry  r=
  r{  )r  rF
  r  rP
  rQ
  r%  r}  s          r   r1
  IVRScreenshots.submitScreenshotU  se       11 ,$)*?'$R!'$%5H#,AT));;EBr   r  r  )r   r   r   r   r  r  r#   r+
  r,
  r-
  r.
  r  r/
  r0
  r1
  r   r   r   r   r  r    sw    84*# *# *#XC2
5$	C5 	CT 	C#C #S #(Cs Cfi Cnr Cr   r  c            	       J    \ rS rSrS\" \\\\5      4S\" \\\\\5      4/rSrg)IVRResources_FnTableil  loadSharedResourcegetResourceFullPathr   N)	r   r   r   r   r  rn  r  r  r   r   r   r   rU
  rU
  l  s6    	6x8U]^_	 7(HV^`h ijHr   rU
  c                   :    \ rS rSrS rS\4S jrS\S\4S jrSrg)	r~  is  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z(Error retrieving VR API for IVRResources)	IVRResources_Versionr  rU
  r  r  r  r   r  r  r  s        r   r  IVRResources.__init__t  r  r   resourceNamec                     U R                   R                  nUb
  [        USS9n[        5       nU" U[	        U5      U5      nXTR
                  4$ )z
Loads the specified resource into the provided buffer if large enough.
Returns the size in bytes of the buffer required to hold the specified resource.
r  r  )r  rV
  r  r  r+   r  )r  r\
  	bufferLenr%  r  r-  s         r   rV
  IVRResources.loadSharedResource~  sM    
   33# @LL%-;||##r   resourceTypeDirectoryc                     U R                   R                  nUb
  [        USS9nUb
  [        USS9nU" XSS5      n[        R                  " U5      nU" XXT5        [        UR
                  5      R                  S5      $ )a	  
Provides the full path to the specified resource. Resource names can include named directories for
drivers and other things, and this resolves all of those and returns the actual physical path.
pchResourceTypeDirectory is the subdirectory of resources to look in.
Nr  r  r   )r  rW
  r  r*   r  r  r  )r  r\
  r`
  r%  r^
  
pathBuffers         r   rW
   IVRResources.getResourceFullPath  s       44# @L ,$)*?'$R!|D!D	00;

<
FZ%%&--g66r   r  N)	r   r   r   r   r  r#   rV
  rW
  r   r   r   r   r~  r~  s  s&    4
$s 
$7 7C 7r   r~  c                   j    \ rS rSrS\" \5      4S\" \\\\5      4S\" \\5      4S\" \	\5      4/r
Srg)IVRDriverManager_FnTablei  getDriverCountgetDriverNamegetDriverHandle	isEnabledr   N)r   r   r   r   r  rn  
DriverId_tr  DriverHandle_trG  r  r   r   r   r   re
  re
    sL    	28<=	1(JRZ[\	3NHMN	-k:FG	Hr   re
  c                   :    \ rS rSrS rS rS rS\4S jrS r	Sr
g	)
r  i  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z,Error retrieving VR API for IVRDriverManager)	IVRDriverManager_Versionr  re
  r  r  r  r   r  r  r  s        r   r  IVRDriverManager.__init__  r   r   c                 @    U R                   R                  nU" 5       nU$ r)   )r  rf
  r@  s      r   rf
  IVRDriverManager.getDriverCount  s      //r   c                     U R                   R                  nU" USS5      n[        R                  " U5      nU" XU5        [	        UR
                  5      R                  S5      $ )zdReturns the length of the number of bytes necessary to hold this string including the trailing null.Nr   r  )r  rg
  r*   r  r  r  r  )r  driverr%  r  r  s        r   rg
  IVRDriverManager.getDriverName  sU      ..a(
++J7
6*%U[[!((11r   
driverNamec                 \    U R                   R                  nUb
  [        USS9nU" U5      nU$ rk  )r  rh
  r  )r  ru
  r%  r-  s       r   rh
   IVRDriverManager.getDriverHandle  s3      00!zG<JJr   c                 B    U R                   R                  nU" U5      nU$ r)   )r  ri
  )r  rs
  r%  r-  s       r   ri
  IVRDriverManager.isEnabled  s!      **Fr   r  N)r   r   r   r   r  rf
  rg
  r#   rh
  ri
  r   r   r   r   r  r    s"    4
2# r   r  c                      \ rS rSr/ S\" \\5      4PS\" \\\" \5      5      4PS\" \\\" \	5      5      4PS\" \\\" \
5      5      4PS\" \\" \5      \\5      4PS\" \\	\" \5      \\
5      4PS\" \\	\" \5      \\
5      4PS	\" \\	\\\" \5      \\
5      4PS
\" \\	\\" \5      \\
5      4PS\" \\	\" \5      \5      4PS\" \\" \5      5      4PS\" \\5      4PS\" \\	\" \5      5      4PS\" \\	\" \5      \5      4PS\" \\	\\\5      4PS\" \\	\\\" \5      \5      4PS\" \\	\" \5      5      4PS\" \\	\\\" \5      \5      4PS\" \\	\\" \5      5      4PS\" \\	\\\\" \5      5      4PS\" \\\\\" \5      \5      4PS\" \\	\\\\\
5      4PS\" \\\	\" \
5      \5      4PS\" \\
\\\5      4PS\" \\
\" \5      \5      4PS\" \\	\" \5      \\\" \5      5      4PS\" \\\	5      4PS\" \\" \5      \\\
5      4PS\" \\\\" \5      \\\" \ 5      5      4PS\" \!5      4PS \" \\\\
\!5      4PS!\" \\
\\5      4Pr"S"r#g#)$IVRInput_FnTablei  setActionManifestPathgetActionSetHandlegetActionHandlegetInputSourceHandleupdateActionStategetDigitalActionDatagetAnalogActionDatagetPoseActionDataRelativeToNowgetPoseActionDataForNextFramegetSkeletalActionDatagetDominantHandsetDominantHandgetBoneCountgetBoneHierarchygetBoneNamegetSkeletalReferenceTransformsgetSkeletalTrackingLevelgetSkeletalBoneDatagetSkeletalSummaryDatagetSkeletalBoneDataCompresseddecompressSkeletalBoneDatatriggerHapticVibrationActiongetActionOriginsgetOriginLocalizedNamegetOriginTrackedDeviceInfogetActionBindingInfoshowActionOriginsshowBindingsForActionSetgetComponentStateForBindingisUsingLegacyInputopenBindingUIgetBindingVariantr   N)$r   r   r   r   r  EVRInputErrorr  r  r3  VRActionHandle_tr  r-  rn  r  r  r  r  r  r!  r  BoneIndex_tEVRSkeletalTransformSpaceEVRSkeletalReferencePoser>  EVRSkeletalTrackingLevelEVRSkeletalMotionRangeEVRSummaryTyper5  rR  ro  r#  r&  rR  rG  r  r   r   r   r   r{
  r{
    s   !	 "9-"RS!	6}hPWXkPlmn! 
3M8WUeMfgh! 
 !8RYZnRo!pq	!
 
5mWM`Eackmuvw! 
 !8HXZabzZ{  ~F  H\  "]  	^! 
 7GWY`axYy  |D  FZ  ![  	\! 
*+B=Rbd{  ~E  GN  Od  Ge  go  qE  ,F  	G! 
)*A-Qacz  }D  EZ  }[  ]e  g{  +|  	}! 
!"9-IY[bc|[}  @H  #I  	J! 
3M7KaCbcd! 
3MCYZ[! 
0@PRYZbRcde! 
4]DTV]^iVjltuv! 
/?OQ\^fhpqr!  
*+B=Rbd}  @X  Za  bs  Zt  v~  ,  	@!!" 
$%<]L\^ef~^  &A  	B#!$ 
 7GWYr  uK  MT  Uf  Mg  iq  !r  	s%!& 
"#:=JZ\jls  uL  mM  $N  	O'!( 
)*A-Qacy  |D  FN  PW  X`  Pa  +b  	c)!* 
&'>}hX`b{  ~E  FW  ~X  Zb  (c  	d+!, 
()@P`bikrt{  ~E  G[  *\  	]-!. 
4]DWYikr  tH  lI  KS  T  	U/!0 
"#:=J^`hjrt{#|}1!2 
&'>}Nbdkl}d~  AI  (J  	K3!4 
 !8HXZabtZuw  BJ  LS  T\  L]  "^  	_5!6 
5mEXZjkl7!8 
$%<]GTgLhjrt|  S  &T  	U9!: 
'(?xYacjk}c~  AI  KS  U\  ]y  Uz  ){  	|;!< 
6{CD=!> 
1-K^`t  wB  C  	D?!@ 
5mEY[cemnoA!Hr   r{
  c            
       >   \ rS rSrS rS\SS4S jrS\4S jrS	\4S
 jrS\4S jr	S r
S rS rS\4S jrS rS rS rS2S jrS rS rS rS rS rS rS rS rS rS\S \S!\S"\SS4
S# jrS$ rS% rS& rS' r S2S( jr!S) r"S*\S+\4S, jr#S- r$S.\SS4S/ jr%S0 r&S1r'g)3r  i  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z$Error retrieving VR API for IVRInput)	IVRInput_Versionr  r{
  r  r  r  r   r  r  r  s        r   r  IVRInput.__init__  U    &{+k)"/79IJDEE*33r   actionManifestPathr   Nc                     U R                   R                  nUb
  [        USS9nU" U5      n[        R                  R
                  R                  U5        g)a  
Sets the path to the action manifest JSON file that is used by this application. If this information
was set on the Steam partner site, calls to this function are ignored. If the Steam partner site
setting and the path provided by this call are different, VRInputError_MismatchedActionManifest is returned.
This call must be made before the first call to UpdateActionState or IVRSystem::PollNextEvent.
Nr  r  )r  r|
  r  r'   ry  
InputErrorr{  )r  r
  r%  r}  s       r   r|
  IVRInput.setActionManifestPath  sN       66)!&'9G!L%&$$66u=r   actionSetNamec                     U R                   R                  nUb
  [        USS9n[        5       nU" U[	        U5      5      n[
        R                  R                  R                  U5        UR                  $ )z\Returns a handle for an action set. This handle is used for all performance-sensitive calls.r  r  )
r  r}
  r  r3  r+   r'   ry  r
  r{  r  )r  r
  r%  rO  r}  s        r   r}
  IVRInput.getActionSetHandle  sa      33$!-'BM$&=%-0$$66u=||r   
actionNamec                     U R                   R                  nUb
  [        USS9n[        5       nU" U[	        U5      5      n[
        R                  R                  R                  U5        UR                  $ )zXReturns a handle for an action. This handle is used for all performance-sensitive calls.r  r  )
r  r~
  r  r
  r+   r'   ry  r
  r{  r  )r  r
  r%  rO  r}  s        r   r~
  IVRInput.getActionHandle  sa      00!zG<J!#:uV}-$$66u=||r   inputSourcePathc                     U R                   R                  nUb
  [        USS9n[        5       nU" U[	        U5      5      n[
        R                  R                  R                  U5        UR                  $ )zHReturns a handle for any path in the input system. E.g. /user/hand/rightr  r  )
r  r
  r  r  r+   r'   ry  r
  r{  r  )r  r
  r%  rO  r}  s        r   r
  IVRInput.getInputSourceHandle  sa      55&#OgFO%'?E&M2$$66u=||r   c                 r   U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSn[        [        5      nU" X5U5      n[        R                  R                  R                  U5        U$ )z
Reads the current state into all actions. After this call, the results of Get*Action calls
will be the same until the next call to UpdateActionState.
Nr   r   )r  r
  rS  r*   rT  r+   r  r-  rp  r'   ry  r
  r{  )r  setsr%  setsArgsetCountsizeOfVRSelectedActionSet_tr}  s          r   r
  IVRInput.updateActionState$  s    
   22<GHfll++DGnG4yH'!+.DDGnGH&,-@&A#7B$$66u=r   c                     U R                   R                  n[        5       n[        [        5      nU" U[	        U5      XR5      n[
        R                  R                  R                  U5        U$ )z
Reads the state of a digital action given its handle. This will return VRInputError_WrongType if the type of
action is something other than digital
)	r  r
  r  rp  r+   r'   ry  r
  r{  r  actionrestrictToDevicer%  
actionDataactionDataSizer}  s          r   r
  IVRInput.getDigitalActionData9  s[    
   55-/
 8965,nO$$66u=r   c                     U R                   R                  n[        5       n[        [        5      nU" U[	        U5      XR5      n[
        R                  R                  R                  U5        U$ )z
Reads the state of an analog action given its handle. This will return VRInputError_WrongType if the type of
action is something other than analog
)	r  r
  r  rp  r+   r'   ry  r
  r{  r
  s          r   r
  IVRInput.getAnalogActionDataE  s[    
   44,.
 7865,nO$$66u=r   predictedSecondsFromNowc                     U R                   R                  n[        5       n[        [        5      nU" XU[	        U5      Xt5      n[
        R                  R                  R                  U5        U$ )z
Reads the state of a pose action given its handle for the number of seconds relative to now. This
will generally be called with negative times from the fUpdateTime fields in other actions.
)	r  r
  r  rp  r+   r'   ry  r
  r{  )	r  r
  rV  r
  r
  r%  r
  r
  r}  s	            r   r
  'IVRInput.getPoseActionDataRelativeToNowQ  s^    
   ??*,
 566#:E*<M~p$$66u=r   c                     U R                   R                  n[        5       n[        [        5      nU" X[	        U5      Xc5      n[
        R                  R                  R                  U5        U$ )z
Reads the state of a pose action given its handle. The returned values will match the values returned
by the last call to IVRCompositor::WaitGetPoses().
)	r  r
  r  rp  r+   r'   ry  r
  r{  )r  r
  rV  r
  r%  r
  r
  r}  s           r   r
  &IVRInput.getPoseActionDataForNextFrame]  s[    
   >>*,
 5665#4nW$$66u=r   c                     U R                   R                  n[        5       n[        [        5      nU" U[	        U5      U5      n[
        R                  R                  R                  U5        U$ )z6Reads the state of a skeletal action given its handle.)	r  r
  r!  rp  r+   r'   ry  r
  r{  )r  r
  r%  r
  r
  r}  s         r   r
  IVRInput.getSkeletalActionDatai  sY      66.0
 9:65,n=$$66u=r   c                     U R                   R                  n[        5       nU" [        U5      5      n[        R
                  R                  R                  U5        U$ )ab  
Returns the current dominant hand for the user for this application. This function will only return success for applications
which include "supports_dominant_hand_setting": true in their action manifests. The dominant hand will only change after
a call to UpdateActionState, and the action data returned after that point will use the new dominant hand.
)r  r
  r  r+   r'   ry  r
  r{  )r  r%  dominantHandr}  s       r   r
  IVRInput.getDominantHandr  sL       00-/5&'$$66u=r   c                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g)z9Sets the dominant hand for the user for this application.N)r  r
  r'   ry  r
  r{  )r  r
  r%  r}  s       r   r
  IVRInput.setDominantHand~  s7      00< $$66u=r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )zFReads the number of bones in skeleton associated with the given action)	r  r
  rn  r+   r'   ry  r
  r{  r  )r  r
  r%  	boneCountr}  s        r   r
  IVRInput.getBoneCount  sO      --J	65+,$$66u=r   c                 T   U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" XU5      n[        R                  R                  R                  U5        U$ )zkFills the given array with the index of each bone's parent in the skeleton associated with the given actionNr   r   )r  r
  rS  r*   rT  r+   r  r
  r'   ry  r
  r{  )r  r
  parentIndicesr%  parentIndicesArgindexArayCountr}  s          r   r
  IVRInput.getBoneHierarchy  s      11 #Nv||44$]1%56 /N(1_/M$]1%56N6^<$$66u=r   c                    U R                   R                  nU" XSS5      n[        R                  " U5      nU" XXT5      n[        R
                  R                  R                  U5        [        UR                  5      R                  S5      $ )ztFills the given buffer with the name of the bone at the given index in the skeleton associated with the given actionNr   r  )r  r
  r*   r  r'   ry  r
  r{  r  r  r  )r  r
  	boneIndexr%  nameBufferSizeboneNamer}  s          r   r
  IVRInput.getBoneName  sq      ,,FtQ7..~>6h?$$66u=X^^$++G44r   c                 V   U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" XX6U5      n[        R                  R                  R                  U5        U$ )zXFills the given buffer with the transforms for a specific static skeletal reference poseNr   r   )r  r
  rS  r*   rT  r+   r  r>  r'   ry  r
  r{  )	r  r
  transformSpacereferencePosetransformArrayr%  transformArrayArgtransformArrayCountr}  s	            r   r
  'IVRInput.getSkeletalReferenceTransforms  s      ??! $"#55 %nQ&7 8"%n"5/!36N %nQ&7 8"#6=M`a$$66u=r   c                     U R                   R                  n[        5       nU" U[        U5      5      n[        R
                  R                  R                  U5        U$ )ziReads the level of accuracy to which the controller is able to track the user to recreate a skeletal pose)r  r
  r
  r+   r'   ry  r
  r{  )r  r
  r%  skeletalTrackingLevelr}  s        r   r
  !IVRInput.getSkeletalTrackingLevel  sN      99 8 :65!678$$66u=$$r   c                 V   U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" XX6U5      n[        R                  R                  R                  U5        U$ )zjReads the state of the skeletal bone data associated with this action and copies it into the given buffer.Nr   r   )r  r
  rS  r*   rT  r+   r  r>  r'   ry  r
  r{  )	r  r
  r
  motionRanger
  r%  r
  r
  r}  s	            r   r
  IVRInput.getSkeletalBoneData  s      44! $"#55 %nQ&7 8"%n"5/!36N %nQ&7 8"#6;K^_$$66u=r   c                     U R                   R                  n[        5       nU" X[        U5      5      n[        R
                  R                  R                  U5        U$ )zbReads summary information about the current pose of the skeleton associated with the given action.)r  r
  r5  r+   r'   ry  r
  r{  )r  r
  summaryTyper%  skeletalSummaryDatar}  s         r   r
  IVRInput.getSkeletalSummaryData  sN      77576.A(BC$$66u=""r   c           	          U R                   R                  n[        5       nU" X[        U5      U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )z
Reads the state of the skeletal bone data in a compressed form that is suitable for
sending over the network. The required buffer size will never exceed ( sizeof(VR_BoneTransform_t)*boneCount + 2).
Usually the size will be much smaller.
)	r  r
  rn  r+   r'   ry  r
  r{  r  )r  r
  r
  compressedDatacompressedSizer%  requiredCompressedSizer}  s           r   r
  &IVRInput.getSkeletalBoneDataCompressed  s^       >>!)6n(=~uUkOlm$$66u=%+++r   c                 h   U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" [        U5      X#Xg5      n[        R                  R                  R                  U5        U$ )zkTurns a compressed buffer from GetSkeletalBoneDataCompressed and turns it back into a bone transform array.Nr   r   )r  r
  rS  r*   rT  r+   r  r>  r'   ry  r
  r{  )	r  compressedBuffercompressedBufferSizer
  r
  r%  r
  r
  r}  s	            r   r
  #IVRInput.decompressSkeletalBoneData  s      ;;! $"#55 %nQ&7 8"%n"5/!36N %nQ&7 8"#5)*,@Rcy$$66u=r   startSecondsFromNowr#	  r$	  r%	  c                     U R                   R                  nU" XX4XV5      n[        R                  R                  R                  U5        g)z<Triggers a haptic event as described by the specified actionN)r  r
  r'   ry  r
  r{  )	r  r
  r
  r#	  r$	  r%	  r
  r%  r}  s	            r   r
  %IVRInput.triggerHapticVibrationAction  s;      ==6Ih$$66u=r   c                 h   U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSnU" XXV5      n[        R                  R                  R                  U5        UR                  $ )z%Retrieve origin handles for an actionNr   r   )r  r
  rS  r*   rT  r+   r  r  r'   ry  r
  r{  r  )r  actionSetHandledigitalActionHandle
originsOutr%  originsOutArgoriginOutCountr}  s           r   r
  IVRInput.getActionOrigins  s      11 MN
FLL11!*Q-0M _N.25J!*Q-0MN?W$$66u=r   c                    U R                   R                  nU" USSU5      n[        R                  " U5      nU" XXB5      n[        R
                  R                  R                  U5        [        UR                  5      R                  S5      $ )z
Retrieves the name of the origin in the current language. unStringSectionsToInclude is a bitfield of values in EVRInputStringBits that allows the
application to specify which parts of the origin's information it wants a string for.
Nr   r  )r  r
  r*   r  r'   ry  r
  r{  r  r  r  )r  rV  stringSectionsToIncluder%  nameArraySize	nameArrayr}  s          r   r
  IVRInput.getOriginLocalizedName  sv    
   7764,CD//>	6mM$$66u=Y__%,,W55r   c                     U R                   R                  n[        5       n[        [        5      nU" U[	        U5      U5      n[
        R                  R                  R                  U5        U$ )z:Retrieves useful information for the origin of this action)	r  r
  r#  rp  r+   r'   ry  r
  r{  )r  rV  r%  
originInfooriginInfoSizer}  s         r   r
  #IVRInput.getOriginTrackedDeviceInfo  sY      ;;&(
 1265,n=$$66u=r   c           	         U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSn[        [        5      n[        5       nU" XXe[        U5      5      n[        R                  R                  R                  U5        X'R                  4$ )z=Retrieves useful information about the bindings for an actionNr   r   )r  r
  rS  r*   rT  r+   r  r&  rp  rn  r'   ry  r
  r{  r  )	r  r
  r  r%  originInfoArgbindingInfoCountbindingInfoSizereturnedBindingInfoCountr}  s	            r   r
  IVRInput.getActionBindingInfo!  s      55 M 
FLL11!*Q-0M":,q03J!*Q-0M  !34#+: 6/USkMlm$$66u=9999r   c                     U R                   R                  nU" X5      n[        R                  R                  R                  U5        g)z3Shows the current binding for the action in-headsetN)r  r
  r'   ry  r
  r{  )r  r
  actionHandler%  r}  s        r   r
  IVRInput.showActionOrigins4  s7      22?1$$66u=r   c                 r   U R                   R                  nUc  SnSnOW[        U[        R                  5      (       a  [        US   5      n[        U5      nO[        S-  " 5       n[        US   5      nSn[        [        5      nU" XFXR5      n[        R                  R                  R                  U5        U$ )zFShows the current binding all the actions in the specified action setsNr   r   )r  r
  rS  r*   rT  r+   r  r-  rp  r'   ry  r
  r{  )r  r
  originToHighlightr%  r
  r
  r
  r}  s           r   r
  !IVRInput.showBindingsForActionSet:  s      99<GHfll++DGnG4yH'!+.DDGnGH&,-@&A#7U$$66u=r   r	  r  c           
      $   U R                   R                  nUb
  [        USS9nUb
  [        USS9n[        [        5      n[        5       nU" X[        U5      Xd[        U5      5      n[        R                  R                  R                  U5        U$ )zqUse this to query what action on the component returned by GetOriginTrackedDeviceInfo would trigger this binding.r  r  )r  r
  r  rp  r&  rR  r+   r'   ry  r
  r{  )	r  r	  r  r  r  r%  r  r	  r}  s	            r   r
  $IVRInput.getComponentStateForBindingL  s      <<&#OgFO$!-'BM !3457?53Doino}i~$$66u=r   c                 @    U R                   R                  nU" 5       nU$ )z0--------------- Legacy Input -------------------)r  r
  r@  s      r   r
  IVRInput.isUsingLegacyInputY  rM  r   r  c                     U R                   R                  nUb
  [        USS9nU" XX45      n[        R                  R
                  R                  U5        g)z
Opens the binding user interface. If no app key is provided it will use the key from the calling process.
If no set is provided it will open to the root of the app binding page.
Nr  r  )r  r
  r  r'   ry  r
  r{  )r  r  r
  deviceHandleshowOnDesktopr%  r}  s          r   r
  IVRInput.openBindingUI_  sM    
   ..6G4F6LH$$66u=r   c                    U R                   R                  nU" USS5      n[        R                  " U5      nU" XU5      n[        R
                  R                  R                  U5        [        UR                  5      R                  S5      $ )z
Returns the variant set in the current bindings. If the binding doesn't include a variant setting, this function
will return an empty string
Nr   r  )r  r
  r*   r  r'   ry  r
  r{  r  r  r  )r  r  r%  variantArraySizevariantArrayr}  s         r   r
  IVRInput.getBindingVariantj  sx    
   22j$2223CD:-=>$$66u=\''(//88r   r  r  )(r   r   r   r   r  r#   r|
  r}
  r~
  r
  r
  r
  r
  r  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r   r   r   r   r  r    s   4> > > # C *


V[ 


>"5"%"#
,"> >`e >rw >  EJ >  ae > "
6:&>$3 s 	>C 	>Z^ 	>
9r   r  c                       \ rS rSrS\" \\\\\\	" \
5      5      4S\" \\
5      4S\" \\
\\\	" \5      5      4S\" \\
\\5      4S\" \\
5      4S\" \\
5      4/rSrg	)
IVRIOBuffer_FnTableiw  openclosereadwritepropertyContainer
hasReadersr   N)r   r   r   r   r  EIOBufferErrorr  EIOBufferModern  r  IOBufferHandle_trR  r  rG  r  r   r   r   r   r$  r$  w  s    	(=RZ\dfmn~f  A  	B	).:JKL	(9I8U]_fgo_pqr	).:JHV^_`	56OQabc	.{<LMNHr   r$  c                   R    \ rS rSrSrS rS\4S jrSS jrS r	SS	 jr
S
 rS rSrg)r  i  z
----------------------------------------------------------------------------------------------
Purpose:
----------------------------------------------------------------------------------------------
c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z'Error retrieving VR API for IVRIOBuffer)	IVRIOBuffer_Versionr  r$  r  r  r  r   r  r  r  s        r   r  IVRIOBuffer.__init__  re  r   r%   c           	          U R                   R                  nUb
  [        USS9n[        5       nU" XX4[	        U5      5      n[
        R                  R                  R                  U5        U$ )z;opens an existing or creates a new IOBuffer of unSize bytesr  r  )	r  r%  r  r-  r+   r'   ry  IOBufferErrorr{  )r  r%   modeelementSizeelementsr%  r  r}  s           r   r%  IVRIOBuffer.open  s^      %%0D!#4{eFmD''99%@r   Nc                     U R                   R                  nU" U5      n[        R                  R                  R                  U5        g)z,closes a previously opened or created bufferN)r  r&  r'   ry  r3  r{  )r  r  r%  r}  s       r   r&  IVRIOBuffer.close  s6      &&6
''99%@r   c                     U R                   R                  n[        5       nU" U[        U5      U[        U5      5      n[        R
                  R                  R                  U5        UR                  $ )zVreads up to unBytes from buffer into *pDst, returning number of bytes read in *punRead)	r  r'  rn  r+   r'   ry  r3  r{  r  )r  r  dstbytes_r%  r'  r}  s          r   r'  IVRIOBuffer.read  sV      %%z65:vuT{;''99%@zzr   c                     U R                   R                  nU" U[        U5      U5      n[        R                  R
                  R                  U5        g)z0writes unBytes of data from *pSrc into a buffer.N)r  r(  r+   r'   ry  r3  r{  )r  r  srcr<  r%  r}  s         r   r(  IVRIOBuffer.write  s?      &&65:v.''99%@r   c                 B    U R                   R                  nU" U5      nU$ )z.retrieves the property container of an buffer.)r  r)  r  r  r%  r-  s       r   r)  IVRIOBuffer.propertyContainer  s!      22Fr   c                 B    U R                   R                  nU" U5      nU$ )zginexpensively checks for readers to allow writers to fast-fail potentially expensive copies and writes.)r  r*  rB  s       r   r*  IVRIOBuffer.hasReaders  s!      ++Fr   r  r  )r   r   r   r   r  r  r#   r%  r&  r'  r(  r)  r*  r   r   r   r   r  r    s3    4 AAr   r  c                       \ rS rSrS\" \\\" \5      5      4S\" \\	\
\" \5      \" \5      5      4S\" \\\
\" \5      5      4S\" \\\\" \5      5      4/rSrg)IVRSpatialAnchors_FnTablei  !createSpatialAnchorFromDescriptorcreateSpatialAnchorFromPosegetSpatialAnchorPosegetSpatialAnchorDescriptorr   N)r   r   r   r   r  EVRSpatialAnchorErrorr  r  r  rP  r  r9  rn  r  r   r   r   r   rG  rG    s    	,.EF[]egn  pE  hF  /G  	H	&(?@UWk  nE  GN  Ob  Gc  el  mB  eC  )D  	E	!89NPeg~  AH  I\  A]  "^  	_	%'>?TVkmuw~  @H  xI  (J  	K	Hr   rG  c                   :    \ rS rSrS rS\4S jrS rS rS r	Sr
g	)
r  i  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z-Error retrieving VR API for IVRSpatialAnchors)	IVRSpatialAnchors_Versionr  rG  r  r  r  r   r  r  r  s        r   r  IVRSpatialAnchors.__init__  r  r   
descriptorc                     U R                   R                  nUb
  [        USS9n[        5       nU" U[	        U5      5      n[
        R                  R                  R                  U5        UR                  $ )a  
Returns a handle for an spatial anchor described by "descriptor".  On success, pHandle
will contain a handle valid for this session.  Caller can wait for an event or occasionally
poll GetSpatialAnchorPose() to find the virtual coordinate associated with this anchor.
r  r  )
r  rH  r  r  r+   r'   ry  SpatialAnchorErrorr{  r  )r  rQ  r%  	handleOutr}  s        r   rH  3IVRSpatialAnchors.createSpatialAnchorFromDescriptor  sd       BB!zG<J)+	:uY/0,,>>uEr   c                     U R                   R                  n[        5       n[        5       nU" X[	        U5      [	        U5      5      n[
        R                  R                  R                  U5        XER                  4$ )a<  
Returns a handle for an new spatial anchor at pPose.  On success, pHandle
will contain a handle valid for this session.  Caller can wait for an event or occasionally
poll GetSpatialAnchorDescriptor() to find the permanent descriptor for this pose.
The result of GetSpatialAnchorPose() may evolve from this initial position if the driver chooses
to update it.
The anchor will be associated with the driver that provides unDeviceIndex, and the driver may use that specific
device as a hint for how to best create the anchor.
The eOrigin must match whatever tracking origin you are working in (seated/standing/raw).
This should be called when the user is close to (and ideally looking at/interacting with) the target physical
location.  At that moment, the driver will have the most information about how to recover that physical point
in the future, and the quality of the anchor (when the descriptor is re-used) will be highest.
The caller may decide to apply offsets from this initial pose, but is advised to stay relatively close to the
original pose location for highest fidelity.
)
r  rI  r9  r  r+   r'   ry  rS  r{  r  )r  rr  rV  r%  r  rT  r}  s          r   rI  -IVRSpatialAnchors.createSpatialAnchorFromPose  sc        <<"$)+	;dU95EF,,>>uE__$$r   c                     U R                   R                  n[        5       nU" X[        U5      5      n[        R
                  R                  R                  U5        U$ )z
Get the pose for a given handle.  This is intended to be cheap enough to call every frame (or fairly often)
so that the driver can refine this position when it has more information available.
)r  rJ  r9  r+   r'   ry  rS  r{  )r  rO  rV  r%  poseOutr}  s         r   rJ  &IVRSpatialAnchors.getSpatialAnchorPose  sL    
   55%'65>2,,>>uEr   c                    U R                   R                  nU" USS5      n[        R                  " U5      nU" XU5      n[        R
                  R                  R                  U5        [        UR                  5      R                  S5      $ )a  
Get the descriptor for a given handle.  This will be empty for handles where the driver has not
yet built a descriptor.  It will be the application-supplied descriptor for previously saved anchors
that the application is requesting poses for.  If the driver has called UpdateSpatialAnchorDescriptor()
already in this session, it will be the descriptor provided by the driver.
Returns true if the descriptor fits into the buffer, else false.  Buffer size should be at least
k_unMaxSpatialAnchorDescriptorSize.
Nr   r  )r  rK  r*   r  r'   ry  rS  r{  r  r  r  )r  rO  r%  descriptorBufferLenInOutdescriptorOutr}  s         r   rK  ,IVRSpatialAnchors.getSpatialAnchorDescriptor  sx       ;;#%fdA#6 334LM6*BC,,>>uE](()0099r   r  N)r   r   r   r   r  r#   rH  rI  rJ  rK  r   r   r   r   r  r    s"    4C %.	:r   r  c                   |    \ rS rSrS\" \\5      4S\" \\" \5      5      4S\" \\\5      4S\" \	\
\\\	5      4/rSrg)IVRDebug_FnTablei  emitVrProfilerEventbeginVrProfilerEventfinishVrProfilerEventdriverDebugRequestr   N)r   r   r   r   r  EVRDebugErrorr  r  VrProfilerEventHandle_trn  rP  r  r   r   r   r   r`  r`    s]    	 7x PQ	!8PgHh!ij	 "9-I`bj"kl	6xAUW_aikstu	Hr   r`  c                   R    \ rS rSrS rS\SS4S jrS rS\SS4S jrS	\4S
 jr	Sr
g)r  i  c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z$Error retrieving VR API for IVRDebug)	IVRDebug_Versionr  r`  r  r  r  r   r  r  r  s        r   r  IVRDebug.__init__  r
  r   messager   Nc                     U R                   R                  nUb
  [        USS9nU" U5      n[        R                  R
                  R                  U5        g)z
Create a vr profiler discrete event (point)
The event will be associated with the message provided in pchMessage, and the current
time will be used as the event timestamp.
Nr  r  )r  ra  r  r'   ry  
DebugErrorr{  )r  rk  r%  r}  s       r   ra  IVRDebug.emitVrProfilerEvent'  sJ       44Gg6G7$$66u=r   c                     U R                   R                  n[        5       nU" [        U5      5      n[        R
                  R                  R                  U5        UR                  $ )z
Create an vr profiler duration event (line)
The current time will be used as the timestamp for the start of the line.
On success, pHandleOut will contain a handle valid for terminating this event.
)	r  rb  rf  r+   r'   ry  rm  r{  r  )r  r%  rT  r}  s       r   rb  IVRDebug.beginVrProfilerEvent3  sP       55+-	5#$$$66u=r   c                     U R                   R                  nUb
  [        USS9nU" X5      n[        R                  R
                  R                  U5        g)z
Terminate a vr profiler event
The event associated with hHandle will be considered completed when this method is called.
The current time will be used assocaited to the termination time of the event, and
pchMessage will be used as the event title.
Nr  r  )r  rc  r  r'   ry  rm  r{  )r  rO  rk  r%  r}  s        r   rc  IVRDebug.finishVrProfilerEvent?  sK       66Gg6G6#$$66u=r   requestc                     U R                   R                  nUb
  [        USS9nU" XSS5      n[        R                  " U5      nU" XXT5        [        UR
                  5      R                  S5      $ )a/  
Sends a request to the driver for the specified device and returns the response. The maximum response size is 32k,
but this method can be called with a smaller buffer. If the response exceeds the size of the buffer, it is truncated.
The size of the response including its terminating null is returned.
Nr  r  r   )r  rd  r  r*   r  r  r  )r  rr  rs  r%  responseBufferSizeresponseBuffers         r   rd  IVRDebug.driverDebugRequestL  sm       33Gg6GdA>445GH
;D^))*11'::r   r  )r   r   r   r   r  r#   ra  rb  rc  rd  r   r   r   r   r  r    s>    4
>3 
>4 
>
>S >T >;s ;r   r  c                   v   \ rS rSrS\" \\\\\\\\\\" \5      5
      4S\" \\\\" \5      5      4S\" \\\" \5      5      4S\" \\\" \	5      5      4S\" \\5      4S\" \\" \5      \" \5      5      4S\" \\
\\" \5      \" \	5      5      4S	\" \\
\" \5      \" \5      5      4S
\" \\	\" \5      5      4/	rSrg)#IVRIPCResourceManagerClient_FnTablei[  newSharedVulkanImagenewSharedVulkanBuffernewSharedVulkanSemaphorerefResourceunrefResourcegetDmabufFormatsgetDmabufModifiersimportDmabufreceiveSharedFdr   N)r   r   r   r   r  rG  rn  r  SharedTextureHandle_tr}  EVRApplicationTyperq  r  r  r   r   r   r   ry  ry  [  sO   	!8hPXZbdoq|  J  LT  V^  `g  h}  `~  "  	@	 "9+xQY[bcx[y"z{	#%<[+W^_tWu%vw	/=RT[\dTefg	1+?TUV	4['(BSU\]eUfgh	6{DVX`bijrbsu|  ~F  vG   H  	I	0>PRYZlRmov  xM  pN  O  	P	3K7SX>Z[
Hr   ry  c                   T    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
 rS rS rSrg)r  ii  z
-----------------------------------------------------------------------------
Purpose: Interact with the IPCResourceManager
-----------------------------------------------------------------------------
c                     [         n[        U5        SU-   n[        n[        [	        U5      [        U5      5      nUc  [        S5      eUR                  U l        g )Nr  z7Error retrieving VR API for IVRIPCResourceManagerClient)	#IVRIPCResourceManagerClient_Versionr  ry  r  r  r  r   r  r  r  s        r   r  $IVRIPCResourceManagerClient.__init__p  sU    9{+k)5/79IJWXX*33r   c	                 r    U R                   R                  n	[        5       n
U	" XX4XVXx[        U
5      5	      nX4$ )z>
Create a new tracked Vulkan Image

nImageFormat: in VkFormat
)r  rz  r  r+   )r  imageFormatr&  r'  
renderablemappablecomputeAccess	mipLevelsarrayLayerCountr%  sharedHandler-  s               r   rz  0IVRIPCResourceManagerClient.newSharedVulkanImagez  sK       55,.KHU^qv  xD  rE  F##r   c                 l    U R                   R                  n[        5       nU" X[        U5      5      nXT4$ )z"Create a new tracked Vulkan Buffer)r  r{  r  r+   )r  size
usageFlagsr%  r  r-  s         r   r{  1IVRIPCResourceManagerClient.newSharedVulkanBuffer  s5      66,.DeL&9:##r   c                 l    U R                   R                  n[        5       nU" U[        U5      5      nXC4$ )z%Create a new tracked Vulkan Semaphore)r  r|  r  r+   )r  countingr%  r  r-  s        r   r|  4IVRIPCResourceManagerClient.newSharedVulkanSemaphore  s5      99,.HeL12##r   c                     U R                   R                  n[        5       nU" U[        U5      5      nXCR                  4$ )zkGrab a reference to hSharedHandle, and optionally generate a new IPC handle if pNewIpcHandle is not nullptr)r  r}  r}  r+   r  )r  r  r%  newIpcHandler-  s        r   r}  'IVRIPCResourceManagerClient.refResource  s:      ,,zL%"56))))r   c                 B    U R                   R                  nU" U5      nU$ )z!Drop a reference to hSharedHandle)r  r~  )r  r  r%  r-  s       r   r~  )IVRIPCResourceManagerClient.unrefResource  s"      ..L!r   c                     U R                   R                  n[        5       n[        5       nU" [        U5      [        U5      5      nXBR                  UR                  4$ )a  
Get all the DRM formats we support using DMA-BUF images for.

pOutFormatCount and pOutFormats function like Vulkan:
  - If pOutFormats is NULL, then pOutFormatCount will be overwritten with the format count.
  - If pOutFormats is not NULL, then pOutFormatCount specifies the size of the pOutFormats array,
      and will be overwritten with the number of formats written to the array.

If the function fails, false is returned, and pOutFormatCount will be 0.
Supported on Linux only.
)r  r  rn  r+   r  )r  r%  outFormatCount
outFormatsr-  s        r   r  ,IVRIPCResourceManagerClient.getDmabufFormats  sP       11!Z
E.)5+<=++Z-=-===r   c                     U R                   R                  n[        5       n[        5       nU" X[	        U5      [	        U5      5      nXdR
                  UR
                  4$ )aA  
Get dmabuf modifiers we are allowed to use.

pOutModifierCount and pOutModifiers function like Vulkan:
  - If pOutModifiers is NULL, then pOutModifierCount will be overwritten with the modifier count.
  - If pOutModifiers is not NULL, then pOutModifierCount specifies the size of the pOutModifiers array,
      and will be overwritten with the number of modifiers written to the array.

If modifiers are not supported, a single DRM_FORMAT_MOD_INVALID entry will be returned.

If the function fails, false is returned, and pOutModifierCount will be 0.
Supported on Linux only.
)r  r  rn  r}  r+   r  )r  applicationType	dRMFormatr%  outModifierCountoutModifiersr-  s          r   r  .IVRIPCResourceManagerClient.getDmabufModifiers  sT       33#:zO6F0G|I\]--|/A/AAAr   c                     U R                   R                  n[        5       n[        5       nU" U[	        U5      [	        U5      5      nXSU4$ )z
Import a dmabuf directly.
Note: the FD you pass in will be dup'ed, so you must close it yourself.
This function does NOT take ownership of the fd you pass in.
Supported on Linux only.
)r  r  rq  r  r+   )r  r  r%  dmabufAttributesr  r-  s         r   r  (IVRIPCResourceManagerClient.importDmabuf  sJ       ---/,.OU+;%<eL>QR55r   c                     U R                   R                  n[        5       nU" U[        U5      5      nXCR                  4$ )z
Consumes an IPC handle (eg. from RefResource) and returns a file-descriptor.
Caller acquires ownership of fd and is responsible for closing it.
Supported on Linux only.
)r  r  r  r+   r  )r  	ipcHandler%  outFdr-  s        r   r  +IVRIPCResourceManagerClient.receiveSharedFd  s9       00IuU|,{{""r   r  N)r   r   r   r   r  r  rz  r{  r|  r}  r~  r  r  r  r  r   r   r   r   r  r  i  s:    4	$$$*>$B(6	#r   r  c                     [        U 5      (       a  g[        5         [        nSU  S[        U5       SU S3n[	        U5      e)z:
Replace openvr error return code with a python exception
Nz<The installed SteamVR runtime could not provide API version z\ requested by pyopenvr. You may need to update SteamVR or use an older version of pyopenvr. z (error number z).)isInterfaceVersionValidshutdown"VRInitError_Init_InterfaceNotFoundgetVRInitErrorAsSymbolr   )r  r}  msgs      r   r  r    sR     {++J.EH VQ#E*+?5'EC c
r   c                 ,    [        X5        [        5       $ )a  
Finds the active installation of the VR API and initializes it. The provided path must be absolute
or relative to the current working directory. These are the local install versions of the equivalent
functions in steamvr.h and will work without a local Steam install.

This path is to the "root" of the VR API install. That's the directory with
the "drivers" directory and a platform (i.e. "win32") directory in it, not the directory with the DLL itself.
)initInternal2r`  )r  pStartupInfos     r   initr    s     /0:r   c                      [        5         g)z^
unloads vrclient.dll. Any interface pointers from the interface are
invalid after this point
N)shutdownInternalr   r   r   r  r    s
    
 r   c                  4    [         R                  n U " 5       nU$ )a  
Returns true if there is an HMD attached. This check is as lightweight as possible and
can be called outside of VR_Init/VR_Shutdown. It should be used when an application wants
to know if initializing VR is a possibility but isn't ready to take that step yet.
)_openvrVR_IsHmdPresentr%  r-  s     r   isHmdPresentr    s     
	 	 BTFMr   c                  4    [         R                  n U " 5       nU$ )z0Returns true if the OpenVR runtime is installed.)r  VR_IsRuntimeInstalledr  s     r   isRuntimeInstalledr    s    		&	&BTFMr   c                  8   [         R                  n [        5       n[        R                  " S5      nU " US[        U5      5        UR                  n[        R                  " U5      nU " X#[        U5      5        [        UR                  5      R                  S5      $ )z.Returns where the OpenVR runtime is installed.r   r  )	r  VR_GetRuntimePathrn  r*   r  r+   r  r  r  )r%  requiredBufferSizerb
  r  s       r   getRuntimePathr  '  s~    		"	"B!,,Q/Jz1e./0#))J,,Z8Jzu%789!!"))'22r   c                 T    [         R                  nU" U 5      nUR                  S5      $ )zwReturns the name of the enum value for an EVRInitError. This function may be called outside of VR_Init()/VR_Shutdown().r  )r  VR_GetVRInitErrorAsSymbolr  r}  r%  r-  s      r   r  r  7  s%    		*	*BYF==!!r   c                 T    [         R                  nU" U 5      nUR                  S5      $ )z
Returns an English string for an EVRInitError. Applications should call VR_GetVRInitErrorAsSymbol instead and
use that as a key to look up their own localized error message. This function may be called outside of VR_Init()/VR_Shutdown().
r  )r  %VR_GetVRInitErrorAsEnglishDescriptionr  r  s      r   "getVRInitErrorAsEnglishDescriptionr  B  s'    
 
	6	6BYF==!!r   interfaceVersionc                     [         R                  nU b
  [        U SS9n [        5       nU" U [	        U5      5      n[
        R                  R                  R                  UR                  5        U$ )z
Returns the interface of the specified version. This method must be called after VR_Init. The
pointer returned is valid until VR_Shutdown is called.
r  r  )
r  VR_GetGenericInterfacer  EVRInitErrorr+   r'   ry  	InitErrorr{  r  )r  r%  r}  r-  s       r   r  r  P  s^    
 
	'	'B# !1GDNE %,/F
11%++>Mr   c                 P    [         R                  nU b
  [        U SS9n U" U 5      nU$ )z>Returns whether the interface of the specified version exists.r  r  )r  VR_IsInterfaceVersionValidr  )r  r%  r-  s      r   r  r  b  s1    		+	+B# !1GD !FMr   c                  4    [         R                  n U " 5       nU$ )zTReturns a token that represents whether the VR interface handles need to be reloaded)r  VR_GetInitTokenr  s     r   rX  rX  o  s    		 	 BTFMr   startupInfoc                     [         R                  n[        5       nUb
  [        USS9nU" [	        U5      X5      n[
        R                  R                  R                  UR                  5        U$ rk  )
r  VR_InitInternal2r  r  r+   r'   ry  r  r{  r  )r  r  r%  r}  r-  s        r   r  r  z  sY    		!	!BNEK':eo;F
11%++>Mr   c                  2    [         R                  n U " 5         g r)   )r  VR_ShutdownInternal)r%  s    r   r  r    s    		$	$BDr   r)   r  (H  atexit
contextlibr*   importlib.resourcesr   platformversionr   openvr.error_coder'   r   	Structurer   rp  rR  systemPackHackStructure_openvr_lib_name
ValueError	ExitStackr    registerr&  r#   r&   _openvr_lib_pathcdllLoadLibraryr  WINFUNCTYPEr  	CFUNCTYPEr+   r.   r3   r6   r9   r<   r?   k_nSteamVRVersionMajork_nSteamVRVersionMinork_nSteamVRVersionBuildMaxDmabufPlaneCountk_nDriverNonek_unMaxDriverDebugResponseSizer  rU  k_unTrackedDeviceIndexOtherk_unTrackedDeviceIndexInvalidk_ulInvalidPropertyContainerk_unInvalidPropertyTagk_ulInvalidDriverHandlek_unFloatPropertyTagk_unInt32PropertyTagk_unUint64PropertyTagk_unBoolPropertyTagk_unStringPropertyTagk_unErrorPropertyTagk_unDoublePropertyTagk_unHmdMatrix34PropertyTagk_unHmdMatrix44PropertyTagk_unHmdVector3PropertyTagk_unHmdVector4PropertyTagk_unHmdVector2PropertyTagk_unHmdQuadPropertyTagk_unHiddenAreaPropertyTagk_unPathHandleInfoTagk_unActionPropertyTagk_unInputValuePropertyTagk_unWildcardPropertyTagk_unHapticVibrationPropertyTagk_unSkeletonPropertyTag k_unSpatialAnchorPosePropertyTagk_unJsonPropertyTagk_unActiveActionSetPropertyTag k_unOpenVRInternalReserved_Startk_unOpenVRInternalReserved_Endk_unMaxPropertyStringSizek_ulInvalidActionHandlek_ulInvalidActionSetHandlek_ulInvalidInputValueHandlek_ulInvalidInputComponentHandlek_unControllerStateAxisCountk_ulOverlayHandleInvalidk_unInvalidBoneIndex#k_unMaxDistortionFunctionParametersk_unScreenshotHandleInvalid#VRCompositor_ReprojectionReason_Cpu#VRCompositor_ReprojectionReason_GpuVRCompositor_ReprojectionAsyncVRCompositor_ReprojectionMotionVRCompositor_PredictionMaskVRCompositor_ThrottleMask'VRCompositor_ReprojectionMotion_Enabled(VRCompositor_ReprojectionMotion_ForcedOn,VRCompositor_ReprojectionMotion_AppThrottledr  k_unMaxApplicationKeyLengthk_pch_MimeType_HomeAppk_pch_MimeType_GameTheaterr  k_unMaxSettingsKeyLengthrc  k_pch_SteamVR_Sectionk_pch_SteamVR_RequireHmd_String$k_pch_SteamVR_ForcedDriverKey_String!k_pch_SteamVR_ForcedHmdKey_Stringk_pch_SteamVR_DisplayDebug_Bool%k_pch_SteamVR_DebugProcessPipe_String!k_pch_SteamVR_DisplayDebugX_Int32!k_pch_SteamVR_DisplayDebugY_Int32,k_pch_SteamVR_SendSystemButtonToAllApps_Boolk_pch_SteamVR_LogLevel_Int32k_pch_SteamVR_IPD_Floatk_pch_SteamVR_Background_String.k_pch_SteamVR_BackgroundUseDomeProjection_Bool*k_pch_SteamVR_BackgroundCameraHeight_Float(k_pch_SteamVR_BackgroundDomeRadius_Floatk_pch_SteamVR_GridColor_String"k_pch_SteamVR_PlayAreaColor_String&k_pch_SteamVR_TrackingLossColor_Stringk_pch_SteamVR_ShowStage_Bool)k_pch_SteamVR_DrawTrackingReferences_Bool*k_pch_SteamVR_ActivateMultipleDrivers_Bool k_pch_SteamVR_UsingSpeakers_Bool3k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float.k_pch_SteamVR_BaseStationPowerManagement_Int325k_pch_SteamVR_ShowBaseStationPowerManagementTip_Int32%k_pch_SteamVR_NeverKillProcesses_Bool$k_pch_SteamVR_SupersampleScale_Float,k_pch_SteamVR_MaxRecommendedResolution_Int32"k_pch_SteamVR_MotionSmoothing_Bool+k_pch_SteamVR_MotionSmoothingOverride_Int32$k_pch_SteamVR_FramesToThrottle_Int32-k_pch_SteamVR_AdditionalFramesToPredict_Int32k_pch_SteamVR_WorldScale_Floatk_pch_SteamVR_FovScale_Int32!k_pch_SteamVR_FovScaleInner_Int32!k_pch_SteamVR_FovScaleUpper_Int32!k_pch_SteamVR_FovScaleLower_Int32"k_pch_SteamVR_FovScaleFormat_Int32&k_pch_SteamVR_FovScaleLetterboxed_Bool+k_pch_SteamVR_DisableAsyncReprojection_Bool)k_pch_SteamVR_ForceFadeOnBadTracking_Bool%k_pch_SteamVR_DefaultMirrorView_Int32'k_pch_SteamVR_ShowLegacyMirrorView_Bool'k_pch_SteamVR_MirrorViewVisibility_Bool)k_pch_SteamVR_MirrorViewDisplayMode_Int32!k_pch_SteamVR_MirrorViewEye_Int32'k_pch_SteamVR_MirrorViewGeometry_String0k_pch_SteamVR_MirrorViewGeometryMaximized_String&k_pch_SteamVR_PerfGraphVisibility_Bool'k_pch_SteamVR_StartMonitorFromAppLaunch/k_pch_SteamVR_StartCompositorFromAppLaunch_Bool.k_pch_SteamVR_StartDashboardFromAppLaunch_Bool0k_pch_SteamVR_StartOverlayAppsFromDashboard_Boolk_pch_SteamVR_EnableHomeApp/k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32k_pch_SteamVR_RetailDemo_Boolk_pch_SteamVR_IpdOffset_Float,k_pch_SteamVR_AllowSupersampleFiltering_Bool,k_pch_SteamVR_SupersampleManualOverride_Bool)k_pch_SteamVR_EnableLinuxVulkanAsync_Bool)k_pch_SteamVR_AllowDisplayLockedMode_Bool>k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Boolk_pch_SteamVR_DebugInputBindingk_pch_SteamVR_DoNotFadeToGrid,k_pch_SteamVR_EnableSharedResourceJournalingk_pch_SteamVR_EnableSafeMode"k_pch_SteamVR_PreferredRefreshRatek_pch_SteamVR_LastVersionNotice#k_pch_SteamVR_LastVersionNoticeDate(k_pch_SteamVR_HmdDisplayColorGainR_Float(k_pch_SteamVR_HmdDisplayColorGainG_Float(k_pch_SteamVR_HmdDisplayColorGainB_Float$k_pch_SteamVR_CustomIconStyle_String'k_pch_SteamVR_CustomOffIconStyle_String*k_pch_SteamVR_CustomIconForceUpdate_String*k_pch_SteamVR_AllowGlobalActionSetPriority"k_pch_SteamVR_OverlayRenderQuality5k_pch_SteamVR_BlockOculusSDKOnOpenVRLaunchOption_Bool.k_pch_SteamVR_BlockOculusSDKOnAllLaunches_Bool*k_pch_SteamVR_HDCPLegacyCompatibility_Bool)k_pch_SteamVR_DisplayPortTrainingMode_Intk_pch_SteamVR_UsePrism_Bool1k_pch_SteamVR_AllowFallbackMirrorWindowLinux_Bool)k_pch_SteamVR_DisableKeyboardPrivacy_Boolk_pch_OpenXR_Section/k_pch_OpenXR_MetaUnityPluginCompatibility_Int32k_pch_DirectMode_Sectionk_pch_DirectMode_Enable_Boolk_pch_DirectMode_Count_Int32k_pch_DirectMode_EdidVid_Int32k_pch_DirectMode_EdidPid_Int32k_pch_Lighthouse_Section k_pch_Lighthouse_DisableIMU_Bool)k_pch_Lighthouse_DisableIMUExceptHMD_Bool)k_pch_Lighthouse_UseDisambiguation_String*k_pch_Lighthouse_DisambiguationDebug_Int32)k_pch_Lighthouse_PrimaryBasestation_Int32k_pch_Lighthouse_DBHistory_Bool%k_pch_Lighthouse_EnableBluetooth_Bool0k_pch_Lighthouse_PowerManagedBaseStations_String1k_pch_Lighthouse_PowerManagedBaseStations2_String7k_pch_Lighthouse_InactivityTimeoutForBaseStations_Int32'k_pch_Lighthouse_EnableImuFallback_Boolk_pch_Null_Sectionk_pch_Null_SerialNumber_Stringk_pch_Null_ModelNumber_Stringk_pch_Null_WindowX_Int32k_pch_Null_WindowY_Int32k_pch_Null_WindowWidth_Int32k_pch_Null_WindowHeight_Int32k_pch_Null_RenderWidth_Int32k_pch_Null_RenderHeight_Int32*k_pch_Null_SecondsFromVsyncToPhotons_Float!k_pch_Null_DisplayFrequency_Floatk_pch_WindowsMR_Sectionk_pch_UserInterface_Section*k_pch_UserInterface_StatusAlwaysOnTop_Bool'k_pch_UserInterface_MinimizeToTray_Bool6k_pch_UserInterface_HidePopupsWhenStatusMinimized_Bool$k_pch_UserInterface_Screenshots_Bool&k_pch_UserInterface_ScreenshotType_Int+k_pch_UserInterface_CheckStatusInterval_Int&k_pch_UserInterface_CheckForSteam_Boolk_pch_Notifications_Section%k_pch_Notifications_DoNotDisturb_Boolk_pch_Keyboard_Section"k_pch_Keyboard_TutorialCompletionsk_pch_Keyboard_ScaleXk_pch_Keyboard_ScaleYk_pch_Keyboard_OffsetLeftXk_pch_Keyboard_OffsetRightXk_pch_Keyboard_OffsetYk_pch_Keyboard_Smoothingk_pch_Perf_Sectionk_pch_Perf_PerfGraphInHMD_Bool k_pch_Perf_AllowTimingStore_Bool!k_pch_Perf_SaveTimingsOnExit_Boolk_pch_Perf_TestData_Floatk_pch_Perf_GPUProfiling_Bool k_pch_Perf_GpuBusMonitoring_Boolk_pch_CollisionBounds_Section!k_pch_CollisionBounds_Style_Int32,k_pch_CollisionBounds_GroundPerimeterOn_Bool)k_pch_CollisionBounds_CenterMarkerOn_Bool&k_pch_CollisionBounds_PlaySpaceOn_Bool(k_pch_CollisionBounds_FadeDistance_Float&k_pch_CollisionBounds_WallHeight_Float'k_pch_CollisionBounds_ColorGammaR_Int32'k_pch_CollisionBounds_ColorGammaG_Int32'k_pch_CollisionBounds_ColorGammaB_Int32'k_pch_CollisionBounds_ColorGammaA_Int32(k_pch_CollisionBounds_EnableDriverImportk_pch_Camera_Sectionk_pch_Camera_EnableCamera_Bool"k_pch_Camera_ShowOnController_Bool0k_pch_Camera_EnableCameraForCollisionBounds_Boolk_pch_Camera_RoomView_Int32$k_pch_Camera_BoundsColorGammaR_Int32$k_pch_Camera_BoundsColorGammaG_Int32$k_pch_Camera_BoundsColorGammaB_Int32$k_pch_Camera_BoundsColorGammaA_Int32!k_pch_Camera_BoundsStrength_Int32 k_pch_Camera_RoomViewStyle_Int32k_pch_audio_Section+k_pch_audio_SetOsDefaultPlaybackDevice_Bool-k_pch_audio_EnablePlaybackDeviceOverride_Bool)k_pch_audio_PlaybackDeviceOverride_String-k_pch_audio_PlaybackDeviceOverrideName_String,k_pch_audio_SetOsDefaultRecordingDevice_Bool.k_pch_audio_EnableRecordingDeviceOverride_Bool*k_pch_audio_RecordingDeviceOverride_String.k_pch_audio_RecordingDeviceOverrideName_String%k_pch_audio_EnablePlaybackMirror_Bool'k_pch_audio_PlaybackMirrorDevice_String+k_pch_audio_PlaybackMirrorDeviceName_String*k_pch_audio_OldPlaybackMirrorDevice_String%k_pch_audio_ActiveMirrorDevice_String6k_pch_audio_EnablePlaybackMirrorIndependentVolume_Bool*k_pch_audio_LastHmdPlaybackDeviceId_Stringk_pch_audio_VIVEHDMIGain)k_pch_audio_DualSpeakerAndJackOutput_Boolk_pch_audio_MuteMicMonitor_Boolk_pch_Power_Sectionk_pch_Power_PowerOffOnExit_Bool'k_pch_Power_TurnOffScreensTimeout_Float+k_pch_Power_TurnOffControllersTimeout_Float)k_pch_Power_ReturnToWatchdogTimeout_Float*k_pch_Power_AutoLaunchSteamVROnButtonPress)k_pch_Power_PauseCompositorOnStandby_Boolk_pch_Dashboard_Section$k_pch_Dashboard_EnableDashboard_Boolk_pch_Dashboard_ArcadeMode_Boolk_pch_Dashboard_Positionk_pch_Dashboard_DesktopScalek_pch_Dashboard_DashboardScale(k_pch_Dashboard_UseStandaloneSystemLayer'k_pch_Dashboard_AllowSteamOverlays_Bool%k_pch_Dashboard_AllowVRGamepadUI_Bool1k_pch_Dashboard_AllowVRGamepadUIViaGamescope_Bool(k_pch_Dashboard_SteamMatchesHMDFramerate&k_pch_Dashboard_GrabHandleAccelerationk_pch_modelskin_Sectionk_pch_Driver_Enable_Bool#k_pch_Driver_BlockedBySafemode_Boolk_pch_Driver_LoadPriority_Int327k_pch_Driver_Hmd_AllowsClientToControlTextureIndex_Bool-k_pch_Driver_ForceSystemLayerUseAppPoses_Boolk_pch_WebInterface_Sectionk_pch_VRWebHelper_Section&k_pch_VRWebHelper_DebuggerEnabled_Bool$k_pch_VRWebHelper_DebuggerPort_Int32k_pch_TrackingOverride_Section)k_pch_App_BindingAutosaveURLSuffix_String'k_pch_App_BindingLegacyAPISuffix_String-k_pch_App_BindingSteamVRInputAPISuffix_String'k_pch_App_BindingOpenXRAPISuffix_String(k_pch_App_BindingCurrentURLSuffix_String)k_pch_App_BindingPreviousURLSuffix_String)k_pch_App_NeedToUpdateAutosaveSuffix_Boolk_pch_App_DominantHand_Int32k_pch_App_BlockOculusSDK_Boolk_pch_Trackers_Sectionk_pch_DesktopUI_Sectionk_pch_LastKnown_Section&k_pch_LastKnown_HMDManufacturer_Stringk_pch_LastKnown_HMDModel_String&k_pch_LastKnown_ActualHMDDriver_String&k_pch_LastKnown_HMDSerialNumber_String(k_pch_LastKnown_HMDRemoteClientID_Stringk_pch_DismissedWarnings_Sectionk_pch_Input_Section(k_pch_Input_LeftThumbstickRotation_Float)k_pch_Input_RightThumbstickRotation_Float$k_pch_Input_ThumbstickDeadzone_Floatk_pch_GpuSpeed_Section k_pch_XRRenderModelCache_Sectionr  r  rJ  k_unHeadsetViewMaxWidthk_unHeadsetViewMaxHeightk_pchHeadsetViewOverlayKeyr  k_unNotificationTextMaxSizer  k_unVROverlayMaxKeyLengthk_unVROverlayMaxNameLengthk_unMaxOverlayCount-k_unMaxOverlayIntersectionMaskPrimitivesCountr  rz	  "k_pch_Controller_Component_GDC2015k_pch_Controller_Component_Basek_pch_Controller_Component_Tip%k_pch_Controller_Component_OpenXR_Aim#k_pch_Controller_Component_HandGrip&k_pch_Controller_Component_OpenXR_Grip+k_pch_Controller_Component_OpenXR_HandModel!k_pch_Controller_Component_StatusINVALID_TEXTURE_IDr	  r	  r	  r8
  rZ
  rn
  k_unMaxActionNameLengthk_unMaxActionSetNameLengthk_unMaxActionOriginCountk_unMaxBoneNameLength$k_nActionSetOverlayGlobalPriorityMin$k_nActionSetOverlayGlobalPriorityMaxk_nActionSetPriorityReservedMinr
  k_ulInvalidIOBufferHandler0  k_ulInvalidSpatialAnchorHandlerO  ri  r  rn  	ENUM_TYPEr  ENUM_VALUE_TYPEr  Eye_Left	Eye_RightrS  TextureType_InvalidTextureType_DirectXTextureType_OpenGLTextureType_VulkanTextureType_IOSurfaceTextureType_DirectX12TextureType_DXGISharedHandleTextureType_MetalTextureType_ReservedTextureType_SharedTextureHandlerT  ColorSpace_AutoColorSpace_GammaColorSpace_Linearr  TrackingResult_Uninitialized%TrackingResult_Calibrating_InProgress%TrackingResult_Calibrating_OutOfRangeTrackingResult_Running_OK!TrackingResult_Running_OutOfRange$TrackingResult_Fallback_RotationOnlyr	  TrackedDeviceClass_InvalidTrackedDeviceClass_HMDTrackedDeviceClass_Controller!TrackedDeviceClass_GenericTracker$TrackedDeviceClass_TrackingReference"TrackedDeviceClass_DisplayRedirectTrackedDeviceClass_Maxr  TrackedControllerRole_InvalidTrackedControllerRole_LeftHandTrackedControllerRole_RightHandTrackedControllerRole_OptOutTrackedControllerRole_TreadmillTrackedControllerRole_StylusTrackedControllerRole_Maxr  TrackingUniverseSeatedTrackingUniverseStanding"TrackingUniverseRawAndUncalibratedEAdditionalRadioFeaturesAdditionalRadioFeatures_None"AdditionalRadioFeatures_HTCLinkBox&AdditionalRadioFeatures_InternalDongle&AdditionalRadioFeatures_ExternalDongler  Prop_InvalidProp_TrackingSystemName_StringProp_ModelNumber_StringProp_SerialNumber_StringProp_RenderModelName_StringProp_WillDriftInYaw_BoolProp_ManufacturerName_String#Prop_TrackingFirmwareVersion_StringProp_HardwareRevision_String)Prop_AllWirelessDongleDescriptions_String#Prop_ConnectedWirelessDongle_StringProp_DeviceIsWireless_BoolProp_DeviceIsCharging_Bool"Prop_DeviceBatteryPercentage_Float$Prop_StatusDisplayTransform_Matrix34"Prop_Firmware_UpdateAvailable_BoolProp_Firmware_ManualUpdate_Bool$Prop_Firmware_ManualUpdateURL_StringProp_HardwareRevision_Uint64Prop_FirmwareVersion_Uint64Prop_FPGAVersion_Uint64Prop_VRCVersion_Uint64Prop_RadioVersion_Uint64Prop_DongleVersion_Uint64Prop_BlockServerShutdown_Bool)Prop_CanUnifyCoordinateSystemWithHmd_Bool!Prop_ContainsProximitySensor_Bool%Prop_DeviceProvidesBatteryStatus_BoolProp_DeviceCanPowerOff_Bool&Prop_Firmware_ProgrammingTarget_StringProp_DeviceClass_Int32Prop_HasCamera_BoolProp_DriverVersion_String&Prop_Firmware_ForceUpdateRequired_Bool%Prop_ViveSystemButtonFixRequired_BoolProp_ParentDriver_Uint64Prop_ResourceRoot_String Prop_RegisteredDeviceType_StringProp_InputProfilePath_StringProp_NeverTracked_BoolProp_NumCameras_Int32Prop_CameraFrameLayout_Int32Prop_CameraStreamFormat_Int32(Prop_AdditionalDeviceSettingsPath_StringProp_Identifiable_BoolProp_BootloaderVersion_Uint64&Prop_AdditionalSystemReportData_String$Prop_CompositeFirmwareVersion_StringProp_Firmware_RemindUpdate_Bool(Prop_PeripheralApplicationVersion_Uint64$Prop_ManufacturerSerialNumber_String Prop_ComputedSerialNumber_String&Prop_EstimatedDeviceFirstUseTime_Int32Prop_DevicePowerUsage_Float Prop_IgnoreMotionForStandby_Bool$Prop_ActualTrackingSystemName_StringProp_AllowCameraToggle_Bool#Prop_AllowLightSourceFrequency_BoolProp_SteamRemoteClientID_Uint64Prop_Reserved_1058Prop_ReportsTimeSinceVSync_Bool$Prop_SecondsFromVsyncToPhotons_FloatProp_DisplayFrequency_FloatProp_UserIpdMeters_FloatProp_CurrentUniverseId_Uint64Prop_PreviousUniverseId_Uint64"Prop_DisplayFirmwareVersion_Uint64Prop_IsOnDesktop_BoolProp_DisplayMCType_Int32Prop_DisplayMCOffset_FloatProp_DisplayMCScale_FloatProp_EdidVendorID_Int32Prop_DisplayMCImageLeft_StringProp_DisplayMCImageRight_StringProp_DisplayGCBlackClamp_FloatProp_EdidProductID_Int32#Prop_CameraToHeadTransform_Matrix34Prop_DisplayGCType_Int32Prop_DisplayGCOffset_FloatProp_DisplayGCScale_FloatProp_DisplayGCPrescale_FloatProp_DisplayGCImage_StringProp_LensCenterLeftU_FloatProp_LensCenterLeftV_FloatProp_LensCenterRightU_FloatProp_LensCenterRightV_Float#Prop_UserHeadToEyeDepthMeters_Float!Prop_CameraFirmwareVersion_Uint64%Prop_CameraFirmwareDescription_StringProp_DisplayFPGAVersion_Uint64$Prop_DisplayBootloaderVersion_Uint64"Prop_DisplayHardwareVersion_Uint64 Prop_AudioFirmwareVersion_Uint64"Prop_CameraCompatibilityMode_Int321Prop_ScreenshotHorizontalFieldOfViewDegrees_Float/Prop_ScreenshotVerticalFieldOfViewDegrees_FloatProp_DisplaySuppressed_BoolProp_DisplayAllowNightMode_BoolProp_DisplayMCImageWidth_Int32Prop_DisplayMCImageHeight_Int32$Prop_DisplayMCImageNumChannels_Int32Prop_DisplayMCImageData_Binary%Prop_SecondsFromPhotonsToVblank_Float*Prop_DriverDirectModeSendsVsyncEvents_BoolProp_DisplayDebugMode_BoolProp_GraphicsAdapterLuid_Uint64'Prop_DriverProvidedChaperonePath_String)Prop_ExpectedTrackingReferenceCount_Int32"Prop_ExpectedControllerCount_Int320Prop_NamedIconPathControllerLeftDeviceOff_String1Prop_NamedIconPathControllerRightDeviceOff_String3Prop_NamedIconPathTrackingReferenceDeviceOff_StringProp_DoNotApplyPrediction_Bool*Prop_CameraToHeadTransforms_Matrix34_Array#Prop_DistortionMeshResolution_Int32$Prop_DriverIsDrawingControllers_Bool(Prop_DriverRequestsApplicationPause_Bool(Prop_DriverRequestsReducedRendering_BoolProp_MinimumIpdStepMeters_Float&Prop_AudioBridgeFirmwareVersion_Uint64&Prop_ImageBridgeFirmwareVersion_Uint64 Prop_ImuToHeadTransform_Matrix34Prop_ImuFactoryGyroBias_Vector3 Prop_ImuFactoryGyroScale_Vector3(Prop_ImuFactoryAccelerometerBias_Vector3)Prop_ImuFactoryAccelerometerScale_Vector33Prop_ConfigurationIncludesLighthouse20Features_Bool#Prop_AdditionalRadioFeatures_Uint64%Prop_CameraWhiteBalance_Vector4_Array)Prop_CameraDistortionFunction_Int32_Array-Prop_CameraDistortionCoefficients_Float_Array"Prop_ExpectedControllerType_StringProp_HmdTrackingStyle_Int32+Prop_DriverProvidedChaperoneVisibility_Bool,Prop_HmdColumnCorrectionSettingPrefix_String*Prop_CameraSupportsCompatibilityModes_Bool)Prop_SupportsRoomViewDepthProjection_Bool+Prop_DisplayAvailableFrameRates_Float_Array+Prop_DisplaySupportsMultipleFramerates_Bool!Prop_DisplayColorMultLeft_Vector3"Prop_DisplayColorMultRight_Vector3/Prop_DisplaySupportsRuntimeFramerateChange_Bool#Prop_DisplaySupportsAnalogGain_BoolProp_DisplayMinAnalogGain_FloatProp_DisplayMaxAnalogGain_FloatProp_CameraExposureTime_FloatProp_CameraGlobalGain_FloatProp_DashboardScale_FloatProp_Hmd_SupportsHDR10_Bool)Prop_Hmd_EnableParallelRenderCameras_Bool'Prop_DriverProvidedChaperoneJson_String%Prop_ForceSystemLayerUseAppPoses_BoolProp_DashboardLinkSupport_Int32!Prop_DisplayMinUIAnalogGain_FloatProp_IpdUIRangeMinMeters_FloatProp_IpdUIRangeMaxMeters_Float(Prop_Hmd_SupportsHDCP14LegacyCompat_Bool#Prop_Hmd_SupportsMicMonitoring_Bool-Prop_Hmd_SupportsDisplayPortTrainingMode_Bool$Prop_Hmd_SupportsRoomViewDirect_Bool#Prop_Hmd_SupportsAppThrottling_Bool&Prop_Hmd_SupportsGpuBusMonitoring_Bool"Prop_DriverDisplaysIPDChanges_BoolProp_Reserved_2110Prop_Reserved_2111Prop_Reserved_2112'Prop_Hmd_MaxDistortedTextureWidth_Int32(Prop_Hmd_MaxDistortedTextureHeight_Int32'Prop_Hmd_AllowSupersampleFiltering_Bool*Prop_Hmd_AllowsClientToControlTextureIndexProp_Reserved_2117,Prop_DriverRequestedMuraCorrectionMode_Int32/Prop_DriverRequestedMuraFeather_InnerLeft_Int320Prop_DriverRequestedMuraFeather_InnerRight_Int32.Prop_DriverRequestedMuraFeather_InnerTop_Int321Prop_DriverRequestedMuraFeather_InnerBottom_Int32/Prop_DriverRequestedMuraFeather_OuterLeft_Int320Prop_DriverRequestedMuraFeather_OuterRight_Int32.Prop_DriverRequestedMuraFeather_OuterTop_Int321Prop_DriverRequestedMuraFeather_OuterBottom_Int32)Prop_Audio_DefaultPlaybackDeviceId_String*Prop_Audio_DefaultRecordingDeviceId_String,Prop_Audio_DefaultPlaybackDeviceVolume_Float0Prop_Audio_SupportsDualSpeakerAndJackOutput_Bool2Prop_Audio_DriverManagesPlaybackVolumeControl_Bool%Prop_Audio_DriverPlaybackVolume_Float"Prop_Audio_DriverPlaybackMute_Bool3Prop_Audio_DriverManagesRecordingVolumeControl_Bool&Prop_Audio_DriverRecordingVolume_Float#Prop_Audio_DriverRecordingMute_Bool%Prop_Audio_PipewirePlaybackNode_Int32&Prop_Audio_PipewireRecordingNode_Int32Prop_AttachedDeviceId_StringProp_SupportedButtons_Uint64Prop_Axis0Type_Int32Prop_Axis1Type_Int32Prop_Axis2Type_Int32Prop_Axis3Type_Int32Prop_Axis4Type_Int32Prop_ControllerRoleHint_Int32!Prop_FieldOfViewLeftDegrees_Float"Prop_FieldOfViewRightDegrees_Float Prop_FieldOfViewTopDegrees_Float#Prop_FieldOfViewBottomDegrees_Float%Prop_TrackingRangeMinimumMeters_Float%Prop_TrackingRangeMaximumMeters_FloatProp_ModeLabel_StringProp_CanWirelessIdentify_BoolProp_Nonce_Int32Prop_IconPathName_String"Prop_NamedIconPathDeviceOff_String(Prop_NamedIconPathDeviceSearching_String-Prop_NamedIconPathDeviceSearchingAlert_String$Prop_NamedIconPathDeviceReady_String)Prop_NamedIconPathDeviceReadyAlert_String'Prop_NamedIconPathDeviceNotReady_String&Prop_NamedIconPathDeviceStandby_String'Prop_NamedIconPathDeviceAlertLow_String+Prop_NamedIconPathDeviceStandbyAlert_String#Prop_DisplayHiddenArea_Binary_Start!Prop_DisplayHiddenArea_Binary_EndProp_ParentContainerProp_OverrideContainer_Uint64Prop_UserConfigPath_StringProp_InstallPath_StringProp_HasDisplayComponent_Bool Prop_HasControllerComponent_BoolProp_HasCameraComponent_Bool&Prop_HasDriverDirectModeComponent_Bool$Prop_HasVirtualDisplayComponent_Bool"Prop_HasSpatialAnchorsSupport_BoolProp_SupportsXrTextureSets_Bool&Prop_SupportsXrEyeGazeInteraction_BoolProp_DeviceHasNoIMU_BoolProp_UseAdvancedPrediction_BoolProp_ControllerType_String*Prop_ControllerHandSelectionPriority_Int32"Prop_VendorSpecific_Reserved_Start Prop_VendorSpecific_Reserved_EndProp_Reserved_11000Prop_Reserved_11001Prop_Reserved_11002Prop_Reserved_11003Prop_Reserved_11004Prop_TrackedDeviceProperty_Maxr  TrackedProp_SuccessTrackedProp_WrongDataTypeTrackedProp_WrongDeviceClassTrackedProp_BufferTooSmallTrackedProp_UnknownPropertyTrackedProp_InvalidDevice!TrackedProp_CouldNotContactServer$TrackedProp_ValueNotProvidedByDevice&TrackedProp_StringExceedsMaximumLengthTrackedProp_NotYetAvailableTrackedProp_PermissionDeniedTrackedProp_InvalidOperation"TrackedProp_CannotWriteToWildcardsTrackedProp_IPCReadFailureTrackedProp_OutOfMemoryTrackedProp_InvalidContainerEHmdTrackingStyleHmdTrackingStyle_UnknownHmdTrackingStyle_Lighthouse!HmdTrackingStyle_OutsideInCameras!HmdTrackingStyle_InsideOutCamerasrD  r  #Submit_LensDistortionAlreadyAppliedSubmit_GlRenderBufferSubmit_ReservedSubmit_TextureWithPoseSubmit_TextureWithDepthSubmit_FrameDiscontinuity!Submit_VulkanTextureWithArrayDataSubmit_GlArrayTextureSubmit_IsEglSubmit_Reserved2Submit_Reserved3Submit_Reserved4Submit_Reserved5EVRStateVRState_UndefinedVRState_OffVRState_SearchingVRState_Searching_AlertVRState_ReadyVRState_Ready_AlertVRState_NotReadyVRState_StandbyVRState_Ready_Alert_Lowr  VREvent_NoneVREvent_TrackedDeviceActivated VREvent_TrackedDeviceDeactivatedVREvent_TrackedDeviceUpdated+VREvent_TrackedDeviceUserInteractionStarted)VREvent_TrackedDeviceUserInteractionEndedVREvent_IpdChangedVREvent_EnterStandbyModeVREvent_LeaveStandbyMode VREvent_TrackedDeviceRoleChangedVREvent_WatchdogWakeUpRequestedVREvent_LensDistortionChangedVREvent_PropertyChangedVREvent_WirelessDisconnectVREvent_WirelessReconnectVREvent_Reserved_0114VREvent_Reserved_0115VREvent_ButtonPressVREvent_ButtonUnpressVREvent_ButtonTouchVREvent_ButtonUntouchVREvent_Modal_CancelVREvent_MouseMoveVREvent_MouseButtonDownVREvent_MouseButtonUpVREvent_FocusEnterVREvent_FocusLeaveVREvent_ScrollDiscreteVREvent_TouchPadMoveVREvent_OverlayFocusChangedVREvent_ReloadOverlaysVREvent_ScrollSmoothVREvent_LockMousePositionVREvent_UnlockMousePositionVREvent_InputFocusCapturedVREvent_InputFocusReleasedVREvent_SceneApplicationChangedVREvent_InputFocusChanged1VREvent_SceneApplicationUsingWrongGraphicsAdapterVREvent_ActionBindingReloadedVREvent_HideRenderModelsVREvent_ShowRenderModels$VREvent_SceneApplicationStateChanged VREvent_SceneAppPipeDisconnectedVREvent_ConsoleOpenedVREvent_ConsoleClosedVREvent_OverlayShownVREvent_OverlayHiddenVREvent_DashboardActivatedVREvent_DashboardDeactivatedVREvent_ResetDashboardVREvent_ImageLoadedVREvent_ShowKeyboardVREvent_HideKeyboard!VREvent_OverlayGamepadFocusGainedVREvent_OverlayGamepadFocusLost#VREvent_OverlaySharedTextureChangedVREvent_ScreenshotTriggeredVREvent_ImageFailedVREvent_DashboardOverlayCreatedVREvent_SwitchGamepadFocusVREvent_RequestScreenshotVREvent_ScreenshotTakenVREvent_ScreenshotFailed#VREvent_SubmitScreenshotToDashboard%VREvent_ScreenshotProgressToDashboard%VREvent_PrimaryDashboardDeviceChangedVREvent_RoomViewShownVREvent_RoomViewHiddenVREvent_ShowUIVREvent_ShowDevToolsVREvent_DesktopViewUpdatingVREvent_DesktopViewReadyVREvent_StartDashboardVREvent_ElevatePrismVREvent_OverlayClosedVREvent_DashboardThumbChangedVREvent_DesktopMightBeVisibleVREvent_DesktopMightBeHidden&VREvent_MutualSteamCapabilitiesChangedVREvent_OverlayCreatedVREvent_OverlayDestroyed VREvent_TrackingRecordingStarted VREvent_TrackingRecordingStopped VREvent_SetTrackingRecordingPathVREvent_Reserved_0560VREvent_Reserved_0561VREvent_Reserved_0562VREvent_Reserved_0563VREvent_Notification_ShownVREvent_Notification_Hidden%VREvent_Notification_BeginInteractionVREvent_Notification_DestroyedVREvent_QuitVREvent_ProcessQuitVREvent_QuitAcknowledgedVREvent_DriverRequestedQuitVREvent_RestartRequested!VREvent_InvalidateSwapTextureSets$VREvent_RequestDisconnectWirelessHMDVREvent_ChaperoneDataHasChanged#VREvent_ChaperoneUniverseHasChanged#VREvent_ChaperoneTempDataHasChanged$VREvent_ChaperoneSettingsHaveChangedVREvent_SeatedZeroPoseResetVREvent_ChaperoneFlushCache"VREvent_ChaperoneRoomSetupStarting#VREvent_ChaperoneRoomSetupCommittedVREvent_StandingZeroPoseResetVREvent_Reserved_0809VREvent_Reserved_0810VREvent_Reserved_0811 VREvent_AudioSettingsHaveChanged#VREvent_BackgroundSettingHasChanged!VREvent_CameraSettingsHaveChanged%VREvent_ReprojectionSettingHasChanged$VREvent_ModelSkinSettingsHaveChanged&VREvent_EnvironmentSettingsHaveChanged VREvent_PowerSettingsHaveChanged(VREvent_EnableHomeAppSettingsHaveChanged$VREvent_SteamVRSectionSettingChanged'VREvent_LighthouseSectionSettingChanged!VREvent_NullSectionSettingChanged*VREvent_UserInterfaceSectionSettingChanged*VREvent_NotificationsSectionSettingChanged%VREvent_KeyboardSectionSettingChanged!VREvent_PerfSectionSettingChanged&VREvent_DashboardSectionSettingChanged)VREvent_WebInterfaceSectionSettingChanged%VREvent_TrackersSectionSettingChanged&VREvent_LastKnownSectionSettingChanged.VREvent_DismissedWarningsSectionSettingChanged%VREvent_GpuSpeedSectionSettingChanged&VREvent_WindowsMRSectionSettingChanged"VREvent_OtherSectionSettingChanged VREvent_AnyDriverSettingsChangedVREvent_StatusUpdate+VREvent_WebInterface_InstallDriverCompletedVREvent_MCImageUpdatedVREvent_FirmwareUpdateStartedVREvent_FirmwareUpdateFinishedVREvent_KeyboardClosedVREvent_KeyboardCharInputVREvent_KeyboardDoneVREvent_KeyboardOpened_GlobalVREvent_KeyboardClosed_GlobalVREvent_ApplicationListUpdatedVREvent_ApplicationMimeTypeLoadVREvent_ProcessConnectedVREvent_ProcessDisconnected'VREvent_Compositor_ChaperoneBoundsShown(VREvent_Compositor_ChaperoneBoundsHidden&VREvent_Compositor_DisplayDisconnected%VREvent_Compositor_DisplayReconnectedVREvent_Compositor_HDCPError+VREvent_Compositor_ApplicationNotResponding%VREvent_Compositor_ApplicationResumed#VREvent_Compositor_OutOfVideoMemory*VREvent_Compositor_DisplayModeNotSupported%VREvent_Compositor_StageOverrideReady-VREvent_Compositor_RequestDisconnectReconnect&VREvent_TrackedCamera_StartVideoStream%VREvent_TrackedCamera_StopVideoStream&VREvent_TrackedCamera_PauseVideoStream'VREvent_TrackedCamera_ResumeVideoStream$VREvent_TrackedCamera_EditingSurface%VREvent_PerformanceTest_EnableCapture&VREvent_PerformanceTest_DisableCapture%VREvent_PerformanceTest_FidelityLevelVREvent_MessageOverlay_Closed$VREvent_MessageOverlayCloseRequestedVREvent_Input_HapticVibrationVREvent_Input_BindingLoadFailed#VREvent_Input_BindingLoadSuccessful$VREvent_Input_ActionManifestReloaded&VREvent_Input_ActionManifestLoadFailedVREvent_Input_ProgressUpdateVREvent_Input_TrackerActivatedVREvent_Input_BindingsUpdated(VREvent_Input_BindingSubscriptionChanged"VREvent_SpatialAnchors_PoseUpdated(VREvent_SpatialAnchors_DescriptorUpdated(VREvent_SpatialAnchors_RequestPoseUpdate.VREvent_SpatialAnchors_RequestDescriptorUpdateVREvent_SystemReport_StartedVREvent_Monitor_ShowHeadsetViewVREvent_Monitor_HideHeadsetViewVREvent_Audio_SetSpeakersVolumeVREvent_Audio_SetSpeakersMute!VREvent_Audio_SetMicrophoneVolumeVREvent_Audio_SetMicrophoneMute VREvent_RenderModel_CountChanged%VREvent_VendorSpecific_Reserved_Start#VREvent_VendorSpecific_Reserved_Endr
  k_EDeviceActivityLevel_Unknownk_EDeviceActivityLevel_Idle&k_EDeviceActivityLevel_UserInteraction.k_EDeviceActivityLevel_UserInteraction_Timeoutk_EDeviceActivityLevel_Standby#k_EDeviceActivityLevel_Idle_Timeoutr  k_EButton_Systemk_EButton_ApplicationMenuk_EButton_Gripk_EButton_DPad_Leftk_EButton_DPad_Upk_EButton_DPad_Rightk_EButton_DPad_Downk_EButton_Ak_EButton_ProximitySensork_EButton_Axis0k_EButton_Axis1k_EButton_Axis2k_EButton_Axis3k_EButton_Axis4k_EButton_SteamVR_Touchpadk_EButton_SteamVR_Triggerk_EButton_Dashboard_Backk_EButton_IndexController_Ak_EButton_IndexController_B"k_EButton_IndexController_JoyStickk_EButton_Reserved0k_EButton_Reserved1k_EButton_MaxEVRMouseButtonVRMouseButton_LeftVRMouseButton_RightVRMouseButton_Middler  ShowUI_ControllerBindingShowUI_ManageTrackersShowUI_PairingShowUI_SettingsShowUI_DebugCommandsShowUI_FullControllerBindingShowUI_ManageDriversr%  HDCPError_NoneHDCPError_LinkLostHDCPError_TamperedHDCPError_DeviceRevokedHDCPError_UnknownEVRComponentPropertyVRComponentProperty_IsStaticVRComponentProperty_IsVisibleVRComponentProperty_IsTouchedVRComponentProperty_IsPressedVRComponentProperty_IsScrolled!VRComponentProperty_IsHighlightedr
  VRInputError_NoneVRInputError_NameNotFoundVRInputError_WrongTypeVRInputError_InvalidHandleVRInputError_InvalidParamVRInputError_NoSteamVRInputError_MaxCapacityReachedVRInputError_IPCErrorVRInputError_NoActiveActionSetVRInputError_InvalidDeviceVRInputError_InvalidSkeletonVRInputError_InvalidBoneCount"VRInputError_InvalidCompressedDataVRInputError_NoDataVRInputError_BufferTooSmall%VRInputError_MismatchedActionManifest VRInputError_MissingSkeletonDataVRInputError_InvalidBoneIndexVRInputError_InvalidPriorityVRInputError_PermissionDeniedVRInputError_InvalidRenderModelrL  VRSpatialAnchorError_SuccessVRSpatialAnchorError_Internal"VRSpatialAnchorError_UnknownHandle"VRSpatialAnchorError_ArrayTooSmall*VRSpatialAnchorError_InvalidDescriptorChar$VRSpatialAnchorError_NotYetAvailable/VRSpatialAnchorError_NotAvailableInThisUniverse+VRSpatialAnchorError_PermanentlyUnavailable VRSpatialAnchorError_WrongDriver&VRSpatialAnchorError_DescriptorTooLongVRSpatialAnchorError_Unknown&VRSpatialAnchorError_NoRoomCalibration$VRSpatialAnchorError_InvalidArgument"VRSpatialAnchorError_UnknownDriverr  r  k_eHiddenAreaMesh_Inversek_eHiddenAreaMesh_LineLoopk_eHiddenAreaMesh_Maxr  k_eControllerAxis_Nonek_eControllerAxis_TrackPadk_eControllerAxis_Joystickk_eControllerAxis_TriggerEVRControllerEventOutputTypeControllerEventOutput_OSEventsControllerEventOutput_VREventsECollisionBoundsStyleCOLLISION_BOUNDS_STYLE_BEGINNER#COLLISION_BOUNDS_STYLE_INTERMEDIATECOLLISION_BOUNDS_STYLE_SQUARESCOLLISION_BOUNDS_STYLE_ADVANCEDCOLLISION_BOUNDS_STYLE_NONECOLLISION_BOUNDS_STYLE_COUNTr~  VROverlayError_NoneVROverlayError_UnknownOverlayVROverlayError_InvalidHandleVROverlayError_PermissionDenied#VROverlayError_OverlayLimitExceeded"VROverlayError_WrongVisibilityTypeVROverlayError_KeyTooLongVROverlayError_NameTooLongVROverlayError_KeyInUse!VROverlayError_WrongTransformType#VROverlayError_InvalidTrackedDeviceVROverlayError_InvalidParameter'VROverlayError_ThumbnailCantBeDestroyedVROverlayError_ArrayTooSmallVROverlayError_RequestFailedVROverlayError_InvalidTextureVROverlayError_UnableToLoadFile#VROverlayError_KeyboardAlreadyInUseVROverlayError_NoNeighbor$VROverlayError_TooManyMaskPrimitivesVROverlayError_BadMaskPrimitive#VROverlayError_TextureAlreadyLocked)VROverlayError_TextureLockCapacityReachedVROverlayError_TextureNotLockedVROverlayError_TimedOutr  VRApplication_OtherVRApplication_SceneVRApplication_OverlayVRApplication_BackgroundVRApplication_UtilityVRApplication_VRMonitorVRApplication_SteamWatchdogVRApplication_BootstrapperVRApplication_WebHelperVRApplication_OpenXRInstanceVRApplication_OpenXRSceneVRApplication_OpenXROverlayVRApplication_PrismVRApplication_RoomViewVRApplication_Maxr  VRFirmwareError_NoneVRFirmwareError_SuccessVRFirmwareError_Failr  VRNotificationError_OK)VRNotificationError_InvalidNotificationId)VRNotificationError_NotificationQueueFull(VRNotificationError_InvalidOverlayHandle4VRNotificationError_SystemWithUserValueAlreadyExists&VRNotificationError_ServiceUnavailabler
  $VRSkeletalMotionRange_WithController'VRSkeletalMotionRange_WithoutControllerr
  VRSkeletalTracking_EstimatedVRSkeletalTracking_PartialVRSkeletalTracking_FullVRSkeletalTrackingLevel_CountVRSkeletalTrackingLevel_Maxr  VRInitError_NoneVRInitError_Unknown%VRInitError_Init_InstallationNotFound$VRInitError_Init_InstallationCorrupt$VRInitError_Init_VRClientDLLNotFoundVRInitError_Init_FileNotFound VRInitError_Init_FactoryNotFoundr  !VRInitError_Init_InvalidInterface+VRInitError_Init_UserConfigDirectoryInvalidVRInitError_Init_HmdNotFoundVRInitError_Init_NotInitialized%VRInitError_Init_PathRegistryNotFoundVRInitError_Init_NoConfigPathVRInitError_Init_NoLogPath(VRInitError_Init_PathRegistryNotWritable"VRInitError_Init_AppInfoInitFailedVRInitError_Init_Retry#VRInitError_Init_InitCanceledByUser$VRInitError_Init_AnotherAppLaunching#VRInitError_Init_SettingsInitFailedVRInitError_Init_ShuttingDownVRInitError_Init_TooManyObjects)VRInitError_Init_NoServerForBackgroundApp+VRInitError_Init_NotSupportedWithCompositor*VRInitError_Init_NotAvailableToUtilityAppsVRInitError_Init_Internal"VRInitError_Init_HmdDriverIdIsNone*VRInitError_Init_HmdNotFoundPresenceFailed"VRInitError_Init_VRMonitorNotFound'VRInitError_Init_VRMonitorStartupFailed-VRInitError_Init_LowPowerWatchdogNotSupported'VRInitError_Init_InvalidApplicationType+VRInitError_Init_NotAvailableToWatchdogApps+VRInitError_Init_WatchdogDisabledInSettings$VRInitError_Init_VRDashboardNotFound)VRInitError_Init_VRDashboardStartupFailedVRInitError_Init_VRHomeNotFound$VRInitError_Init_VRHomeStartupFailedVRInitError_Init_RebootingBusy#VRInitError_Init_FirmwareUpdateBusy%VRInitError_Init_FirmwareRecoveryBusyVRInitError_Init_USBServiceBusy)VRInitError_Init_VRWebHelperStartupFailed)VRInitError_Init_TrackerManagerInitFailedVRInitError_Init_AlreadyRunning#VRInitError_Init_FailedForVrMonitor*VRInitError_Init_PropertyManagerInitFailed VRInitError_Init_WebServerFailed&VRInitError_Init_IllegalTypeTransition#VRInitError_Init_MismatchedRuntimes!VRInitError_Init_InvalidProcessId'VRInitError_Init_VRServiceStartupFailed%VRInitError_Init_PrismNeedsNewDrivers%VRInitError_Init_PrismStartupTimedOut#VRInitError_Init_CouldNotStartPrism&VRInitError_Init_PrismClientInitFailed'VRInitError_Init_PrismClientStartFailed(VRInitError_Init_PrismExitedUnexpectedlyVRInitError_Init_BadLuid(VRInitError_Init_NoServerForAppContainer&VRInitError_Init_DuplicateBootstrapper*VRInitError_Init_VRDashboardServicePending*VRInitError_Init_VRDashboardServiceTimeout*VRInitError_Init_VRDashboardServiceStopped*VRInitError_Init_VRDashboardAlreadyStarted&VRInitError_Init_VRDashboardCopyFailed(VRInitError_Init_VRDashboardTokenFailure.VRInitError_Init_VRDashboardEnvironmentFailure'VRInitError_Init_VRDashboardPathFailureVRInitError_Driver_FailedVRInitError_Driver_UnknownVRInitError_Driver_HmdUnknownVRInitError_Driver_NotLoaded#VRInitError_Driver_RuntimeOutOfDateVRInitError_Driver_HmdInUse VRInitError_Driver_NotCalibrated%VRInitError_Driver_CalibrationInvalid%VRInitError_Driver_HmdDisplayNotFound0VRInitError_Driver_TrackedDeviceInterfaceUnknown)VRInitError_Driver_HmdDriverIdOutOfBounds%VRInitError_Driver_HmdDisplayMirrored+VRInitError_Driver_HmdDisplayNotFoundLaptop)VRInitError_Driver_PeerDriverNotInstalled*VRInitError_Driver_WirelessHmdNotConnected VRInitError_IPC_ServerInitFailedVRInitError_IPC_ConnectFailed%VRInitError_IPC_SharedStateInitFailed$VRInitError_IPC_CompositorInitFailedVRInitError_IPC_MutexInitFailedVRInitError_IPC_Failed'VRInitError_IPC_CompositorConnectFailed0VRInitError_IPC_CompositorInvalidConnectResponse2VRInitError_IPC_ConnectFailedAfterMultipleAttempts.VRInitError_IPC_ConnectFailedAfterTargetExited$VRInitError_IPC_NamespaceUnavailableVRInitError_Compositor_Failed,VRInitError_Compositor_D3D11HardwareRequired-VRInitError_Compositor_FirmwareRequiresUpdate(VRInitError_Compositor_OverlayInitFailed,VRInitError_Compositor_ScreenshotsInitFailed+VRInitError_Compositor_UnableToCreateDevice(VRInitError_Compositor_SharedStateIsNull0VRInitError_Compositor_NotificationManagerIsNull2VRInitError_Compositor_ResourceManagerClientIsNull;VRInitError_Compositor_MessageOverlaySharedStateInitFailure0VRInitError_Compositor_PropertiesInterfaceIsNull3VRInitError_Compositor_CreateFullscreenWindowFailed.VRInitError_Compositor_SettingsInterfaceIsNull)VRInitError_Compositor_FailedToShowWindow-VRInitError_Compositor_DistortInterfaceIsNull.VRInitError_Compositor_DisplayFrequencyFailure3VRInitError_Compositor_RendererInitializationFailed1VRInitError_Compositor_DXGIFactoryInterfaceIsNull.VRInitError_Compositor_DXGIFactoryCreateFailed-VRInitError_Compositor_DXGIFactoryQueryFailed,VRInitError_Compositor_InvalidAdapterDesktop+VRInitError_Compositor_InvalidHmdAttachment+VRInitError_Compositor_InvalidOutputDesktop,VRInitError_Compositor_InvalidDeviceProvided8VRInitError_Compositor_D3D11RendererInitializationFailed.VRInitError_Compositor_FailedToFindDisplayMode.VRInitError_Compositor_FailedToCreateSwapChain,VRInitError_Compositor_FailedToGetBackBuffer1VRInitError_Compositor_FailedToCreateRenderTarget3VRInitError_Compositor_FailedToCreateDXGI2SwapChain1VRInitError_Compositor_FailedtoGetDXGI2BackBuffer6VRInitError_Compositor_FailedToCreateDXGI2RenderTarget5VRInitError_Compositor_FailedToGetDXGIDeviceInterface(VRInitError_Compositor_SelectDisplayMode7VRInitError_Compositor_FailedToCreateNvAPIRenderTargets*VRInitError_Compositor_NvAPISetDisplayMode6VRInitError_Compositor_FailedToCreateDirectModeDisplay2VRInitError_Compositor_InvalidHmdPropertyContainer-VRInitError_Compositor_UpdateDisplayFrequency,VRInitError_Compositor_CreateRasterizerState5VRInitError_Compositor_CreateWireframeRasterizerState)VRInitError_Compositor_CreateSamplerState6VRInitError_Compositor_CreateClampToBorderSamplerState.VRInitError_Compositor_CreateAnisoSamplerState0VRInitError_Compositor_CreateOverlaySamplerState1VRInitError_Compositor_CreatePanoramaSamplerState-VRInitError_Compositor_CreateFontSamplerState)VRInitError_Compositor_CreateNoBlendState'VRInitError_Compositor_CreateBlendState,VRInitError_Compositor_CreateAlphaBlendState,VRInitError_Compositor_CreateBlendStateMaskR,VRInitError_Compositor_CreateBlendStateMaskG,VRInitError_Compositor_CreateBlendStateMaskB.VRInitError_Compositor_CreateDepthStencilState5VRInitError_Compositor_CreateDepthStencilStateNoWrite5VRInitError_Compositor_CreateDepthStencilStateNoDepth)VRInitError_Compositor_CreateFlushTexture/VRInitError_Compositor_CreateDistortionSurfaces+VRInitError_Compositor_CreateConstantBuffer2VRInitError_Compositor_CreateHmdPoseConstantBuffer9VRInitError_Compositor_CreateHmdPoseStagingConstantBuffer:VRInitError_Compositor_CreateSharedFrameInfoConstantBuffer2VRInitError_Compositor_CreateOverlayConstantBuffer<VRInitError_Compositor_CreateSceneTextureIndexConstantBufferDVRInitError_Compositor_CreateReadableSceneTextureIndexConstantBufferDVRInitError_Compositor_CreateLayerGraphicsTextureIndexConstantBufferCVRInitError_Compositor_CreateLayerComputeTextureIndexConstantBufferHVRInitError_Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer9VRInitError_Compositor_CreateComputeHmdPoseConstantBuffer/VRInitError_Compositor_CreateGeomConstantBuffer4VRInitError_Compositor_CreatePanelMaskConstantBuffer(VRInitError_Compositor_CreatePixelSimUBO/VRInitError_Compositor_CreateMSAARenderTextures2VRInitError_Compositor_CreateResolveRenderTextures9VRInitError_Compositor_CreateComputeResolveRenderTextures<VRInitError_Compositor_CreateDriverDirectModeResolveTextures:VRInitError_Compositor_OpenDriverDirectModeResolveTextures0VRInitError_Compositor_CreateFallbackSyncTexture/VRInitError_Compositor_ShareFallbackSyncTexture/VRInitError_Compositor_CreateOverlayIndexBuffer0VRInitError_Compositor_CreateOverlayVertexBuffer-VRInitError_Compositor_CreateTextVertexBuffer,VRInitError_Compositor_CreateTextIndexBuffer+VRInitError_Compositor_CreateMirrorTextures3VRInitError_Compositor_CreateLastFrameRenderTexture*VRInitError_Compositor_CreateMirrorOverlay=VRInitError_Compositor_FailedToCreateVirtualDisplayBackbuffer.VRInitError_Compositor_DisplayModeNotSupported/VRInitError_Compositor_CreateOverlayInvalidCall6VRInitError_Compositor_CreateOverlayAlreadyInitialized,VRInitError_Compositor_FailedToCreateMailbox,VRInitError_Compositor_WindowInterfaceIsNull0VRInitError_Compositor_SystemLayerCreateInstance/VRInitError_Compositor_SystemLayerCreateSession.VRInitError_Compositor_CreateInverseDistortUVs,VRInitError_Compositor_CreateBackbufferDepth,VRInitError_Compositor_CannotDRMLeaseDisplay3VRInitError_Compositor_CannotConnectToDisplayServer(VRInitError_Compositor_GnomeNoDRMLeasing0VRInitError_Compositor_FailedToInitializeEncoder(VRInitError_Compositor_CreateBlurTexture9VRInitError_VendorSpecific_UnableToConnectToOculusRuntime.VRInitError_VendorSpecific_WindowsNotInDevMode/VRInitError_VendorSpecific_OculusLinkNotEnabled2VRInitError_VendorSpecific_HmdFound_CantOpenDevice>VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart2VRInitError_VendorSpecific_HmdFound_NoStoredConfig0VRInitError_VendorSpecific_HmdFound_ConfigTooBig2VRInitError_VendorSpecific_HmdFound_ConfigTooSmall4VRInitError_VendorSpecific_HmdFound_UnableToInitZLib;VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion=VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart<VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart;VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext8VRInitError_VendorSpecific_HmdFound_UserDataAddressRange1VRInitError_VendorSpecific_HmdFound_UserDataError;VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck2VRInitError_VendorSpecific_OculusRuntimeBadInstall=VRInitError_VendorSpecific_HmdFound_UnexpectedConfiguration_1+VRInitError_Steam_SteamInstallationNotFoundVRInitError_LastErrorr4
  VRScreenshotType_NoneVRScreenshotType_MonoVRScreenshotType_StereoVRScreenshotType_CubemapVRScreenshotType_MonoPanoramaVRScreenshotType_StereoPanoramar5
  %VRScreenshotPropertyFilenames_Preview VRScreenshotPropertyFilenames_VRr	  VRTrackedCameraError_None$VRTrackedCameraError_OperationFailed"VRTrackedCameraError_InvalidHandle.VRTrackedCameraError_InvalidFrameHeaderVersion!VRTrackedCameraError_OutOfHandlesVRTrackedCameraError_IPCFailure.VRTrackedCameraError_NotSupportedForThisDevice(VRTrackedCameraError_SharedMemoryFailure*VRTrackedCameraError_FrameBufferingFailure'VRTrackedCameraError_StreamSetupFailure'VRTrackedCameraError_InvalidGLTextureId/VRTrackedCameraError_InvalidSharedTextureHandle+VRTrackedCameraError_FailedToGetGLTextureId)VRTrackedCameraError_SharedTextureFailure%VRTrackedCameraError_NoFrameAvailable$VRTrackedCameraError_InvalidArgument+VRTrackedCameraError_InvalidFrameBufferSizeEVRTrackedCameraFrameLayout EVRTrackedCameraFrameLayout_Mono"EVRTrackedCameraFrameLayout_Stereo*EVRTrackedCameraFrameLayout_VerticalLayout,EVRTrackedCameraFrameLayout_HorizontalLayoutrl  "VRTrackedCameraFrameType_Distorted$VRTrackedCameraFrameType_Undistorted+VRTrackedCameraFrameType_MaximumUndistortedMAX_CAMERA_FRAME_TYPESEVRDistortionFunctionTypeVRDistortionFunctionType_NoneVRDistortionFunctionType_FTheta(VRDistortionFunctionType_Extended_FThetaMAX_DISTORTION_FUNCTION_TYPESEVSync
VSync_NoneVSync_WaitRenderVSync_NoWaitRenderEVRMuraCorrectionModeEVRMuraCorrectionMode_Default"EVRMuraCorrectionMode_NoCorrectionImu_OffScaleFlagsOffScale_AccelXOffScale_AccelYOffScale_AccelZOffScale_GyroXOffScale_GyroYOffScale_GyroZr  VRApplicationError_None&VRApplicationError_AppKeyAlreadyExistsVRApplicationError_NoManifest VRApplicationError_NoApplicationVRApplicationError_InvalidIndex%VRApplicationError_UnknownApplicationVRApplicationError_IPCFailed,VRApplicationError_ApplicationAlreadyRunning"VRApplicationError_InvalidManifest%VRApplicationError_InvalidApplicationVRApplicationError_LaunchFailed-VRApplicationError_ApplicationAlreadyStarting#VRApplicationError_LaunchInProgress)VRApplicationError_OldApplicationQuitting$VRApplicationError_TransitionAbortedVRApplicationError_IsTemplate#VRApplicationError_SteamVRIsExiting!VRApplicationError_BufferTooSmall!VRApplicationError_PropertyNotSet"VRApplicationError_UnknownProperty#VRApplicationError_InvalidParameter!VRApplicationError_NotImplementedr  !VRApplicationProperty_Name_String'VRApplicationProperty_LaunchType_String-VRApplicationProperty_WorkingDirectory_String'VRApplicationProperty_BinaryPath_String&VRApplicationProperty_Arguments_String VRApplicationProperty_URL_String(VRApplicationProperty_Description_String$VRApplicationProperty_NewsURL_String&VRApplicationProperty_ImagePath_String-VRApplicationProperty_ImagePathCapsule_String#VRApplicationProperty_Source_String.VRApplicationProperty_ActionManifestURL_String-VRApplicationProperty_IsDashboardOverlay_Bool%VRApplicationProperty_IsTemplate_Bool&VRApplicationProperty_IsInstanced_Bool%VRApplicationProperty_IsInternal_Bool8VRApplicationProperty_WantsCompositorPauseInStandby_Bool#VRApplicationProperty_IsHidden_Bool+VRApplicationProperty_LastLaunchTime_Uint64r  EVRSceneApplicationState_None!EVRSceneApplicationState_Starting!EVRSceneApplicationState_Quitting EVRSceneApplicationState_Running EVRSceneApplicationState_Waitingr`  VRSettingsError_NoneVRSettingsError_IPCFailedVRSettingsError_WriteFailedVRSettingsError_ReadFailedVRSettingsError_JsonParseFailed(VRSettingsError_UnsetSettingHasNoDefaultVRSettingsError_AccessDeniedr  ChaperoneCalibrationState_OK!ChaperoneCalibrationState_Warning9ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved4ChaperoneCalibrationState_Warning_BaseStationRemoved5ChaperoneCalibrationState_Warning_SeatedBoundsInvalidChaperoneCalibrationState_Error8ChaperoneCalibrationState_Error_BaseStationUninitialized3ChaperoneCalibrationState_Error_BaseStationConflict/ChaperoneCalibrationState_Error_PlayAreaInvalid6ChaperoneCalibrationState_Error_CollisionBoundsInvalidr  EChaperoneConfigFile_LiveEChaperoneConfigFile_TempEChaperoneImportFlagsEChaperoneImport_BoundsOnlyrB  VRCompositorError_NoneVRCompositorError_RequestFailed%VRCompositorError_IncompatibleVersion VRCompositorError_DoNotHaveFocus VRCompositorError_InvalidTexture'VRCompositorError_IsNotSceneApplication(VRCompositorError_TextureIsOnWrongDevice.VRCompositorError_TextureUsesUnsupportedFormat,VRCompositorError_SharedTexturesNotSupported!VRCompositorError_IndexOutOfRange"VRCompositorError_AlreadySubmittedVRCompositorError_InvalidBoundsVRCompositorError_AlreadySetrC  VRCompositorTextureUsage_LeftVRCompositorTextureUsage_RightVRCompositorTextureUsage_BothrG  VRCompositorTimingMode_ImplicitAVRCompositorTimingMode_Explicit_RuntimePerformsPostPresentHandoffEVRCompositorTimingMode_Explicit_ApplicationPerformsPostPresentHandoffr  HeadsetViewMode_LeftHeadsetViewMode_RightHeadsetViewMode_Bothr  EVRNotificationType_TransientEVRNotificationType_Persistent1EVRNotificationType_Transient_SystemWithUserValuer  EVRNotificationStyle_None EVRNotificationStyle_Application%EVRNotificationStyle_Contact_Disabled$EVRNotificationStyle_Contact_Enabled#EVRNotificationStyle_Contact_Activer  VROverlayInputMethod_NoneVROverlayInputMethod_Mouser  VROverlayTransform_InvalidVROverlayTransform_Absolute(VROverlayTransform_TrackedDeviceRelative#VROverlayTransform_TrackedComponentVROverlayTransform_CursorVROverlayTransform_DashboardTab!VROverlayTransform_DashboardThumbVROverlayTransform_MountableVROverlayTransform_ProjectionVROverlayTransform_Subviewr  VROverlayFlags_NoDashboardTab)VROverlayFlags_SendVRDiscreteScrollEvents#VROverlayFlags_SendVRTouchpadEvents&VROverlayFlags_ShowTouchPadScrollWheel1VROverlayFlags_TransferOwnershipToInternalProcess"VROverlayFlags_SideBySide_Parallel!VROverlayFlags_SideBySide_CrossedVROverlayFlags_PanoramaVROverlayFlags_StereoPanorama'VROverlayFlags_SortWithNonSceneOverlays!VROverlayFlags_VisibleInDashboard/VROverlayFlags_MakeOverlaysInteractiveIfVisible'VROverlayFlags_SendVRSmoothScrollEventsVROverlayFlags_ProtectedContent$VROverlayFlags_HideLaserIntersection!VROverlayFlags_WantsModalBehaviorVROverlayFlags_IsPremultiplied!VROverlayFlags_IgnoreTextureAlphaVROverlayFlags_EnableControlBar'VROverlayFlags_EnableControlBarKeyboard$VROverlayFlags_EnableControlBarClose VROverlayFlags_MinimalControlBar'VROverlayFlags_EnableClickStabilizationVROverlayFlags_MultiCursorr  &VRMessageOverlayResponse_ButtonPress_0&VRMessageOverlayResponse_ButtonPress_1&VRMessageOverlayResponse_ButtonPress_2&VRMessageOverlayResponse_ButtonPress_31VRMessageOverlayResponse_CouldntFindSystemOverlay9VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay(VRMessageOverlayResponse_ApplicationQuitr  k_EGamepadTextInputModeNormalk_EGamepadTextInputModePasswordk_EGamepadTextInputModeSubmitr  %k_EGamepadTextInputLineModeSingleLine(k_EGamepadTextInputLineModeMultipleLinesr  *OverlayIntersectionPrimitiveType_Rectangle'OverlayIntersectionPrimitiveType_CircleEKeyboardFlagsKeyboardFlag_MinimalKeyboardFlag_ModalKeyboardFlag_ShowArrowKeysKeyboardFlag_HideDoneKeyr  DeviceType_InvalidDeviceType_DirectX11DeviceType_Vulkanr	  VRRenderModelError_NoneVRRenderModelError_LoadingVRRenderModelError_NotSupportedVRRenderModelError_InvalidArgVRRenderModelError_InvalidModelVRRenderModelError_NoShapes!VRRenderModelError_MultipleShapes"VRRenderModelError_TooManyVertices#VRRenderModelError_MultipleTextures!VRRenderModelError_BufferTooSmall#VRRenderModelError_NotEnoughNormals%VRRenderModelError_NotEnoughTexCoords!VRRenderModelError_InvalidTexturer  %VRRenderModelTextureFormat_RGBA8_SRGBVRRenderModelTextureFormat_BC2VRRenderModelTextureFormat_BC4VRRenderModelTextureFormat_BC7#VRRenderModelTextureFormat_BC7_SRGB'VRRenderModelTextureFormat_RGBA16_FLOATr2
  VRScreenshotError_NoneVRScreenshotError_RequestFailed%VRScreenshotError_IncompatibleVersionVRScreenshotError_NotFound VRScreenshotError_BufferTooSmall-VRScreenshotError_ScreenshotAlreadyInProgressr
  VRSkeletalTransformSpace_ModelVRSkeletalTransformSpace_Parentr
   VRSkeletalReferencePose_BindPose VRSkeletalReferencePose_OpenHandVRSkeletalReferencePose_Fist!VRSkeletalReferencePose_GripLimit	EVRFingerVRFinger_ThumbVRFinger_IndexVRFinger_MiddleVRFinger_RingVRFinger_PinkyVRFinger_CountEVRFingerSplayVRFingerSplay_Thumb_IndexVRFingerSplay_Index_MiddleVRFingerSplay_Middle_RingVRFingerSplay_Ring_PinkyVRFingerSplay_Countr
  VRSummaryType_FromAnimationVRSummaryType_FromDeviceEVRInputFilterCancelTypeVRInputFilterCancel_TimersVRInputFilterCancel_MomentumEVRInputStringBitsVRInputString_HandVRInputString_ControllerTypeVRInputString_InputSourceVRInputString_Allr+  IOBuffer_SuccessIOBuffer_OperationFailedIOBuffer_InvalidHandleIOBuffer_InvalidArgumentIOBuffer_PathExistsIOBuffer_PathDoesNotExistIOBuffer_Permissionr,  IOBufferMode_ReadIOBufferMode_WriteIOBufferMode_Createre  VRDebugError_SuccessVRDebugError_BadParameterc_ubyterG  r  r}  vrshared_uint64_tr$  r  r  rF  ro  glInt_trE  r  rj
  rP  r  r  rk
  r
  r3  r  VRInputComponentHandle_trV  r  r
  r	  r3
  r  r  r-  rf  HmdErrorHmd_Eye
ColorSpaceHmdTrackingResultTrackedDeviceClassTrackingUniverseOriginTrackedDevicePropertyrz  VRSubmitFlags_t	VRState_tCollisionBoundsStyle_tVROverlayErrorVRFirmwareErrorVRCompositorErrorVRScreenshotsErrorobjectr  r  r  r  r  r  r   r"  r&  r(  r.  r1  r7  r:  r>  rA  rI  rN  rV  r\  r_  rc  rh  rj  rq  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#  r'  r*  Unionr-  rK  rR  rX  r\  r^  rd  rn  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r!  r#  r&  r-  r5  r9  r<  rW  r  r`  rd  ri  rn  rr  rv  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r_  r  r  rT  r  r  rc  r  rh  r  rm  r  rz  r  r  r+  rq  rs	  ru  r	  r  r	  r  r	  r  r*
  r  rU
  r~  re
  r  r{
  r  r$  r  rG  r  r`  r  ry  r  r  r  r  r  restypeargtypesr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rX  r  r  r  r  r   r   r   <module>r     sG            )Y  
(qX__.2EE&! 
(qI%-		g	%0		h	&3FIZZ[[I%-		g	%0		h	&3FIZZ[[""$ !! "s 3 3  %X/?@ 
++
!
!"2
3 ??	!)'!	 		 		9 			 	
	Y 		 	     !&   (  *                       !#  #%   !# #'  !& #    "#     &' # &* #&* #!% "& " ! */ '+0 (/4 ,# ! " . /  ' ! ". '5 $$/ !"0 (: %$3 !$3 !/J ,)  ". 1N .-E *+A (!, %4 ")< &* ,D )-F *#2  6W 31M .8[ 5(< %'9 $/I ,%6 ".G +'9 $0K -!- ) $3 !$3 !$3 !%5 ")> &.< +,D )(4 %*@ '*: ',C )$3 !*> '3P 0)8 &*E '2P /1N .3R 0- 2O / ,  + /J ,/J ,,D ),D )An >"5  1 /O ,/ %; ""5 &= #+A (+A (+A ('8 $*> '-D *-F *%= "8\ 51N .-H *,E )( 4T 1,D ) 2P /( ' & !* !* . #/  ,A ),? )-B *,@ )"- (9 %3M 04O 1:\ 7*= '" !/  - $ $ ,  . ,  . -H *$6 !. - -@ **: '9X 6'4 $)9 &.F +); &- (6 %# %: "    * , " &   !1 #5  $7 !* - #5   1 $: !/Q ,,K ))E &+H ()D &*F '*F '*F '*F '+E ( !/ %7 "3S 0( '@ $'@ $'@ $'@ $$: !#2   .J +0N -,D )0L -/L ,1P .-F *1N .(> %*@ '.H +-E *(D %9` 6-F *) ,F )"2  "2 *A '.I +,E )-M *,F )% '8 $". % - !1 +B (*> '(: %4R 1+E ()A && # &< #"0 :` 70M -+ ) ): &'5 $!4 ,9 )*3 '0? -*3 '+7 (,9 ),B )-  0 # % % ): &", ): &): &+; ("5  +C (,E )'; $# #;  ) 3 +   1 - ! 1     02 -% - %. ""( !& (4 %&0 #)6 &.@ +$, ! / 5 1 - ) 1     '1 $'1 $", !  ' !" 3 ! &G # 		1A	%b) %a( $Q' $Q' '* '* .q1 #A& &q) "1!"4 !!$"1% #A& .q1 (7(< %(7(< %+C0 $3C$8 !'6s'; $ ,Q/ (+  / 2 $3A$6 !'6q'9 $%4Q%7 "(+ "  / 2 !0!3 "1!"4 .q1 "1!"4 .q1 +A. # (+ *1- %4Q%7 "$ .q1 %4Q%7 ")8); &)8); &" q!!0!6 )$/ *40 -d3 *40 .t4 &5d&; #.t4 ,;D,A )&5d&; #,T2 ,T2 %4T%: "'6t'< $%4T%: ""1$"7 '6t'< $.t4 -d3 )$/ (. *40 +D1  / 5 ,;D,A )$3D$9 !(7(= %-d3 )8)> &(. %d+ +D1 )8)> &(7(= %*40 *40 #24#8  .t4 (. '- .t4  / 5 +:4+@ ((.  / 5 )8)> &'6t'< $"1$"7 +:4+@ ('6t'< $#24#8  )8)> &-d3 #24#8  '6t'< $-d3 &5d&; #"1$"7 $T* "1$"7 '6t'< $-d3 *40  / 5 !0!6 %4T%: "'- *40 ,T2 +D1 )$/ !0!6 "1$"7 !0!6 *40 &5d&; #*40 ,T2 +D1 .t4 ,T2 ,T2 ,T2 -d3 -d3 &5d&; #$3D$9 !(7(= %!0!6 '6t'< $%4T%: "#24#8  %4T%: "4CD4I 12A$2G /-d3 "1$"7 !0!6 "1$"7 '6t'< $!0!6 (7(= %-<T-B *,T2 "1$"7 *9$*? ',;D,A )%4T%: "3B43H 04CD4I 16Ed6K 3!0!6 -<T-B *&5d&; #'6t'< $+:4+@ (+:4+@ ("1$"7 )8)> &)8)> &#24#8  "1$"7 #24#8  +:4+@ (,;D,A )6Ed6K 3&5d&; #(7(= %,;D,A )0?0E -%4T%: "-d3 .=d.C +/>t/D ,-<T-B *,;D,A ).=d.C +.=d.C +$3D$9 !%4T%: "2A$2G /&5d&; #"1$"7 "1$"7  / 5 -d3 +D1 -d3 ,;D,A )*9$*? '(7(= %"1$"7 $3D$9 !!0!6 !0!6 +:4+@ (&5d&; #0?0E -'6t'< $&5d&; #)8)> &%4T%: "$T* $T* $T* *9$*? '+:4+@ (*9$*? '-<T-B *$T* />t/D ,2A$2G /3B43H 01@1F .4CD4I 12A$2G /3B43H 01@1F .4CD4I 1,;D,A )-<T-B */>t/D ,3B43H 05DT5J 2(7(= %%4T%: "6Ed6K 3)8)> &&5d&; #(7(= %)8)> &.t4 .t4 &t, &t, &t, &t, &t,  / 5 $3D$9 !%4T%: "#24#8  &5d&; #(7(= %(7(= %'-  / 5 "4( *40 %4T%: "+:4+@ (0?0E -'6t'< $,;D,A )*9$*? ')8)> &*9$*? '.=d.C +&5d&; #$3D$9 !&t,  / 5 ,T2 )$/  / 5 #24#8  .t4 )8)> &'6t'< $%4T%: ""1$"7 )8)> &*40 "1$"7 ,T2 -<T-B *%4U%; "#25#9  %e, %e, %e, %e, %e, !0!9 ! %a( +A. .q1 ,Q/ -a0 +A. $3A$6 !'6q'9 $)8); &-a0 .r2 .r2 %4R%8 ",R0 )"- .r2  *1- -a0 $3A$6 !$3A$6 ! #&5a&8 #'* !!$(+ )"- +B/ $3B$7 !', s#"5) "5) "6* "6* #B' a #A& )!, "%a( "1% !!$)!, q!!0!5 #23#7  .s3 .=c.B +,;C,@ )$S) *3/ *3/ #23#7  "1#"6  / 4 )#. ,S1 +C0 ', ', %c* ', %c* ', &s+ #C( )#. ', $S) $S) (- &s+ -c2 (- &s+ +C0 -c2 ,S1 ,S1 "1#"6 +C0 4CC4H 1 / 4 *3/ *3/ '6s'; $#23#7  ', ', &s+ ', ,S1 .s3 (- %c* &s+ &s+ $3C$8 !"1#"6 &5c&: #-c2 %c* "1#"6 ,S1 +C0 )#. *3/ &5c&: #(7(< %(7(< %', (-  %&s+ -c2 *3/ (- &s+ ',  / 4  / 4 .s3 )8)= &(- *3/ #23#7  #23#7  #23#7  ', ', ', ', ,S1 -c2 (7(< %!0!5 s#%c* *3/ -c2 *3/ $3C$8 !'6s'; $"1#"6 &5c&: #&5c&: #'6s'; $-c2 -c2 %4S%9 "&5c&: # / 4 ', ', ', #23#7  &5c&: #$3C$8 !(7(< %'6s'; $)8)= &#23#7  +:3+? ('6s'; $*9#*> '$3C$8 !-<S-A *-<S-A *(7(< %$3C$8 !)8)= &,;C,@ )(7(< %)8)= &1@1E .(7(< %)8)= &%4S%9 "#23#7  &s+ .=c.B +(.  / 5 !0!6 (. +D1 &t,  / 5  / 5 !0!6 "1$"7 *40 -d3 *9$*? '+:4+@ ()8)> &(7(= %.t4 .=d.C +(7(= %&5d&; #-<T-B *(7(= %0?0E -)8)> &(7(= %)8)> &*9$*? ''6t'< $(7(= %)8)> &(7(= % / 5 '6t'< $ / 5 "1$"7 &5d&; #'6t'< $)8)> &.t4 !0!6  / 5 +:4+@ (%4T%: "+:4+@ (+:4+@ (1@1F ..t4 "1$"7 "1$"7 "1$"7  / 5 $3D$9 !"1$"7 #24#8  (7(> %&5e&< #  !0!4 -a0 )8); &1@1C .!0!3 &5a&8 #"1% +A.  #%a( #A& &q) %a( a +B/ !"%!"%!"%!"%!"%,R0 +B/ *1- -a0 -a0 %4R%8 "%b) %b) #$Q' %a( &q) *1- '*  #!!$&q) .q1 &q) 
 #$Q' $Q' )!, #A&   .q1  / 2  / 2  / 2 !0!4 $3B$7 !#A& +A. (+ ,Q/ +A. &q) "1!"4 '* !0!3 ,Q/ .r2  / 3 %4R%8 "%b) -b1 (7(; %#22#6   / 3 .r2  / 3 "1""5 ! .q1  / 2 %4Q%7 "%4Q%7 "-<Q-? *'6q'9 $2A!2D /.=a.@ +#21#5  )8); &.r2 )8)< &'6r': $%4R%8 " ,Q/ +A. ,Q/ '* ! (+ ,Q/ ,Q/ +A. ( !0!3 !0!3 ! "1!"4 &5a&8 #!0!3 "1!"4 -a0 .q1 %a(  / 3 .r2 "1""5 &5b&9 #%4R%8 "+B/ ,R0 )"- $3B$7 !&5b&9 #"1""5 *9"*= '.r2 .r2  / 3 "1""5 &5b&9 #+B/ '6r': $"1""5 &5b&9 #,;B,? )"1""5 )"-  %a( %a( '* *1- '* )!, -a0 ,Q/ )!, .q1 +B/ -b1 %b) (, #B'  &q) )!, &q)   (+ ,;C,@ ),;C,@ )+:3+? (7Fs7K 4)8)= &" '6q'9 $*9!*< '$ .q1 ,Q/ )!,  / 2 -a0 "1% %a( (7(< %'6s'; $'6s'; $ / 4 #23#7  %4S%9 "$3C$8 !.=c.B +.s3 "1#"6 (7(< % / 4 ,S1 +:3+? (%4S%9 "(- &5c&: #'6s'; $&5c&: # / 4 "1#"6 ,;C,@ ).=c.B +-<S-A *+C0 %4S%9 "-<S-A *%4S%9 "*9#*> '0?0D -*9#*> '.=c.B +.=c.B +'6s'; $,;C,@ )"1#"6 '6s'; $!0!5 &5c&: #(7(< %"1#"6 ,;C,@ ),;C,@ )"1#"6 &5c&: #-<S-A *#23#7  )8)= &&5c&: #$3C$8 !*9#*> '(7(< %(7(< %&5c&: #)8)= &*9#*> '+:3+? (*3/ +:3+? ()8)= &-<S-A *-<S-A *-<S-A *-<S-A *)8)= &+:3+? (1@1E .*9#*> '+C0 ,S1  / 4 .s3 &5c&: #-c2 #23#7  (7(< %(7(< %3B33G 0,;C,@ )(7(< %.=c.B +,;C,@ )-<S-A *#23#7   / 4 (7(< %'6s'; $"1#"6 (- *9#*> '3B33G 05DS5I 21@1E .'6s'; $ / 4 />s/C ,0?0D -+:3+? (/>s/C ,.=c.B ++:3+? (3B33G 05DS5I 2>Mc>R ;3B33G 06Ec6J 31@1E .,;C,@ )0?0D -1@1E .6Ec6J 34CC4H 11@1E .0?0D -/>s/C ,.=c.B +.=c.B +/>s/C ,;J3;O 81@1E .1@1E ./>s/C ,4CC4H 16Ec6J 34CC4H 19H9M 68G8L 5+:3+? (:I#:N 7-<S-A *9H9M 65DS5I 20?0D -/>s/C ,8G8L 5,;C,@ )9H9M 61@1E .3B33G 04CC4H 10?0D -,;C,@ )*9#*> '/>s/C ,/>s/C ,/>s/C ,/>s/C ,1@1E .8G8L 58G8L 5,;C,@ )2A#2F /.=c.B +5DS5I 2<KC<P 9=LS=Q :5DS5I 2?Ns?S <GVWZG[ DGVWZG[ DFUVYFZ CKZ[^K_ H<KC<P 92A#2F /7Fs7K 4+:3+? (2A#2F /5DS5I 2<KC<P 9?Ns?S <=LS=Q :3B33G 02A#2F /2A#2F /3B33G 00?0D -/>s/C ,.=c.B +6Ec6J 3-<S-A *@OPS@T =1@1E .2A#2F /9H9M 6/>s/C ,/>s/C ,3B33G 02A#2F /1@1E ./>s/C ,/>s/C ,6Ec6J 3+:3+? (3B33G 0+:3+? (<KD<Q 91@1F .2A$2G /5DT5J 2APQUAV >5DT5J 23B43H 05DT5J 27Ft7L 4>Md>S ;@OPT@U =?Nt?T <>Md>S ;;J4;P 84CD4I 1>Md>S ;5DT5J 2@OPT@U =.=d.C +'-  '* '* )!, *1-  / 2 "1!"4 !* (7(: %#21#5  ! +A. '6s'; $%4S%9 "1@1E .$3C$8 !"1#"6 1@1E .+:3+? (-<S-A **9#*> '*9#*> '2A#2F /.=c.B +,;C,@ )(7(< %'6s'; $.=c.B +' #21#5  %4Q%7 "-<R-@ */>r/B ,% %4Q%7 "'6q'9 $.=a.@ +(+ %  / 2 "1!"4 +:1+= ( / 2 	Q
"1% $Q' !  / 2 %4Q%7 " !!$!!$!!$ # $ $ )!, )8)= & / 4 #23#7  "1#"6 (7(< %.s3 />s/C ,%4S%9 "(7(< %"1#"6 0?0D -&5c&: #,;C,@ )'6s'; $ / 4 &5c&: #$3C$8 !$3C$8 !%4S%9 "&5c&: #$3C$8 !" $3A$6 !*9"*= '0?0C -*9"*= ')8)< &#22#6  +:2+> ('6r': $)8)< &0?0C -&5b&9 #1@1D .0?0C -(7(; %)8)< &(7(; %;J2;N 8&5b&9 #.=b.A +$  / 2 $3A$6 !$3A$6 !#21#5  #21#5   &q) +A. -a0 ,Q/ "1!"4 +:1+= (.q1 % .q1 $3C$8 !<KC<P 97Fs7K 48G8L 5"1#"6 ;J3;O 86Ec6J 32A#2F /9H9M 6  +A. +A. ! -a0  (+ "1!"4 (7(< %#23#7  #23#7  *9#*> '+:3+? (1@1E ./>s/C ,$3C$8 !%4S%9 ""1#"6 .s3 %  / 2 !0!3  / 2 # "1!"4 DSTUDV AHWXYHZ E &q) '* &q)   / 2 !0!3 4CA4F 1  +A. #23#7  (7(< %'6s'; $&5c&: #  +A. ,Q/ " ,R0 -a0 +:1+= (&5a&8 #+A. "1!"4 $3A$6 !.q1  / 2 ,Q/  / 2 ,;B,? )&5c&: #)8)= &4CC4H 1%4T%: "$3D$9 !)$/  / 5 *9%*@ '$3E$: !2A%2H /*9&*A '"1&"9 '6v'> $$3G$< !!0!9 $3G$< !"1'": *9(*C ''6x'@ $#28#<  *9)*D ',Y7 $ )8); &)8); &)8); &)8); &4CA4F 1<KA<N 9+:1+= (!  / 2 "1!"4  / 2 % (7(: %+:1+= (*3 '-<Q-? **9!*< '&q) $Q' ,Q/ *1- $R( &q) #A&  )!, ,S1 "1#"6  / 4 "1#"6 -c2 $3C$8 !%4S%9 "&5c&: #$3C$8 !&5c&: #(7(< %$3C$8 !' (7(: %!0!3 !0!3 !0!3 &5a&8 #*9!*< ' (+ "1!"4 (7(< %,S1 #23#7  0?0D -% !0!3 "1!"4 $ #21#5  #21#5  .q1 $3A$6 !	 # #!!$" # #+A. ,Q/ +A. *1- %a( -a0 *1- $ ,Q/ .q1  $Q' .q1 +A. #B' "1% *3/ (- *3/ %c* +C0 %c* #A& $Q' %c* &q) +A.      " 
  
  $  *   #         " 

# ( 0 . ,  	.  "& ' 6 .0< 0L) L) L) < < L) < i y  	  	 ) i 	 	 ) 9 9 "5 I   
) 
I *
!6 

 
9 i 	y 	Y "Y 	 	 y  I ) 
 
	 I 9 9 ) Y y  	 9  	 i y y Y ) 9  !U !H! 9 y   + 	Y 	$Y $N) 9 ") 	  @
Y 
9 I Y ) y  9 I i y y 9 0 %  i y I 	 	  ) i ) q2V q2j 	)+ /27304424581566.17.6;1	 1hF& F&R i  FCf CL
)  @G& @GF9 ^#6 ^#B	 2x xv7I 7tEF EPY E,V E,Py  Ev  EFT Tn\ \~Y @V @Fi 0r&f r&j .< .<by &Dv DN	Y 	cCV cCL9 %76 %7Py "v "J"y "JF9v F9R) 9& 9x	 I: I:Xy <;v <;~) s#& s#t  #.   #%     )4   %)+   & %0   !&.'(:K%L   "	3 -5 ! ! ).:^ ! ! *" 9A - - 5:F - - 6" *2   &+3W\5J*K   '#  .9 " " */7j " " +c  #+   #%     $,    %,\%:<NPX$Y   !  '+   #')   $	 	r   