From 62c7d1e936d35819b7ab37872696355cbeb00a25 Mon Sep 17 00:00:00 2001 From: Vixea Date: Tue, 26 Mar 2024 21:05:38 -0500 Subject: [PATCH] download openvr sdk --- .github/workflows/rust.yml | 7 +- Cargo.lock | 1 + alvr/server/build.rs | 17 +- alvr/server/cpp/bin/.gitignore | 1 - alvr/server/cpp/bin/windows/openvr_api.dll | Bin 819664 -> 0 bytes .../server/cpp/bin/windows/vcruntime140_1.dll | Bin 36728 -> 0 bytes alvr/server/cpp/openvr/headers/openvr.h | 5624 ----------------- .../server/cpp/openvr/headers/openvr_driver.h | 4212 ------------ alvr/server/cpp/openvr/lib/libopenvr_api.a | Bin 1712110 -> 0 bytes alvr/server/cpp/openvr/lib/openvr_api.lib | Bin 6666 -> 0 bytes alvr/session/Cargo.toml | 2 + alvr/session/build.rs | 13 +- alvr/xtask/src/build.rs | 2 +- alvr/xtask/src/dependencies.rs | 25 +- 14 files changed, 57 insertions(+), 9847 deletions(-) delete mode 100644 alvr/server/cpp/bin/.gitignore delete mode 100644 alvr/server/cpp/bin/windows/openvr_api.dll delete mode 100644 alvr/server/cpp/bin/windows/vcruntime140_1.dll delete mode 100644 alvr/server/cpp/openvr/headers/openvr.h delete mode 100644 alvr/server/cpp/openvr/headers/openvr_driver.h delete mode 100644 alvr/server/cpp/openvr/lib/libopenvr_api.a delete mode 100644 alvr/server/cpp/openvr/lib/openvr_api.lib diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 34244921ed..43170c1fdd 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -24,6 +24,9 @@ jobs: components: clippy - uses: Swatinem/rust-cache@v1 + - run: | + cargo xtask prepare-deps --platform windows + - uses: ErichDonGubler/clippy-check@fix-windows-lf-breaking-reports with: token: ${{ secrets.GITHUB_TOKEN }} @@ -124,7 +127,9 @@ jobs: override: true - uses: Swatinem/rust-cache@v1 - - run: sudo apt update && sudo apt install libgtk-3-dev + - run: | + sudo apt update && sudo apt install libgtk-3-dev + cargo xtask prepare-deps --platform linux - name: Run tests uses: actions-rs/cargo@v1 diff --git a/Cargo.lock b/Cargo.lock index 8550173881..7ee3e76dc7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -401,6 +401,7 @@ name = "alvr_session" version = "21.0.0-dev00" dependencies = [ "alvr_common", + "alvr_filesystem", "bytemuck", "regex", "serde", diff --git a/alvr/server/build.rs b/alvr/server/build.rs index bd69048b2f..b0d9ce4385 100644 --- a/alvr/server/build.rs +++ b/alvr/server/build.rs @@ -16,6 +16,17 @@ fn get_ffmpeg_path() -> PathBuf { } } +fn get_openvr_path() -> PathBuf { + let openvr_path = alvr_filesystem::deps_dir() + .join(if cfg!(target_os = "linux") { + "linux" + } else { + "windows" + }) + .join("openvr"); + openvr_path +} + #[cfg(all(target_os = "linux", feature = "gpl"))] fn get_linux_x264_path() -> PathBuf { alvr_filesystem::deps_dir().join("linux/x264/alvr_build") @@ -24,7 +35,7 @@ fn get_linux_x264_path() -> PathBuf { fn main() { let platform_name = env::var("CARGO_CFG_TARGET_OS").unwrap(); let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap()); - let cpp_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join("cpp"); + let _cpp_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()).join("cpp"); let platform_subpath = match platform_name.as_str() { "windows" => "cpp/platform/win32", @@ -65,7 +76,7 @@ fn main() { .files(source_files_paths) .flag_if_supported("-isystemcpp/openvr/headers") // silences many warnings from openvr headers .flag_if_supported("-std=c++17") - .include("cpp/openvr/headers") + .include(get_openvr_path().join("headers")) .include("cpp"); if platform_name == "windows" { @@ -183,7 +194,7 @@ fn main() { if platform_name != "macos" { println!( "cargo:rustc-link-search=native={}", - cpp_dir.join("openvr/lib").to_string_lossy() + get_openvr_path().join("lib/win64").to_string_lossy() ); println!("cargo:rustc-link-lib=openvr_api"); } diff --git a/alvr/server/cpp/bin/.gitignore b/alvr/server/cpp/bin/.gitignore deleted file mode 100644 index 57c99937e4..0000000000 --- a/alvr/server/cpp/bin/.gitignore +++ /dev/null @@ -1 +0,0 @@ -!*.dll \ No newline at end of file diff --git a/alvr/server/cpp/bin/windows/openvr_api.dll b/alvr/server/cpp/bin/windows/openvr_api.dll deleted file mode 100644 index e0113cd3897e49f9bf11fe7c005e5d1e09ea7a66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 819664 zcmd?S3w%_?`S`uLk>wJ0L6M*+QKLlTB@l(+g6@(8&cdz)1;i>BMG+O-2w6bo5=fA2 zkE>WOwXJQn`u}OQty)`ewVDt}!bNUYfue#}PFydbRsst9exI4Mn-h$d_I-cv=ly)% zd@?(8&Y3gw%rnnC^E~rBGbj9`m97kz%aut;BwVf+h~>|(et-BUH_hdm6q@8Ba=EVV z;Tr$btEc5IZ23`LU*Gk+#`c{#;TK;GS@zWOtH0U%o8P@O_4Dj*H@!1yY3~(3TXXhF zk%6z}l#ck*S9kvS`h)96oi=*WXkK&AzixluD=hQ2w#W&I5#d{Isap7_-v(wb@9~?* z#=L)DV8wl7Vh{f4;SYbi?X6);BXf)IedBQHZw4=!6})=H-Dgi+{_)hkUre9+!w?_+ z(~5GJ>zdoUs5T|v+Uq(cuX}pWo-V`fa$O)8bGcSOLhHRMS*`FO>2#N?i@MbwyPoc$ zko@A$d+>OA>LvSKa_d5pk-V<%9O~xUO?kT$-CV=v=I-vUygw3Gc6WU+lNh{j9zeXZ zhs!w5<(ht|t7`(6NB-3x?&>PwWVdy1R^M))zyF%&a(s#?>eK>QjC7k-plauXgLJclFgj_0>*&^$&gZhQ8XU zuQutc7Jao=U#-$tjr!_kef4*J^_;$XUSB<}ub$CYPw1;B_0^+XHEwACqXoa$Peu+^ z?YT!^4cAxq>8m07>Mng%q_3j->P&rAqp$My)gpa$lD?X+uX6R(&HAdhzPeFg_0U(> z>Z>mLYMQ=s>8s22)j{2!OZC-PN4BTtlY*DhVHZX$NAPYv^-!9mKPYv(jGEO2t<86) zx!Rk*f%c!FOL}j(V20}*B`~R@5__#u{p{1OzBYHE_q>VmTG@#C-s?GSsn5Zl>EQb`Qw8+ zYk$Z5*QxgZQ2swkDXIS0GoJEC>iqX~TK@86e#6Y^_f0of@m8z1&VS<(`J-3n=T0(eg7;ezL9oOI@zo`bf9G{h0DvhcetGr&W23eft`@oyTpd>th;Y#QOY}DDZ-a zesxoRPWGQmQIAnEPfu*OwvSzuku0@-?QjigSIo~a8)l(XNp5B^pf|T1PeV!GYJTp!g z^?9HIOqrXk0(r&*k6hfw#ot62i4O)r*F~pX2Zdiq&ctR$>wPvIsH_!|^?J#gZA3@R zkw@mlO@?XLoW$nyM}tj2uv!_kK+raj>ZH4xo64V;GCxoC%(kN`>nlLAp0Cwq?Hs4e z+S63NP0I45%G!T4Wj!us-AGxydal4`QeKiqvsGDVLot0jmer>dikUy%I#ri5PRc1& z<@8nU9GEI+=uwoDYwfH_bD52X`Cz_Rx_Ieo8D~=(t!F>TaBZ;usD2-lUz?xCa@H`> zSQGB=FqI0s-5}%7YeZ+~=T5pTaG9QauFnmcdqd_yW}%R8&HR%M^MFxv$U7&)Fozk@ zo4rCNWq;0aHDwNUwOUkdyqeH|OAOzB&x(C=%iL(xto0baP4fpB<{O6DY;5`1C|qUu ztoc2SSmv2hsISHFjBGPvqtimss(imOLJhZbjF>UdXkH~nsw|_{S$|wc4=k_u)ZRte zp;+a>V9iIngV9lK@jl$H$}!9qD@vY_xi_9sUi@{)Y%-#Ay+L!E5xtG(Y_#rqCc_nI z${fNFp(*rPcgQ;}ImB~AWy(sQ;xDpr9xcD5g1PY%}X1x!Z4q z%(sHkE8IblAy8Em*PCAiqOKsUz}yjxmRiB)(!Cz44#viA=X!H_aXmb#t}MT(cq`W} z)~ySLvsINEu~2@I^=*#2I^QhI_nU7f>Z94lFfcPGyD7uCIle3&8+(+BS~%n5=y`0P1`NqI*_?w?dkd#mzid7e{^o=&4HrZrlt-&G{8=s5YK z4XNA{1(gU zBd;9W{z{H|C1(=1^^8vkbQi!X@;uLNk6&c1-Yt8t;8^Y^frqYYXidWrqTTZL;{ zW9AFCBjxR^P9fz8R@b>q`Gg?l&~0fhDul;f0l^8=T>(d+1OLdh<4-giOBd$*WsPc1 z*QTr!XqYR0ii7RGB#$7}be`D!cmFi*z_H=HZQeQOYR((0fU;9EZl@B0FCGlKoxkv|>| zvLAY_{fNpu>u*1^=I^8Gtdr$=Ea#=uDf;b|s_5=!i;V5oKiwl^O9r`c7qsKq`FXZH z!!$GpiKW#r#~=r651W3j8jQjw!#o)B)q8ILQq^9X8!W6hd`+HZ@5^<~0VVESP+p7( zve&a>IX8o`%%V{A8b*vL;WfAAdPQoP95TP0lMynD5o#_B`kLmQFgBLi#qhPw?;Y~( zpPv;r_r$x0&5uHbd*WpKD43`Z#(E41nr~XJ-)FeO=4z&T5m3H(JOh5+6pS5vUbt}e z*jSI#jf`#9Tk5W=hMMCii#}eJUr^?Gj>JO65e#AR>#cNj0H&@`bP;eZ%Jq0NJiW?Y z9`9JMr&pL;w|R}`(p(|ovN~V8HO(?G~XRQ#Jrar`Y|iVK^qLBabz!?((_>>?3e>8J|B zygoN1Z3)MQ9~U$?X}NK|EjKoPM{eAqs}xO7%Os*8j9H?42}$63;+T}(D$z4UDo^MJ^RFNnaszS}$*JABO%*Cj}-cLB2EmA8_D*Mo0Wp zQ8<E zmQoTJ&gfau06b|2QLa&QYcA;N21}&;yavHvMhG$fZbzMY|+#*CDW+8)du$ysUw8e9by1B&x_Pdvb%&79E2-xDKJ%=2Pi~p7X|mloe*mnNp`+PG$hUWX&oQw~reL^^sGEC@ z*r>E0AlA|A)=8&1^@Q8I&$F6mUsJX@5^ zZc<>>Cm1yZ&oa>qqALWwLP(%^@Lr*#&Hrd0>mtu8d@E8audNR-E4+H8LdOnId7E|D zA^Kh>D$1ObWtbT=SK61a3+F$Ek>E8lw!n_7`gopmS06aHDy#aym5~g8U5SyXk8ibM zfd-RWra!f|C-SRdZeg)$k99f~h0HMGLHVALS-vO8{24MQ?hkrO>pcVfu9-7E18T|7 zB+3(cg(oe+jCF>uq3UF3)t)BTl~R(tEhPyU>qT6Ch?m35w??uD?`%CA)};%gDypE} zq4Y!w{99G^u_=25oUo^qnIgO=obgY&E!m9(Rj*P7n41Lex7D-k6v_=1s_a2? z6{{6NUt`EKa=ZOvOStg$P;}ycBV%2ta4S5fUpO{0%^LQwOxyypZaB<_n#0+YyxDqi z7+9)VG{7x)crs8Hy{tLE zzmVf?lx9oEf_9{1>1-C5F4+q8SuKczLVNOOk9Vb?F8!pMY~{6U>5qn2gbvYFJ>`29 zZygCi)H8x2tkrC@{&g^sXhjC6X=4}`>$JcXGP{keUg%C-S#|7p?wuRS2qs!YPv|<_ z?F#zpm4IJF_lUNX2a>hOrgWY>EC16(0wJkM1nB86QIX5K>Kh@_deNxz#g-a(Pb@=vOc~*m6fN4~#QKZ{WX1)ztfDO$NTDCFju$Y$4aBa@PZO>? zw|J{ah||kakJF`tZeltWp*eyE!jg$G!(z3H>xtZFF0i_4aYEibE^KZr6Q0ToDrqOyC%`kKd6b$YrA>fcce-`O$B9IIwlBW; ztXO#h$-~_2c`kF<@NSWu>V=*}PNYj+*?>g6OI_vw1Jy8rf#Tz|$Xim^yCq@>fzDY@ zEUUXlW|VEJ)(Wc&g$e?Gb`t~Li|*?2vJ&9w)y326Vg`WjE}2AYR?iAtIZecv%QmX6 zZ=Y`rllC59-INzzN2{?0Jt(-pELX_vhh$&`Xe9&pp>mn&ij3ybS~5_xjP>bj4kAmg z*Nhh_LDBMAhS}9wMQ1CwCkq$*>ukzzE=8Aw$ZXYzRZ5x5XwM2=i@jd;#!%MBCok!2 zecWDpD-!9%+{?l~jBGUHpd+0~UR18XgZ%GVuirtQvN zJb>+hBy07P#hw7->M1l1SAO049k1C7_Z1?e8%hOE%B%q)Y6EF=?kB3Uk5baCJZbHN zKx5T^Bof!u^$v2}fYE;K*$$(*J;IdLqu^nG($208sHaot@j-R#T*X{UyJO0v+Gnl)i zykqS6R68!U;~VX`#*QDccr z?6}d6-?!roBu&X*XvZ_`_(?mC+wln(s&;IK);)JUqS|qvYR9vPV>N9#o)vd;X*@tn zD%L^AW^MJOG$WW%pV&?DJ>+%bkR4aq@q>2!vK@b7$2~66`OmWB33j~Djvuw-4R-vM z9ryR^_sS$T*R?*1+hS5Lxmgp&xT6V4$FAzVlpMYxzSi7=Hglkj80Ji=na z?SwlC_Y;0Y_#eWb2+t8-Av6&-65b@dL->gB8R2WfVM3SlsGo2g;UvQ8gmVZ(2p1AY z5iTZ7B1|RBB>b2#kFc0%&aci?ylXs_sHq# z@%HL{%&~or>zmu}_!Ih{c+!BplTSG{|FqKw7M$^a1C%oh&pP{@bBhKIE*^T``9o%| zJWTt#oDbdz#}Q5~Sj=E$3M!D1_ESgten zup@muBQja$5J&nFM|z$k{ZmK!H;(j6j`T)H`aMUw3!^w$*C~$lIga!gM|!3sz08rm z-;sX8k>2P?f8j_U2e(Mpd!{2j%8|aok-puL{+%P;_|5`(*Ja%KXathZBI|3y^|d2 z!H)FBj`R(V^zDxHpB?Ep9qBI|>Em$yRQ<)^&@<~HG<{EPoZmpKTBgPT;Pq`z{cy|y!| zU@YH}HXP~Mj`T`L`Y(?3c1QYKN4j8Cd+$$hr0X2%zc|vn9qCL=ugMWn;7ErY=}JfX zK}TAA@RRR;;z)Zj3@7iO=SWX>q!&8U4>{8RaHQKD>HZkolV$oH>Di9-1CI1+M|!U# z-G7Xu97lS#BfZj*e%X<>9O)io+si3(q_1?Os~zb-IMSOP>2DqB0`?~)+Zb}BD;?=O z9O3=xVZH{#RaC@14M|!p+{eUC=vLn6Qk

+EeTtZBYlk{{eUCA+L3N^q=(~1 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

$J?vMxO0g;JfG~ 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 z

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 Vj9(u6h4H3w*ORBElxt5P{2xO@t$_dl diff --git a/alvr/server/cpp/bin/windows/vcruntime140_1.dll b/alvr/server/cpp/bin/windows/vcruntime140_1.dll deleted file mode 100644 index 70dcc8633efbfe1bb9f587ec2a4910d7dae4dc32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36728 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 - - - -// version.h - -namespace vr -{ - static const uint32_t k_nSteamVRVersionMajor = 1; - static const uint32_t k_nSteamVRVersionMinor = 16; - static const uint32_t k_nSteamVRVersionBuild = 8; -} // namespace vr - -// public_vrtypes.h - -#ifndef _INCLUDE_CORE_VRTYPES_PUBLIC_H -#define _INCLUDE_CORE_VRTYPES_PUBLIC_H - -namespace vr -{ -#pragma pack( push, 8 ) - -// right-handed system -// +y is up -// +x is to the right -// -z is forward -// Distance unit is meters -struct HmdMatrix34_t -{ - float m[3][4]; -}; - -struct HmdMatrix33_t -{ - float m[3][3]; -}; - -struct HmdMatrix44_t -{ - float m[4][4]; -}; - -struct HmdVector3_t -{ - float v[3]; -}; - -struct HmdVector4_t -{ - float v[4]; -}; - -struct HmdVector3d_t -{ - double v[3]; -}; - -struct HmdVector2_t -{ - float v[2]; -}; - -struct HmdQuaternion_t -{ - double w, x, y, z; -}; - -struct HmdQuaternionf_t -{ - float w, x, y, z; -}; - -struct HmdColor_t -{ - float r, g, b, a; -}; - -struct HmdQuad_t -{ - HmdVector3_t vCorners[ 4 ]; -}; - -struct HmdRect2_t -{ - HmdVector2_t vTopLeft; - HmdVector2_t vBottomRight; -}; - -/** Holds the transform for a single bone */ -struct VRBoneTransform_t -{ - HmdVector4_t position; - HmdQuaternionf_t orientation; -}; - -#pragma pack( pop ) - -} // namespace vr - -#endif - -// vrtypes.h - -#ifndef _INCLUDE_VRTYPES_H -#define _INCLUDE_VRTYPES_H - -// Forward declarations to avoid requiring vulkan.h -struct VkDevice_T; -struct VkPhysicalDevice_T; -struct VkInstance_T; -struct VkQueue_T; - -// Forward declarations to avoid requiring d3d12.h -struct ID3D12Resource; -struct ID3D12CommandQueue; - -namespace vr -{ -#pragma pack( push, 8 ) - -/** A handle for a spatial anchor. This handle is only valid during the session it was created in. -* Anchors that live beyond one session should be saved by their string descriptors. */ -typedef uint32_t SpatialAnchorHandle_t; - -typedef void* glSharedTextureHandle_t; -typedef int32_t glInt_t; -typedef uint32_t glUInt_t; - - -/** 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. */ -struct DistortionCoordinates_t -{ - float rfRed[2]; - float rfGreen[2]; - float rfBlue[2]; -}; - -enum EVREye -{ - Eye_Left = 0, - Eye_Right = 1 -}; - -enum ETextureType -{ - TextureType_Invalid = -1, // Handle has been invalidated - TextureType_DirectX = 0, // Handle is an ID3D11Texture - TextureType_OpenGL = 1, // Handle is an OpenGL texture name or an OpenGL render buffer name, depending on submit flags - TextureType_Vulkan = 2, // Handle is a pointer to a VRVulkanTextureData_t structure - TextureType_IOSurface = 3, // Handle is a macOS cross-process-sharable IOSurfaceRef, deprecated in favor of TextureType_Metal on supported platforms - TextureType_DirectX12 = 4, // Handle is a pointer to a D3D12TextureData_t structure - TextureType_DXGISharedHandle = 5, // Handle is a HANDLE DXGI share handle, only supported for Overlay render targets. - // this texture is used directly by our renderer, so only perform atomic (copyresource or resolve) on it - TextureType_Metal = 6, // Handle is a MTLTexture conforming to the MTLSharedTexture protocol. Textures submitted to IVRCompositor::Submit which - // are of type MTLTextureType2DArray assume layer 0 is the left eye texture (vr::EVREye::Eye_left), layer 1 is the right - // eye texture (vr::EVREye::Eye_Right) -}; - -enum EColorSpace -{ - ColorSpace_Auto = 0, // Assumes 'gamma' for 8-bit per component formats, otherwise 'linear'. This mirrors the DXGI formats which have _SRGB variants. - ColorSpace_Gamma = 1, // Texture data can be displayed directly on the display without any conversion (a.k.a. display native format). - ColorSpace_Linear = 2, // Same as gamma but has been converted to a linear representation using DXGI's sRGB conversion algorithm. -}; - -struct Texture_t -{ - void* handle; // See ETextureType definition above - ETextureType eType; - EColorSpace eColorSpace; -}; - -// Handle to a shared texture (HANDLE on Windows obtained using OpenSharedResource). -typedef uint64_t SharedTextureHandle_t; -#define INVALID_SHARED_TEXTURE_HANDLE ((vr::SharedTextureHandle_t)0) - -enum ETrackingResult -{ - TrackingResult_Uninitialized = 1, - - TrackingResult_Calibrating_InProgress = 100, - TrackingResult_Calibrating_OutOfRange = 101, - - TrackingResult_Running_OK = 200, - TrackingResult_Running_OutOfRange = 201, - - TrackingResult_Fallback_RotationOnly = 300, -}; - -typedef uint32_t DriverId_t; -static const uint32_t k_nDriverNone = 0xFFFFFFFF; - -static const uint32_t k_unMaxDriverDebugResponseSize = 32768; - -/** Used to pass device IDs to API calls */ -typedef uint32_t TrackedDeviceIndex_t; -static const uint32_t k_unTrackedDeviceIndex_Hmd = 0; -static const uint32_t k_unMaxTrackedDeviceCount = 64; -static const uint32_t k_unTrackedDeviceIndexOther = 0xFFFFFFFE; -static const uint32_t k_unTrackedDeviceIndexInvalid = 0xFFFFFFFF; - -/** Describes what kind of object is being tracked at a given ID */ -enum ETrackedDeviceClass -{ - TrackedDeviceClass_Invalid = 0, // the ID was not valid. - TrackedDeviceClass_HMD = 1, // Head-Mounted Displays - TrackedDeviceClass_Controller = 2, // Tracked controllers - TrackedDeviceClass_GenericTracker = 3, // Generic trackers, similar to controllers - TrackedDeviceClass_TrackingReference = 4, // Camera and base stations that serve as tracking reference points - TrackedDeviceClass_DisplayRedirect = 5, // Accessories that aren't necessarily tracked themselves, but may redirect video output from other tracked devices - - TrackedDeviceClass_Max -}; - - -/** Describes what specific role associated with a tracked device */ -enum ETrackedControllerRole -{ - TrackedControllerRole_Invalid = 0, // Invalid value for controller type - TrackedControllerRole_LeftHand = 1, // Tracked device associated with the left hand - TrackedControllerRole_RightHand = 2, // Tracked device associated with the right hand - TrackedControllerRole_OptOut = 3, // Tracked device is opting out of left/right hand selection - TrackedControllerRole_Treadmill = 4, // Tracked device is a treadmill or other locomotion device - TrackedControllerRole_Stylus = 5, // Tracked device is a stylus - TrackedControllerRole_Max = 5 -}; - - -/** Returns true if the tracked controller role is allowed to be a hand */ -inline bool IsRoleAllowedAsHand( ETrackedControllerRole eRole ) -{ - switch ( eRole ) - { - case TrackedControllerRole_Invalid: - case TrackedControllerRole_LeftHand: - case TrackedControllerRole_RightHand: - return true; - default: - return false; - } -} - - -/** describes a single pose for a tracked object */ -struct TrackedDevicePose_t -{ - HmdMatrix34_t mDeviceToAbsoluteTracking; - HmdVector3_t vVelocity; // velocity in tracker space in m/s - HmdVector3_t vAngularVelocity; // angular velocity in radians/s (?) - ETrackingResult eTrackingResult; - bool bPoseIsValid; - - // This indicates that there is a device connected for this spot in the pose array. - // It could go from true to false if the user unplugs the device. - bool bDeviceIsConnected; -}; - -/** Identifies which style of tracking origin the application wants to use -* for the poses it is requesting */ -enum ETrackingUniverseOrigin -{ - TrackingUniverseSeated = 0, // Poses are provided relative to the seated zero pose - TrackingUniverseStanding = 1, // Poses are provided relative to the safe bounds configured by the user - TrackingUniverseRawAndUncalibrated = 2, // Poses are provided in the coordinate system defined by the driver. It has Y up and is unified for devices of the same driver. You usually don't want this one. -}; - -enum EAdditionalRadioFeatures -{ - AdditionalRadioFeatures_None = 0x00000000, - AdditionalRadioFeatures_HTCLinkBox = 0x00000001, - AdditionalRadioFeatures_InternalDongle = 0x00000002, - AdditionalRadioFeatures_ExternalDongle = 0x00000004, -}; - -typedef uint64_t WebConsoleHandle_t; -#define INVALID_WEB_CONSOLE_HANDLE ((vr::WebConsoleHandle_t)0) - -// Refers to a single container of properties -typedef uint64_t PropertyContainerHandle_t; -typedef uint32_t PropertyTypeTag_t; - -static const PropertyContainerHandle_t k_ulInvalidPropertyContainer = 0; -static const PropertyTypeTag_t k_unInvalidPropertyTag = 0; - -typedef PropertyContainerHandle_t DriverHandle_t; -static const PropertyContainerHandle_t k_ulInvalidDriverHandle = 0; - -// Use these tags to set/get common types as struct properties -static const PropertyTypeTag_t k_unFloatPropertyTag = 1; -static const PropertyTypeTag_t k_unInt32PropertyTag = 2; -static const PropertyTypeTag_t k_unUint64PropertyTag = 3; -static const PropertyTypeTag_t k_unBoolPropertyTag = 4; -static const PropertyTypeTag_t k_unStringPropertyTag = 5; -static const PropertyTypeTag_t k_unErrorPropertyTag = 6; -static const PropertyTypeTag_t k_unDoublePropertyTag = 7; - -static const PropertyTypeTag_t k_unHmdMatrix34PropertyTag = 20; -static const PropertyTypeTag_t k_unHmdMatrix44PropertyTag = 21; -static const PropertyTypeTag_t k_unHmdVector3PropertyTag = 22; -static const PropertyTypeTag_t k_unHmdVector4PropertyTag = 23; -static const PropertyTypeTag_t k_unHmdVector2PropertyTag = 24; -static const PropertyTypeTag_t k_unHmdQuadPropertyTag = 25; - -static const PropertyTypeTag_t k_unHiddenAreaPropertyTag = 30; -static const PropertyTypeTag_t k_unPathHandleInfoTag = 31; -static const PropertyTypeTag_t k_unActionPropertyTag = 32; -static const PropertyTypeTag_t k_unInputValuePropertyTag = 33; -static const PropertyTypeTag_t k_unWildcardPropertyTag = 34; -static const PropertyTypeTag_t k_unHapticVibrationPropertyTag = 35; -static const PropertyTypeTag_t k_unSkeletonPropertyTag = 36; - -static const PropertyTypeTag_t k_unSpatialAnchorPosePropertyTag = 40; -static const PropertyTypeTag_t k_unJsonPropertyTag = 41; -static const PropertyTypeTag_t k_unActiveActionSetPropertyTag = 42; - -static const PropertyTypeTag_t k_unOpenVRInternalReserved_Start = 1000; -static const PropertyTypeTag_t k_unOpenVRInternalReserved_End = 10000; - - -/** Each entry in this enum represents a property that can be retrieved about a -* tracked device. Many fields are only valid for one ETrackedDeviceClass. */ -enum ETrackedDeviceProperty -{ - Prop_Invalid = 0, - - // general properties that apply to all device classes - Prop_TrackingSystemName_String = 1000, - Prop_ModelNumber_String = 1001, - Prop_SerialNumber_String = 1002, - Prop_RenderModelName_String = 1003, - Prop_WillDriftInYaw_Bool = 1004, - Prop_ManufacturerName_String = 1005, - Prop_TrackingFirmwareVersion_String = 1006, - Prop_HardwareRevision_String = 1007, - Prop_AllWirelessDongleDescriptions_String = 1008, - Prop_ConnectedWirelessDongle_String = 1009, - Prop_DeviceIsWireless_Bool = 1010, - Prop_DeviceIsCharging_Bool = 1011, - Prop_DeviceBatteryPercentage_Float = 1012, // 0 is empty, 1 is full - Prop_StatusDisplayTransform_Matrix34 = 1013, - Prop_Firmware_UpdateAvailable_Bool = 1014, - Prop_Firmware_ManualUpdate_Bool = 1015, - Prop_Firmware_ManualUpdateURL_String = 1016, - Prop_HardwareRevision_Uint64 = 1017, - Prop_FirmwareVersion_Uint64 = 1018, - Prop_FPGAVersion_Uint64 = 1019, - Prop_VRCVersion_Uint64 = 1020, - Prop_RadioVersion_Uint64 = 1021, - Prop_DongleVersion_Uint64 = 1022, - Prop_BlockServerShutdown_Bool = 1023, - Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024, - Prop_ContainsProximitySensor_Bool = 1025, - Prop_DeviceProvidesBatteryStatus_Bool = 1026, - Prop_DeviceCanPowerOff_Bool = 1027, - Prop_Firmware_ProgrammingTarget_String = 1028, - Prop_DeviceClass_Int32 = 1029, - Prop_HasCamera_Bool = 1030, - Prop_DriverVersion_String = 1031, - Prop_Firmware_ForceUpdateRequired_Bool = 1032, - Prop_ViveSystemButtonFixRequired_Bool = 1033, - Prop_ParentDriver_Uint64 = 1034, - Prop_ResourceRoot_String = 1035, - Prop_RegisteredDeviceType_String = 1036, - Prop_InputProfilePath_String = 1037, // input profile to use for this device in the input system. Will default to tracking system name if this isn't provided - Prop_NeverTracked_Bool = 1038, // Used for devices that will never have a valid pose by design - Prop_NumCameras_Int32 = 1039, - Prop_CameraFrameLayout_Int32 = 1040, // EVRTrackedCameraFrameLayout value - Prop_CameraStreamFormat_Int32 = 1041, // ECameraVideoStreamFormat value - Prop_AdditionalDeviceSettingsPath_String = 1042, // driver-relative path to additional device and global configuration settings - Prop_Identifiable_Bool = 1043, // Whether device supports being identified from vrmonitor (e.g. blink LED, vibrate haptics, etc) - Prop_BootloaderVersion_Uint64 = 1044, - Prop_AdditionalSystemReportData_String = 1045, // additional string to include in system reports about a tracked device - Prop_CompositeFirmwareVersion_String = 1046, // additional FW components from a device that gets propagated into reports - Prop_Firmware_RemindUpdate_Bool = 1047, - Prop_PeripheralApplicationVersion_Uint64 = 1048, - Prop_ManufacturerSerialNumber_String = 1049, - Prop_ComputedSerialNumber_String = 1050, - Prop_EstimatedDeviceFirstUseTime_Int32 = 1051, - - // Properties that are unique to TrackedDeviceClass_HMD - Prop_ReportsTimeSinceVSync_Bool = 2000, - Prop_SecondsFromVsyncToPhotons_Float = 2001, - Prop_DisplayFrequency_Float = 2002, - Prop_UserIpdMeters_Float = 2003, - Prop_CurrentUniverseId_Uint64 = 2004, - Prop_PreviousUniverseId_Uint64 = 2005, - Prop_DisplayFirmwareVersion_Uint64 = 2006, - Prop_IsOnDesktop_Bool = 2007, - Prop_DisplayMCType_Int32 = 2008, - Prop_DisplayMCOffset_Float = 2009, - Prop_DisplayMCScale_Float = 2010, - Prop_EdidVendorID_Int32 = 2011, - Prop_DisplayMCImageLeft_String = 2012, - Prop_DisplayMCImageRight_String = 2013, - Prop_DisplayGCBlackClamp_Float = 2014, - Prop_EdidProductID_Int32 = 2015, - Prop_CameraToHeadTransform_Matrix34 = 2016, - Prop_DisplayGCType_Int32 = 2017, - Prop_DisplayGCOffset_Float = 2018, - Prop_DisplayGCScale_Float = 2019, - Prop_DisplayGCPrescale_Float = 2020, - Prop_DisplayGCImage_String = 2021, - Prop_LensCenterLeftU_Float = 2022, - Prop_LensCenterLeftV_Float = 2023, - Prop_LensCenterRightU_Float = 2024, - Prop_LensCenterRightV_Float = 2025, - Prop_UserHeadToEyeDepthMeters_Float = 2026, - Prop_CameraFirmwareVersion_Uint64 = 2027, - Prop_CameraFirmwareDescription_String = 2028, - Prop_DisplayFPGAVersion_Uint64 = 2029, - Prop_DisplayBootloaderVersion_Uint64 = 2030, - Prop_DisplayHardwareVersion_Uint64 = 2031, - Prop_AudioFirmwareVersion_Uint64 = 2032, - Prop_CameraCompatibilityMode_Int32 = 2033, - Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034, - Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035, - Prop_DisplaySuppressed_Bool = 2036, - Prop_DisplayAllowNightMode_Bool = 2037, - Prop_DisplayMCImageWidth_Int32 = 2038, - Prop_DisplayMCImageHeight_Int32 = 2039, - Prop_DisplayMCImageNumChannels_Int32 = 2040, - Prop_DisplayMCImageData_Binary = 2041, - Prop_SecondsFromPhotonsToVblank_Float = 2042, - Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043, - Prop_DisplayDebugMode_Bool = 2044, - Prop_GraphicsAdapterLuid_Uint64 = 2045, - Prop_DriverProvidedChaperonePath_String = 2048, - Prop_ExpectedTrackingReferenceCount_Int32 = 2049, // expected number of sensors or basestations to reserve UI space for - Prop_ExpectedControllerCount_Int32 = 2050, // expected number of tracked controllers to reserve UI space for - Prop_NamedIconPathControllerLeftDeviceOff_String = 2051, // placeholder icon for "left" controller if not yet detected/loaded - Prop_NamedIconPathControllerRightDeviceOff_String = 2052, // placeholder icon for "right" controller if not yet detected/loaded - Prop_NamedIconPathTrackingReferenceDeviceOff_String = 2053, // placeholder icon for sensor/base if not yet detected/loaded - Prop_DoNotApplyPrediction_Bool = 2054, // currently no effect. was used to disable HMD pose prediction on MR, which is now done by MR driver setting velocity=0 - Prop_CameraToHeadTransforms_Matrix34_Array = 2055, - Prop_DistortionMeshResolution_Int32 = 2056, // custom resolution of compositor calls to IVRSystem::ComputeDistortion - Prop_DriverIsDrawingControllers_Bool = 2057, - Prop_DriverRequestsApplicationPause_Bool = 2058, - Prop_DriverRequestsReducedRendering_Bool = 2059, - Prop_MinimumIpdStepMeters_Float = 2060, - Prop_AudioBridgeFirmwareVersion_Uint64 = 2061, - Prop_ImageBridgeFirmwareVersion_Uint64 = 2062, - Prop_ImuToHeadTransform_Matrix34 = 2063, - Prop_ImuFactoryGyroBias_Vector3 = 2064, - Prop_ImuFactoryGyroScale_Vector3 = 2065, - Prop_ImuFactoryAccelerometerBias_Vector3 = 2066, - Prop_ImuFactoryAccelerometerScale_Vector3 = 2067, - // reserved 2068 - Prop_ConfigurationIncludesLighthouse20Features_Bool = 2069, - Prop_AdditionalRadioFeatures_Uint64 = 2070, - Prop_CameraWhiteBalance_Vector4_Array = 2071, // Prop_NumCameras_Int32-sized array of float[4] RGBG white balance calibration data (max size is vr::k_unMaxCameras) - Prop_CameraDistortionFunction_Int32_Array = 2072, // Prop_NumCameras_Int32-sized array of vr::EVRDistortionFunctionType values (max size is vr::k_unMaxCameras) - Prop_CameraDistortionCoefficients_Float_Array = 2073, // Prop_NumCameras_Int32-sized array of double[vr::k_unMaxDistortionFunctionParameters] (max size is vr::k_unMaxCameras) - Prop_ExpectedControllerType_String = 2074, - Prop_HmdTrackingStyle_Int32 = 2075, // one of EHmdTrackingStyle - Prop_DriverProvidedChaperoneVisibility_Bool = 2076, - Prop_HmdColumnCorrectionSettingPrefix_String = 2077, - Prop_CameraSupportsCompatibilityModes_Bool = 2078, - Prop_SupportsRoomViewDepthProjection_Bool = 2079, - Prop_DisplayAvailableFrameRates_Float_Array = 2080, // populated by compositor from actual EDID list when available from GPU driver - Prop_DisplaySupportsMultipleFramerates_Bool = 2081, // if this is true but Prop_DisplayAvailableFrameRates_Float_Array is empty, explain to user - Prop_DisplayColorMultLeft_Vector3 = 2082, - Prop_DisplayColorMultRight_Vector3 = 2083, - Prop_DisplaySupportsRuntimeFramerateChange_Bool = 2084, - Prop_DisplaySupportsAnalogGain_Bool = 2085, - Prop_DisplayMinAnalogGain_Float = 2086, - Prop_DisplayMaxAnalogGain_Float = 2087, - Prop_CameraExposureTime_Float = 2088, - Prop_CameraGlobalGain_Float = 2089, - // Prop_DashboardLayoutPathName_String = 2090, // DELETED - Prop_DashboardScale_Float = 2091, - Prop_IpdUIRangeMinMeters_Float = 2100, - Prop_IpdUIRangeMaxMeters_Float = 2101, - Prop_Hmd_SupportsHDCP14LegacyCompat_Bool = 2102, - Prop_Hmd_SupportsMicMonitoring_Bool = 2103, - - // Driver requested mura correction properties - Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200, - Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201, - Prop_DriverRequestedMuraFeather_InnerRight_Int32 = 2202, - Prop_DriverRequestedMuraFeather_InnerTop_Int32 = 2203, - Prop_DriverRequestedMuraFeather_InnerBottom_Int32 = 2204, - Prop_DriverRequestedMuraFeather_OuterLeft_Int32 = 2205, - Prop_DriverRequestedMuraFeather_OuterRight_Int32 = 2206, - Prop_DriverRequestedMuraFeather_OuterTop_Int32 = 2207, - Prop_DriverRequestedMuraFeather_OuterBottom_Int32 = 2208, - - Prop_Audio_DefaultPlaybackDeviceId_String = 2300, - Prop_Audio_DefaultRecordingDeviceId_String = 2301, - Prop_Audio_DefaultPlaybackDeviceVolume_Float = 2302, - Prop_Audio_SupportsDualSpeakerAndJackOutput_Bool = 2303, - - // Properties that are unique to TrackedDeviceClass_Controller - Prop_AttachedDeviceId_String = 3000, - Prop_SupportedButtons_Uint64 = 3001, - Prop_Axis0Type_Int32 = 3002, // Return value is of type EVRControllerAxisType - Prop_Axis1Type_Int32 = 3003, // Return value is of type EVRControllerAxisType - Prop_Axis2Type_Int32 = 3004, // Return value is of type EVRControllerAxisType - Prop_Axis3Type_Int32 = 3005, // Return value is of type EVRControllerAxisType - Prop_Axis4Type_Int32 = 3006, // Return value is of type EVRControllerAxisType - Prop_ControllerRoleHint_Int32 = 3007, // Return value is of type ETrackedControllerRole - - // Properties that are unique to TrackedDeviceClass_TrackingReference - Prop_FieldOfViewLeftDegrees_Float = 4000, - Prop_FieldOfViewRightDegrees_Float = 4001, - Prop_FieldOfViewTopDegrees_Float = 4002, - Prop_FieldOfViewBottomDegrees_Float = 4003, - Prop_TrackingRangeMinimumMeters_Float = 4004, - Prop_TrackingRangeMaximumMeters_Float = 4005, - Prop_ModeLabel_String = 4006, - Prop_CanWirelessIdentify_Bool = 4007, // volatile, based on radio presence and fw discovery - Prop_Nonce_Int32 = 4008, - - // Properties that are used for user interface like icons names - Prop_IconPathName_String = 5000, // DEPRECATED. Value not referenced. Now expected to be part of icon path properties. - Prop_NamedIconPathDeviceOff_String = 5001, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceSearching_String = 5002, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceSearchingAlert_String = 5003, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceReady_String = 5004, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceReadyAlert_String = 5005, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceNotReady_String = 5006, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceStandby_String = 5007, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceAlertLow_String = 5008, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceStandbyAlert_String = 5009, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - - // Properties that are used by helpers, but are opaque to applications - Prop_DisplayHiddenArea_Binary_Start = 5100, - Prop_DisplayHiddenArea_Binary_End = 5150, - Prop_ParentContainer = 5151, - Prop_OverrideContainer_Uint64 = 5152, - - // Properties that are unique to drivers - Prop_UserConfigPath_String = 6000, - Prop_InstallPath_String = 6001, - Prop_HasDisplayComponent_Bool = 6002, - Prop_HasControllerComponent_Bool = 6003, - Prop_HasCameraComponent_Bool = 6004, - Prop_HasDriverDirectModeComponent_Bool = 6005, - Prop_HasVirtualDisplayComponent_Bool = 6006, - Prop_HasSpatialAnchorsSupport_Bool = 6007, - - // Properties that are set internally based on other information provided by drivers - Prop_ControllerType_String = 7000, - //Prop_LegacyInputProfile_String = 7001, // This is no longer used. See "legacy_binding" in the input profile instead. - Prop_ControllerHandSelectionPriority_Int32 = 7002, // Allows hand assignments to prefer some controllers over others. High numbers are selected over low numbers - - // Vendors are free to expose private debug data in this reserved region - Prop_VendorSpecific_Reserved_Start = 10000, - Prop_VendorSpecific_Reserved_End = 10999, - - Prop_TrackedDeviceProperty_Max = 1000000, -}; - -/** No string property will ever be longer than this length */ -static const uint32_t k_unMaxPropertyStringSize = 32 * 1024; - -/** Used to return errors that occur when reading properties. */ -enum ETrackedPropertyError -{ - TrackedProp_Success = 0, - TrackedProp_WrongDataType = 1, - TrackedProp_WrongDeviceClass = 2, - TrackedProp_BufferTooSmall = 3, - TrackedProp_UnknownProperty = 4, // Driver has not set the property (and may not ever). - TrackedProp_InvalidDevice = 5, - TrackedProp_CouldNotContactServer = 6, - TrackedProp_ValueNotProvidedByDevice = 7, - TrackedProp_StringExceedsMaximumLength = 8, - TrackedProp_NotYetAvailable = 9, // The property value isn't known yet, but is expected soon. Call again later. - TrackedProp_PermissionDenied = 10, - TrackedProp_InvalidOperation = 11, - TrackedProp_CannotWriteToWildcards = 12, - TrackedProp_IPCReadFailure = 13, - TrackedProp_OutOfMemory = 14, - TrackedProp_InvalidContainer = 15, -}; - -/** Used to drive certain text in the UI when talking about the tracking system for the HMD */ -enum EHmdTrackingStyle -{ - HmdTrackingStyle_Unknown = 0, - - HmdTrackingStyle_Lighthouse = 1, // base stations and lasers - HmdTrackingStyle_OutsideInCameras = 2, // Cameras and LED, Rift 1 style - HmdTrackingStyle_InsideOutCameras = 3, // Cameras on HMD looking at the world -}; - -typedef uint64_t VRActionHandle_t; -typedef uint64_t VRActionSetHandle_t; -typedef uint64_t VRInputValueHandle_t; - -static const VRActionHandle_t k_ulInvalidActionHandle = 0; -static const VRActionSetHandle_t k_ulInvalidActionSetHandle = 0; -static const VRInputValueHandle_t k_ulInvalidInputValueHandle = 0; - - -/** Allows the application to control what part of the provided texture will be used in the -* frame buffer. */ -struct VRTextureBounds_t -{ - float uMin, vMin; - float uMax, vMax; -}; - -/** Allows specifying pose used to render provided scene texture (if different from value returned by WaitGetPoses). */ -struct VRTextureWithPose_t : public Texture_t -{ - HmdMatrix34_t mDeviceToAbsoluteTracking; // Actual pose used to render scene textures. -}; - -struct VRTextureDepthInfo_t -{ - void* handle; // See ETextureType definition above - HmdMatrix44_t mProjection; - HmdVector2_t vRange; // 0..1 -}; - -struct VRTextureWithDepth_t : public Texture_t -{ - VRTextureDepthInfo_t depth; -}; - -struct VRTextureWithPoseAndDepth_t : public VRTextureWithPose_t -{ - VRTextureDepthInfo_t depth; -}; - -/** Allows the application to control how scene textures are used by the compositor when calling Submit. */ -enum EVRSubmitFlags -{ - // Simple render path. App submits rendered left and right eye images with no lens distortion correction applied. - Submit_Default = 0x00, - - // App submits final left and right eye images with lens distortion already applied (lens distortion makes the images appear - // barrel distorted with chromatic aberration correction applied). The app would have used the data returned by - // vr::IVRSystem::ComputeDistortion() to apply the correct distortion to the rendered images before calling Submit(). - Submit_LensDistortionAlreadyApplied = 0x01, - - // If the texture pointer passed in is actually a renderbuffer (e.g. for MSAA in OpenGL) then set this flag. - Submit_GlRenderBuffer = 0x02, - - // Do not use - Submit_Reserved = 0x04, - - // Set to indicate that pTexture is a pointer to a VRTextureWithPose_t. - // This flag can be combined with Submit_TextureWithDepth to pass a VRTextureWithPoseAndDepth_t. - Submit_TextureWithPose = 0x08, - - // Set to indicate that pTexture is a pointer to a VRTextureWithDepth_t. - // This flag can be combined with Submit_TextureWithPose to pass a VRTextureWithPoseAndDepth_t. - Submit_TextureWithDepth = 0x10, - - // Set to indicate a discontinuity between this and the last frame. - // This will prevent motion smoothing from attempting to extrapolate using the pair. - Submit_FrameDiscontinuty = 0x20, - - // Set to indicate that pTexture->handle is a contains VRVulkanTextureArrayData_t - Submit_VulkanTextureWithArrayData = 0x40, - - // If the texture pointer passed in is an OpenGL Array texture, set this flag - Submit_GlArrayTexture = 0x80, - - // Do not use - Submit_Reserved2 = 0x8000, - - -}; - -/** 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 */ -struct VRVulkanTextureData_t -{ - uint64_t m_nImage; // VkImage - VkDevice_T *m_pDevice; - VkPhysicalDevice_T *m_pPhysicalDevice; - VkInstance_T *m_pInstance; - VkQueue_T *m_pQueue; - uint32_t m_nQueueFamilyIndex; - uint32_t m_nWidth, m_nHeight, m_nFormat, m_nSampleCount; -}; - -/** 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 */ -struct VRVulkanTextureArrayData_t : public VRVulkanTextureData_t -{ - uint32_t m_unArrayIndex; - uint32_t m_unArraySize; -}; - -/** Data required for passing D3D12 textures to IVRCompositor::Submit. -* Be sure to call OpenVR_Shutdown before destroying these resources. */ -struct D3D12TextureData_t -{ - ID3D12Resource *m_pResource; - ID3D12CommandQueue *m_pCommandQueue; - uint32_t m_nNodeMask; -}; - -/** Status of the overall system or tracked objects */ -enum EVRState -{ - VRState_Undefined = -1, - VRState_Off = 0, - VRState_Searching = 1, - VRState_Searching_Alert = 2, - VRState_Ready = 3, - VRState_Ready_Alert = 4, - VRState_NotReady = 5, - VRState_Standby = 6, - VRState_Ready_Alert_Low = 7, -}; - -/** The types of events that could be posted (and what the parameters mean for each event type) */ -enum EVREventType -{ - VREvent_None = 0, - - VREvent_TrackedDeviceActivated = 100, - VREvent_TrackedDeviceDeactivated = 101, - VREvent_TrackedDeviceUpdated = 102, - VREvent_TrackedDeviceUserInteractionStarted = 103, - VREvent_TrackedDeviceUserInteractionEnded = 104, - VREvent_IpdChanged = 105, - VREvent_EnterStandbyMode = 106, - VREvent_LeaveStandbyMode = 107, - VREvent_TrackedDeviceRoleChanged = 108, - VREvent_WatchdogWakeUpRequested = 109, - VREvent_LensDistortionChanged = 110, - VREvent_PropertyChanged = 111, - VREvent_WirelessDisconnect = 112, - VREvent_WirelessReconnect = 113, - - VREvent_ButtonPress = 200, // data is controller - VREvent_ButtonUnpress = 201, // data is controller - VREvent_ButtonTouch = 202, // data is controller - VREvent_ButtonUntouch = 203, // data is controller - - // VREvent_DualAnalog_Press = 250, // No longer sent - // VREvent_DualAnalog_Unpress = 251, // No longer sent - // VREvent_DualAnalog_Touch = 252, // No longer sent - // VREvent_DualAnalog_Untouch = 253, // No longer sent - // VREvent_DualAnalog_Move = 254, // No longer sent - // VREvent_DualAnalog_ModeSwitch1 = 255, // No longer sent - // VREvent_DualAnalog_ModeSwitch2 = 256, // No longer sent - VREvent_Modal_Cancel = 257, // Sent to overlays with the - - VREvent_MouseMove = 300, // data is mouse - VREvent_MouseButtonDown = 301, // data is mouse - VREvent_MouseButtonUp = 302, // data is mouse - VREvent_FocusEnter = 303, // data is overlay - VREvent_FocusLeave = 304, // data is overlay - VREvent_ScrollDiscrete = 305, // data is scroll - VREvent_TouchPadMove = 306, // data is mouse - VREvent_OverlayFocusChanged = 307, // data is overlay, global event - VREvent_ReloadOverlays = 308, - VREvent_ScrollSmooth = 309, // data is scroll - VREvent_LockMousePosition = 310, - VREvent_UnlockMousePosition = 311, - - VREvent_InputFocusCaptured = 400, // data is process DEPRECATED - VREvent_InputFocusReleased = 401, // data is process DEPRECATED - // VREvent_SceneFocusLost = 402, // data is process - // VREvent_SceneFocusGained = 403, // data is process - VREvent_SceneApplicationChanged = 404, // data is process - The App actually drawing the scene changed (usually to or from the compositor) - VREvent_SceneFocusChanged = 405, // data is process - New app got access to draw the scene - VREvent_InputFocusChanged = 406, // data is process - // VREvent_SceneApplicationSecondaryRenderingStarted = 407, - VREvent_SceneApplicationUsingWrongGraphicsAdapter = 408, // data is process - VREvent_ActionBindingReloaded = 409, // data is process - The App that action binds reloaded for - - VREvent_HideRenderModels = 410, // Sent to the scene application to request hiding render models temporarily - VREvent_ShowRenderModels = 411, // Sent to the scene application to request restoring render model visibility - - VREvent_SceneApplicationStateChanged = 412, // No data; but query VRApplications()->GetSceneApplicationState(); - - VREvent_ConsoleOpened = 420, - VREvent_ConsoleClosed = 421, - - VREvent_OverlayShown = 500, - VREvent_OverlayHidden = 501, - VREvent_DashboardActivated = 502, - VREvent_DashboardDeactivated = 503, - //VREvent_DashboardThumbSelected = 504, // Sent to the overlay manager - data is overlay - No longer sent - VREvent_DashboardRequested = 505, // Sent to the overlay manager - data is overlay - VREvent_ResetDashboard = 506, // Send to the overlay manager - //VREvent_RenderToast = 507, // Send to the dashboard to render a toast - data is the notification ID -- no longer sent - VREvent_ImageLoaded = 508, // Sent to overlays when a SetOverlayRaw or SetOverlayFromFile call finishes loading - VREvent_ShowKeyboard = 509, // Sent to keyboard renderer in the dashboard to invoke it - VREvent_HideKeyboard = 510, // Sent to keyboard renderer in the dashboard to hide it - VREvent_OverlayGamepadFocusGained = 511, // Sent to an overlay when IVROverlay::SetFocusOverlay is called on it - VREvent_OverlayGamepadFocusLost = 512, // Send to an overlay when it previously had focus and IVROverlay::SetFocusOverlay is called on something else - VREvent_OverlaySharedTextureChanged = 513, - //VREvent_DashboardGuideButtonDown = 514, // These are no longer sent - //VREvent_DashboardGuideButtonUp = 515, - VREvent_ScreenshotTriggered = 516, // Screenshot button combo was pressed, Dashboard should request a screenshot - VREvent_ImageFailed = 517, // Sent to overlays when a SetOverlayRaw or SetOverlayfromFail fails to load - VREvent_DashboardOverlayCreated = 518, - VREvent_SwitchGamepadFocus = 519, - - // Screenshot API - VREvent_RequestScreenshot = 520, // Sent by vrclient application to compositor to take a screenshot - VREvent_ScreenshotTaken = 521, // Sent by compositor to the application that the screenshot has been taken - VREvent_ScreenshotFailed = 522, // Sent by compositor to the application that the screenshot failed to be taken - VREvent_SubmitScreenshotToDashboard = 523, // Sent by compositor to the dashboard that a completed screenshot was submitted - VREvent_ScreenshotProgressToDashboard = 524, // Sent by compositor to the dashboard that a completed screenshot was submitted - - VREvent_PrimaryDashboardDeviceChanged = 525, - VREvent_RoomViewShown = 526, // Sent by compositor whenever room-view is enabled - VREvent_RoomViewHidden = 527, // Sent by compositor whenever room-view is disabled - VREvent_ShowUI = 528, // data is showUi - VREvent_ShowDevTools = 529, // data is showDevTools - VREvent_DesktopViewUpdating = 530, - VREvent_DesktopViewReady = 531, - - VREvent_Notification_Shown = 600, - VREvent_Notification_Hidden = 601, - VREvent_Notification_BeginInteraction = 602, - VREvent_Notification_Destroyed = 603, - - VREvent_Quit = 700, // data is process - VREvent_ProcessQuit = 701, // data is process - //VREvent_QuitAborted_UserPrompt = 702, // data is process - VREvent_QuitAcknowledged = 703, // data is process - VREvent_DriverRequestedQuit = 704, // The driver has requested that SteamVR shut down - VREvent_RestartRequested = 705, // A driver or other component wants the user to restart SteamVR - - VREvent_ChaperoneDataHasChanged = 800, // this will never happen with the new chaperone system - VREvent_ChaperoneUniverseHasChanged = 801, - VREvent_ChaperoneTempDataHasChanged = 802, // this will never happen with the new chaperone system - VREvent_ChaperoneSettingsHaveChanged = 803, - VREvent_SeatedZeroPoseReset = 804, - VREvent_ChaperoneFlushCache = 805, // Sent when the process needs to reload any cached data it retrieved from VRChaperone() - VREvent_ChaperoneRoomSetupStarting = 806, // Triggered by CVRChaperoneClient::RoomSetupStarting - VREvent_ChaperoneRoomSetupFinished = 807, // Triggered by CVRChaperoneClient::CommitWorkingCopy - VREvent_StandingZeroPoseReset = 808, - - VREvent_AudioSettingsHaveChanged = 820, - - VREvent_BackgroundSettingHasChanged = 850, - VREvent_CameraSettingsHaveChanged = 851, - VREvent_ReprojectionSettingHasChanged = 852, - VREvent_ModelSkinSettingsHaveChanged = 853, - VREvent_EnvironmentSettingsHaveChanged = 854, - VREvent_PowerSettingsHaveChanged = 855, - VREvent_EnableHomeAppSettingsHaveChanged = 856, - VREvent_SteamVRSectionSettingChanged = 857, - VREvent_LighthouseSectionSettingChanged = 858, - VREvent_NullSectionSettingChanged = 859, - VREvent_UserInterfaceSectionSettingChanged = 860, - VREvent_NotificationsSectionSettingChanged = 861, - VREvent_KeyboardSectionSettingChanged = 862, - VREvent_PerfSectionSettingChanged = 863, - VREvent_DashboardSectionSettingChanged = 864, - VREvent_WebInterfaceSectionSettingChanged = 865, - VREvent_TrackersSectionSettingChanged = 866, - VREvent_LastKnownSectionSettingChanged = 867, - VREvent_DismissedWarningsSectionSettingChanged = 868, - VREvent_GpuSpeedSectionSettingChanged = 869, - VREvent_WindowsMRSectionSettingChanged = 870, - VREvent_OtherSectionSettingChanged = 871, - - VREvent_StatusUpdate = 900, - - VREvent_WebInterface_InstallDriverCompleted = 950, - - VREvent_MCImageUpdated = 1000, - - VREvent_FirmwareUpdateStarted = 1100, - VREvent_FirmwareUpdateFinished = 1101, - - VREvent_KeyboardClosed = 1200, - VREvent_KeyboardCharInput = 1201, - VREvent_KeyboardDone = 1202, // Sent when DONE button clicked on keyboard - - //VREvent_ApplicationTransitionStarted = 1300, - //VREvent_ApplicationTransitionAborted = 1301, - //VREvent_ApplicationTransitionNewAppStarted = 1302, - VREvent_ApplicationListUpdated = 1303, - VREvent_ApplicationMimeTypeLoad = 1304, - // VREvent_ApplicationTransitionNewAppLaunchComplete = 1305, - VREvent_ProcessConnected = 1306, - VREvent_ProcessDisconnected = 1307, - - //VREvent_Compositor_MirrorWindowShown = 1400, // DEPRECATED - //VREvent_Compositor_MirrorWindowHidden = 1401, // DEPRECATED - VREvent_Compositor_ChaperoneBoundsShown = 1410, - VREvent_Compositor_ChaperoneBoundsHidden = 1411, - VREvent_Compositor_DisplayDisconnected = 1412, - VREvent_Compositor_DisplayReconnected = 1413, - VREvent_Compositor_HDCPError = 1414, // data is hdcpError - VREvent_Compositor_ApplicationNotResponding = 1415, - VREvent_Compositor_ApplicationResumed = 1416, - VREvent_Compositor_OutOfVideoMemory = 1417, - VREvent_Compositor_DisplayModeNotSupported = 1418, // k_pch_SteamVR_PreferredRefreshRate - VREvent_Compositor_StageOverrideReady = 1419, - - VREvent_TrackedCamera_StartVideoStream = 1500, - VREvent_TrackedCamera_StopVideoStream = 1501, - VREvent_TrackedCamera_PauseVideoStream = 1502, - VREvent_TrackedCamera_ResumeVideoStream = 1503, - VREvent_TrackedCamera_EditingSurface = 1550, - - VREvent_PerformanceTest_EnableCapture = 1600, - VREvent_PerformanceTest_DisableCapture = 1601, - VREvent_PerformanceTest_FidelityLevel = 1602, - - VREvent_MessageOverlay_Closed = 1650, - VREvent_MessageOverlayCloseRequested = 1651, - - VREvent_Input_HapticVibration = 1700, // data is hapticVibration - VREvent_Input_BindingLoadFailed = 1701, // data is inputBinding - VREvent_Input_BindingLoadSuccessful = 1702, // data is inputBinding - VREvent_Input_ActionManifestReloaded = 1703, // no data - VREvent_Input_ActionManifestLoadFailed = 1704, // data is actionManifest - VREvent_Input_ProgressUpdate = 1705, // data is progressUpdate - VREvent_Input_TrackerActivated = 1706, - VREvent_Input_BindingsUpdated = 1707, - VREvent_Input_BindingSubscriptionChanged = 1708, - - VREvent_SpatialAnchors_PoseUpdated = 1800, // data is spatialAnchor. broadcast - VREvent_SpatialAnchors_DescriptorUpdated = 1801, // data is spatialAnchor. broadcast - VREvent_SpatialAnchors_RequestPoseUpdate = 1802, // data is spatialAnchor. sent to specific driver - VREvent_SpatialAnchors_RequestDescriptorUpdate = 1803, // data is spatialAnchor. sent to specific driver - - VREvent_SystemReport_Started = 1900, // user or system initiated generation of a system report. broadcast - - VREvent_Monitor_ShowHeadsetView = 2000, // data is process - VREvent_Monitor_HideHeadsetView = 2001, // data is process - - // Vendors are free to expose private events in this reserved region - VREvent_VendorSpecific_Reserved_Start = 10000, - VREvent_VendorSpecific_Reserved_End = 19999, -}; - - -/** Level of Hmd activity */ -// UserInteraction_Timeout means the device is in the process of timing out. -// InUse = ( k_EDeviceActivityLevel_UserInteraction || k_EDeviceActivityLevel_UserInteraction_Timeout ) -// VREvent_TrackedDeviceUserInteractionStarted fires when the devices transitions from Standby -> UserInteraction or Idle -> UserInteraction. -// VREvent_TrackedDeviceUserInteractionEnded fires when the devices transitions from UserInteraction_Timeout -> Idle -enum EDeviceActivityLevel -{ - k_EDeviceActivityLevel_Unknown = -1, - k_EDeviceActivityLevel_Idle = 0, // No activity for the last 10 seconds - k_EDeviceActivityLevel_UserInteraction = 1, // Activity (movement or prox sensor) is happening now - k_EDeviceActivityLevel_UserInteraction_Timeout = 2, // No activity for the last 0.5 seconds - k_EDeviceActivityLevel_Standby = 3, // Idle for at least 5 seconds (configurable in Settings -> Power Management) - k_EDeviceActivityLevel_Idle_Timeout = 4, -}; - - -/** VR controller button and axis IDs */ -enum EVRButtonId -{ - k_EButton_System = 0, - k_EButton_ApplicationMenu = 1, - k_EButton_Grip = 2, - k_EButton_DPad_Left = 3, - k_EButton_DPad_Up = 4, - k_EButton_DPad_Right = 5, - k_EButton_DPad_Down = 6, - k_EButton_A = 7, - - k_EButton_ProximitySensor = 31, - - k_EButton_Axis0 = 32, - k_EButton_Axis1 = 33, - k_EButton_Axis2 = 34, - k_EButton_Axis3 = 35, - k_EButton_Axis4 = 36, - - // aliases for well known controllers - k_EButton_SteamVR_Touchpad = k_EButton_Axis0, - k_EButton_SteamVR_Trigger = k_EButton_Axis1, - - k_EButton_Dashboard_Back = k_EButton_Grip, - - k_EButton_IndexController_A = k_EButton_Grip, - k_EButton_IndexController_B = k_EButton_ApplicationMenu, - k_EButton_IndexController_JoyStick = k_EButton_Axis3, - - k_EButton_Max = 64 -}; - -inline uint64_t ButtonMaskFromId( EVRButtonId id ) { return 1ull << id; } - -/** used for controller button events */ -struct VREvent_Controller_t -{ - uint32_t button; // EVRButtonId enum -}; - - -/** used for simulated mouse events in overlay space */ -enum EVRMouseButton -{ - VRMouseButton_Left = 0x0001, - VRMouseButton_Right = 0x0002, - VRMouseButton_Middle = 0x0004, -}; - - -/** used for simulated mouse events in overlay space */ -struct VREvent_Mouse_t -{ - float x, y; // co-ords are in GL space, bottom left of the texture is 0,0 - uint32_t button; // EVRMouseButton enum -}; - -/** used for simulated mouse wheel scroll */ -struct VREvent_Scroll_t -{ - float xdelta, ydelta; - uint32_t unused; - float viewportscale; // For scrolling on an overlay with laser mouse, this is the overlay's vertical size relative to the overlay height. Range: [0,1] -}; - -/** 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. -**/ -struct VREvent_TouchPadMove_t -{ - // true if the users finger is detected on the touch pad - bool bFingerDown; - - // How long the finger has been down in seconds - float flSecondsFingerDown; - - // These values indicate the starting finger position (so you can do some basic swipe stuff) - float fValueXFirst; - float fValueYFirst; - - // This is the raw sampled coordinate without deadzoning - float fValueXRaw; - float fValueYRaw; -}; - -/** notification related events. Details will still change at this point */ -struct VREvent_Notification_t -{ - uint64_t ulUserValue; - uint32_t notificationId; -}; - -/** Used for events about processes */ -struct VREvent_Process_t -{ - uint32_t pid; - uint32_t oldPid; - bool bForced; - // If the associated event was triggered by a connection loss - bool bConnectionLost; -}; - - -/** Used for a few events about overlays */ -struct VREvent_Overlay_t -{ - uint64_t overlayHandle; - uint64_t devicePath; - uint64_t memoryBlockId; -}; - - -/** Used for a few events about overlays */ -struct VREvent_Status_t -{ - uint32_t statusState; // EVRState enum -}; - -/** Used for keyboard events **/ -struct VREvent_Keyboard_t -{ - char cNewInput[8]; // Up to 11 bytes of new input - uint64_t uUserValue; // Possible flags about the new input -}; - -struct VREvent_Ipd_t -{ - float ipdMeters; -}; - -struct VREvent_Chaperone_t -{ - uint64_t m_nPreviousUniverse; - uint64_t m_nCurrentUniverse; -}; - -/** Not actually used for any events */ -struct VREvent_Reserved_t -{ - uint64_t reserved0; - uint64_t reserved1; - uint64_t reserved2; - uint64_t reserved3; - uint64_t reserved4; - uint64_t reserved5; -}; - -struct VREvent_PerformanceTest_t -{ - uint32_t m_nFidelityLevel; -}; - -struct VREvent_SeatedZeroPoseReset_t -{ - bool bResetBySystemMenu; -}; - -struct VREvent_Screenshot_t -{ - uint32_t handle; - uint32_t type; -}; - -struct VREvent_ScreenshotProgress_t -{ - float progress; -}; - -struct VREvent_ApplicationLaunch_t -{ - uint32_t pid; - uint32_t unArgsHandle; -}; - -struct VREvent_EditingCameraSurface_t -{ - uint64_t overlayHandle; - uint32_t nVisualMode; -}; - -struct VREvent_MessageOverlay_t -{ - uint32_t unVRMessageOverlayResponse; // vr::VRMessageOverlayResponse enum -}; - -struct VREvent_Property_t -{ - PropertyContainerHandle_t container; - ETrackedDeviceProperty prop; -}; - -struct VREvent_HapticVibration_t -{ - uint64_t containerHandle; // property container handle of the device with the haptic component - uint64_t componentHandle; // Which haptic component needs to vibrate - float fDurationSeconds; - float fFrequency; - float fAmplitude; -}; - -struct VREvent_WebConsole_t -{ - WebConsoleHandle_t webConsoleHandle; -}; - -struct VREvent_InputBindingLoad_t -{ - vr::PropertyContainerHandle_t ulAppContainer; - uint64_t pathMessage; - uint64_t pathUrl; - uint64_t pathControllerType; -}; - -struct VREvent_InputActionManifestLoad_t -{ - uint64_t pathAppKey; - uint64_t pathMessage; - uint64_t pathMessageParam; - uint64_t pathManifestPath; -}; - -struct VREvent_SpatialAnchor_t -{ - SpatialAnchorHandle_t unHandle; -}; - -struct VREvent_ProgressUpdate_t -{ - uint64_t ulApplicationPropertyContainer; - uint64_t pathDevice; - uint64_t pathInputSource; - uint64_t pathProgressAction; - uint64_t pathIcon; - float fProgress; -}; - -enum EShowUIType -{ - ShowUI_ControllerBinding = 0, - ShowUI_ManageTrackers = 1, - // ShowUI_QuickStart = 2, // Deprecated - ShowUI_Pairing = 3, - ShowUI_Settings = 4, - ShowUI_DebugCommands = 5, - ShowUI_FullControllerBinding = 6, - ShowUI_ManageDrivers = 7, -}; - -struct VREvent_ShowUI_t -{ - EShowUIType eType; -}; - -struct VREvent_ShowDevTools_t -{ - int32_t nBrowserIdentifier; -}; - -enum EHDCPError -{ - HDCPError_None = 0, - HDCPError_LinkLost = 1, - HDCPError_Tampered = 2, - HDCPError_DeviceRevoked = 3, - HDCPError_Unknown = 4 -}; - -struct VREvent_HDCPError_t -{ - EHDCPError eCode; -}; - -typedef union -{ - VREvent_Reserved_t reserved; - VREvent_Controller_t controller; - VREvent_Mouse_t mouse; - VREvent_Scroll_t scroll; - VREvent_Process_t process; - VREvent_Notification_t notification; - VREvent_Overlay_t overlay; - VREvent_Status_t status; - VREvent_Keyboard_t keyboard; - VREvent_Ipd_t ipd; - VREvent_Chaperone_t chaperone; - VREvent_PerformanceTest_t performanceTest; - VREvent_TouchPadMove_t touchPadMove; - VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset; - VREvent_Screenshot_t screenshot; - VREvent_ScreenshotProgress_t screenshotProgress; - VREvent_ApplicationLaunch_t applicationLaunch; - VREvent_EditingCameraSurface_t cameraSurface; - VREvent_MessageOverlay_t messageOverlay; - VREvent_Property_t property; - VREvent_HapticVibration_t hapticVibration; - VREvent_WebConsole_t webConsole; - VREvent_InputBindingLoad_t inputBinding; - VREvent_InputActionManifestLoad_t actionManifest; - VREvent_SpatialAnchor_t spatialAnchor; - VREvent_ProgressUpdate_t progressUpdate; - VREvent_ShowUI_t showUi; - VREvent_ShowDevTools_t showDevTools; - VREvent_HDCPError_t hdcpError; - /** NOTE!!! If you change this you MUST manually update openvr_interop.cs.py */ -} VREvent_Data_t; - - -#if defined(__linux__) || defined(__APPLE__) -// This structure was originally defined mis-packed on Linux, preserved for -// compatibility. -#pragma pack( push, 4 ) -#endif - -/** An event posted by the server to all running applications */ -struct VREvent_t -{ - uint32_t eventType; // EVREventType enum - TrackedDeviceIndex_t trackedDeviceIndex; - float eventAgeSeconds; - // event data must be the end of the struct as its size is variable - VREvent_Data_t data; -}; - -#if defined(__linux__) || defined(__APPLE__) -#pragma pack( pop ) -#endif - -typedef uint32_t VRComponentProperties; - -enum EVRComponentProperty -{ - VRComponentProperty_IsStatic = (1 << 0), - VRComponentProperty_IsVisible = (1 << 1), - VRComponentProperty_IsTouched = (1 << 2), - VRComponentProperty_IsPressed = (1 << 3), - VRComponentProperty_IsScrolled = (1 << 4), - VRComponentProperty_IsHighlighted = (1 << 5), -}; - - -/** Describes state information about a render-model component, including transforms and other dynamic properties */ -struct RenderModel_ComponentState_t -{ - HmdMatrix34_t mTrackingToComponentRenderModel; // Transform required when drawing the component render model - HmdMatrix34_t mTrackingToComponentLocal; // Transform available for attaching to a local component coordinate system (-Z out from surface ) - VRComponentProperties uProperties; -}; - - -enum EVRInputError -{ - VRInputError_None = 0, - VRInputError_NameNotFound = 1, - VRInputError_WrongType = 2, - VRInputError_InvalidHandle = 3, - VRInputError_InvalidParam = 4, - VRInputError_NoSteam = 5, - VRInputError_MaxCapacityReached = 6, - VRInputError_IPCError = 7, - VRInputError_NoActiveActionSet = 8, - VRInputError_InvalidDevice = 9, - VRInputError_InvalidSkeleton = 10, - VRInputError_InvalidBoneCount = 11, - VRInputError_InvalidCompressedData = 12, - VRInputError_NoData = 13, - VRInputError_BufferTooSmall = 14, - VRInputError_MismatchedActionManifest = 15, - VRInputError_MissingSkeletonData = 16, - VRInputError_InvalidBoneIndex = 17, - VRInputError_InvalidPriority = 18, - VRInputError_PermissionDenied = 19, - VRInputError_InvalidRenderModel = 20, -}; - -enum EVRSpatialAnchorError -{ - VRSpatialAnchorError_Success = 0, - VRSpatialAnchorError_Internal = 1, - VRSpatialAnchorError_UnknownHandle = 2, - VRSpatialAnchorError_ArrayTooSmall = 3, - VRSpatialAnchorError_InvalidDescriptorChar = 4, - VRSpatialAnchorError_NotYetAvailable = 5, - VRSpatialAnchorError_NotAvailableInThisUniverse = 6, - VRSpatialAnchorError_PermanentlyUnavailable = 7, - VRSpatialAnchorError_WrongDriver = 8, - VRSpatialAnchorError_DescriptorTooLong = 9, - VRSpatialAnchorError_Unknown = 10, - VRSpatialAnchorError_NoRoomCalibration = 11, - VRSpatialAnchorError_InvalidArgument = 12, - VRSpatialAnchorError_UnknownDriver = 13, -}; - -/** 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. */ -struct HiddenAreaMesh_t -{ - const HmdVector2_t *pVertexData; - uint32_t unTriangleCount; -}; - - -enum EHiddenAreaMeshType -{ - k_eHiddenAreaMesh_Standard = 0, - k_eHiddenAreaMesh_Inverse = 1, - k_eHiddenAreaMesh_LineLoop = 2, - - k_eHiddenAreaMesh_Max = 3, -}; - - -/** Identifies what kind of axis is on the controller at index n. Read this type -* with pVRSystem->Get( nControllerDeviceIndex, Prop_Axis0Type_Int32 + n ); -*/ -enum EVRControllerAxisType -{ - k_eControllerAxis_None = 0, - k_eControllerAxis_TrackPad = 1, - k_eControllerAxis_Joystick = 2, - k_eControllerAxis_Trigger = 3, // Analog trigger data is in the X axis -}; - - -/** contains information about one axis on the controller */ -struct VRControllerAxis_t -{ - float x; // Ranges from -1.0 to 1.0 for joysticks and track pads. Ranges from 0.0 to 1.0 for triggers were 0 is fully released. - float y; // Ranges from -1.0 to 1.0 for joysticks and track pads. Is always 0.0 for triggers. -}; - - -/** the number of axes in the controller state */ -static const uint32_t k_unControllerStateAxisCount = 5; - - -#if defined(__linux__) || defined(__APPLE__) -// This structure was originally defined mis-packed on Linux, preserved for -// compatibility. -#pragma pack( push, 4 ) -#endif - -/** Holds all the state of a controller at one moment in time. */ -struct VRControllerState001_t -{ - // If packet num matches that on your prior call, then the controller state hasn't been changed since - // your last call and there is no need to process it - uint32_t unPacketNum; - - // bit flags for each of the buttons. Use ButtonMaskFromId to turn an ID into a mask - uint64_t ulButtonPressed; - uint64_t ulButtonTouched; - - // Axis data for the controller's analog inputs - VRControllerAxis_t rAxis[ k_unControllerStateAxisCount ]; -}; -#if defined(__linux__) || defined(__APPLE__) -#pragma pack( pop ) -#endif - - -typedef VRControllerState001_t VRControllerState_t; - - -/** determines how to provide output to the application of various event processing functions. */ -enum EVRControllerEventOutputType -{ - ControllerEventOutput_OSEvents = 0, - ControllerEventOutput_VREvents = 1, -}; - - - -/** Collision Bounds Style */ -enum ECollisionBoundsStyle -{ - COLLISION_BOUNDS_STYLE_BEGINNER = 0, - COLLISION_BOUNDS_STYLE_INTERMEDIATE, - COLLISION_BOUNDS_STYLE_SQUARES, - COLLISION_BOUNDS_STYLE_ADVANCED, - COLLISION_BOUNDS_STYLE_NONE, - - COLLISION_BOUNDS_STYLE_COUNT -}; - -/** used to refer to a single VR overlay */ -typedef uint64_t VROverlayHandle_t; - -static const VROverlayHandle_t k_ulOverlayHandleInvalid = 0; - -/** Errors that can occur around VR overlays */ -enum EVROverlayError -{ - VROverlayError_None = 0, - - VROverlayError_UnknownOverlay = 10, - VROverlayError_InvalidHandle = 11, - VROverlayError_PermissionDenied = 12, - VROverlayError_OverlayLimitExceeded = 13, // No more overlays could be created because the maximum number already exist - VROverlayError_WrongVisibilityType = 14, - VROverlayError_KeyTooLong = 15, - VROverlayError_NameTooLong = 16, - VROverlayError_KeyInUse = 17, - VROverlayError_WrongTransformType = 18, - VROverlayError_InvalidTrackedDevice = 19, - VROverlayError_InvalidParameter = 20, - VROverlayError_ThumbnailCantBeDestroyed = 21, - VROverlayError_ArrayTooSmall = 22, - VROverlayError_RequestFailed = 23, - VROverlayError_InvalidTexture = 24, - VROverlayError_UnableToLoadFile = 25, - VROverlayError_KeyboardAlreadyInUse = 26, - VROverlayError_NoNeighbor = 27, - VROverlayError_TooManyMaskPrimitives = 29, - VROverlayError_BadMaskPrimitive = 30, - VROverlayError_TextureAlreadyLocked = 31, - VROverlayError_TextureLockCapacityReached = 32, - VROverlayError_TextureNotLocked = 33, -}; - -/** enum values to pass in to VR_Init to identify whether the application will -* draw a 3D scene. */ -enum EVRApplicationType -{ - VRApplication_Other = 0, // Some other kind of application that isn't covered by the other entries - VRApplication_Scene = 1, // Application will submit 3D frames - VRApplication_Overlay = 2, // Application only interacts with overlays - VRApplication_Background = 3, // Application should not start SteamVR if it's not already running, and should not - // keep it running if everything else quits. - VRApplication_Utility = 4, // Init should not try to load any drivers. The application needs access to utility - // interfaces (like IVRSettings and IVRApplications) but not hardware. - VRApplication_VRMonitor = 5, // Reserved for vrmonitor - VRApplication_SteamWatchdog = 6,// Reserved for Steam - VRApplication_Bootstrapper = 7, // reserved for vrstartup - VRApplication_WebHelper = 8, // reserved for vrwebhelper - VRApplication_OpenXRInstance = 9, // reserved for openxr (created instance, but not session yet) - VRApplication_OpenXRScene = 10, // reserved for openxr (started session) - VRApplication_OpenXROverlay = 11, // reserved for openxr (started overlay session) - VRApplication_Prism = 12, // reserved for the vrprismhost process - - VRApplication_Max -}; - - -/** returns true if the specified application type is one of the -* OpenXR types */ -inline bool IsOpenXRAppType( EVRApplicationType eType ) -{ - return eType == VRApplication_OpenXRInstance - || eType == VRApplication_OpenXRScene - || eType == VRApplication_OpenXROverlay; -} - - -/** error codes for firmware */ -enum EVRFirmwareError -{ - VRFirmwareError_None = 0, - VRFirmwareError_Success = 1, - VRFirmwareError_Fail = 2, -}; - - -/** error codes for notifications */ -enum EVRNotificationError -{ - VRNotificationError_OK = 0, - VRNotificationError_InvalidNotificationId = 100, - VRNotificationError_NotificationQueueFull = 101, - VRNotificationError_InvalidOverlayHandle = 102, - VRNotificationError_SystemWithUserValueAlreadyExists = 103, -}; - - -enum EVRSkeletalMotionRange -{ - // The range of motion of the skeleton takes into account any physical limits imposed by - // the controller itself. This will tend to be the most accurate pose compared to the user's - // actual hand pose, but might not allow a closed fist for example - VRSkeletalMotionRange_WithController = 0, - - // Retarget the range of motion provided by the input device to make the hand appear to move - // as if it was not holding a controller. eg: map "hand grasping controller" to "closed fist" - VRSkeletalMotionRange_WithoutController = 1, -}; - -enum EVRSkeletalTrackingLevel -{ - // body part location can't be directly determined by the device. Any skeletal pose provided by - // the device is estimated by assuming the position required to active buttons, triggers, joysticks, - // or other input sensors. - // E.g. Vive Controller, Gamepad - VRSkeletalTracking_Estimated = 0, - - // body part location can be measured directly but with fewer degrees of freedom than the actual body - // part. Certain body part positions may be unmeasured by the device and estimated from other input data. - // E.g. Index Controllers, gloves that only measure finger curl - VRSkeletalTracking_Partial = 1, - - // Body part location can be measured directly throughout the entire range of motion of the body part. - // E.g. Mocap suit for the full body, gloves that measure rotation of each finger segment - VRSkeletalTracking_Full = 2, - - VRSkeletalTrackingLevel_Count, - VRSkeletalTrackingLevel_Max = VRSkeletalTrackingLevel_Count - 1 -}; - - -/** Type used for referring to bones by their index */ -typedef int32_t BoneIndex_t; -const BoneIndex_t k_unInvalidBoneIndex = -1; - - -/** error codes returned by Vr_Init */ - -// Please add adequate error description to https://developer.valvesoftware.com/w/index.php?title=Category:SteamVRHelp -enum EVRInitError -{ - VRInitError_None = 0, - VRInitError_Unknown = 1, - - VRInitError_Init_InstallationNotFound = 100, - VRInitError_Init_InstallationCorrupt = 101, - VRInitError_Init_VRClientDLLNotFound = 102, - VRInitError_Init_FileNotFound = 103, - VRInitError_Init_FactoryNotFound = 104, - VRInitError_Init_InterfaceNotFound = 105, - VRInitError_Init_InvalidInterface = 106, - VRInitError_Init_UserConfigDirectoryInvalid = 107, - VRInitError_Init_HmdNotFound = 108, - VRInitError_Init_NotInitialized = 109, - VRInitError_Init_PathRegistryNotFound = 110, - VRInitError_Init_NoConfigPath = 111, - VRInitError_Init_NoLogPath = 112, - VRInitError_Init_PathRegistryNotWritable = 113, - VRInitError_Init_AppInfoInitFailed = 114, - VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver - VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup - VRInitError_Init_AnotherAppLaunching = 117, - VRInitError_Init_SettingsInitFailed = 118, - VRInitError_Init_ShuttingDown = 119, - VRInitError_Init_TooManyObjects = 120, - VRInitError_Init_NoServerForBackgroundApp = 121, - VRInitError_Init_NotSupportedWithCompositor = 122, - VRInitError_Init_NotAvailableToUtilityApps = 123, - VRInitError_Init_Internal = 124, - VRInitError_Init_HmdDriverIdIsNone = 125, - VRInitError_Init_HmdNotFoundPresenceFailed = 126, - VRInitError_Init_VRMonitorNotFound = 127, - VRInitError_Init_VRMonitorStartupFailed = 128, - VRInitError_Init_LowPowerWatchdogNotSupported = 129, - VRInitError_Init_InvalidApplicationType = 130, - VRInitError_Init_NotAvailableToWatchdogApps = 131, - VRInitError_Init_WatchdogDisabledInSettings = 132, - VRInitError_Init_VRDashboardNotFound = 133, - VRInitError_Init_VRDashboardStartupFailed = 134, - VRInitError_Init_VRHomeNotFound = 135, - VRInitError_Init_VRHomeStartupFailed = 136, - VRInitError_Init_RebootingBusy = 137, - VRInitError_Init_FirmwareUpdateBusy = 138, - VRInitError_Init_FirmwareRecoveryBusy = 139, - VRInitError_Init_USBServiceBusy = 140, - VRInitError_Init_VRWebHelperStartupFailed = 141, - VRInitError_Init_TrackerManagerInitFailed = 142, - VRInitError_Init_AlreadyRunning = 143, - VRInitError_Init_FailedForVrMonitor = 144, - VRInitError_Init_PropertyManagerInitFailed = 145, - VRInitError_Init_WebServerFailed = 146, - VRInitError_Init_IllegalTypeTransition = 147, - VRInitError_Init_MismatchedRuntimes = 148, - VRInitError_Init_InvalidProcessId = 149, - VRInitError_Init_VRServiceStartupFailed = 150, - VRInitError_Init_PrismNeedsNewDrivers = 151, - VRInitError_Init_PrismStartupTimedOut = 152, - VRInitError_Init_CouldNotStartPrism = 153, - VRInitError_Init_CreateDriverDirectDeviceFailed = 154, - VRInitError_Init_PrismExitedUnexpectedly = 155, - - VRInitError_Driver_Failed = 200, - VRInitError_Driver_Unknown = 201, - VRInitError_Driver_HmdUnknown = 202, - VRInitError_Driver_NotLoaded = 203, - VRInitError_Driver_RuntimeOutOfDate = 204, - VRInitError_Driver_HmdInUse = 205, - VRInitError_Driver_NotCalibrated = 206, - VRInitError_Driver_CalibrationInvalid = 207, - VRInitError_Driver_HmdDisplayNotFound = 208, - VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209, - // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons - VRInitError_Driver_HmdDriverIdOutOfBounds = 211, - VRInitError_Driver_HmdDisplayMirrored = 212, - VRInitError_Driver_HmdDisplayNotFoundLaptop = 213, - // Never make error 259 because we return it from main and it would conflict with STILL_ACTIVE - - VRInitError_IPC_ServerInitFailed = 300, - VRInitError_IPC_ConnectFailed = 301, - VRInitError_IPC_SharedStateInitFailed = 302, - VRInitError_IPC_CompositorInitFailed = 303, - VRInitError_IPC_MutexInitFailed = 304, - VRInitError_IPC_Failed = 305, - VRInitError_IPC_CompositorConnectFailed = 306, - VRInitError_IPC_CompositorInvalidConnectResponse = 307, - VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308, - VRInitError_IPC_ConnectFailedAfterTargetExited = 309, - VRInitError_IPC_NamespaceUnavailable = 310, - - VRInitError_Compositor_Failed = 400, - VRInitError_Compositor_D3D11HardwareRequired = 401, - VRInitError_Compositor_FirmwareRequiresUpdate = 402, - VRInitError_Compositor_OverlayInitFailed = 403, - VRInitError_Compositor_ScreenshotsInitFailed = 404, - VRInitError_Compositor_UnableToCreateDevice = 405, - VRInitError_Compositor_SharedStateIsNull = 406, - VRInitError_Compositor_NotificationManagerIsNull = 407, - VRInitError_Compositor_ResourceManagerClientIsNull = 408, - VRInitError_Compositor_MessageOverlaySharedStateInitFailure = 409, - VRInitError_Compositor_PropertiesInterfaceIsNull = 410, - VRInitError_Compositor_CreateFullscreenWindowFailed = 411, - VRInitError_Compositor_SettingsInterfaceIsNull = 412, - VRInitError_Compositor_FailedToShowWindow = 413, - VRInitError_Compositor_DistortInterfaceIsNull = 414, - VRInitError_Compositor_DisplayFrequencyFailure = 415, - VRInitError_Compositor_RendererInitializationFailed = 416, - VRInitError_Compositor_DXGIFactoryInterfaceIsNull = 417, - VRInitError_Compositor_DXGIFactoryCreateFailed = 418, - VRInitError_Compositor_DXGIFactoryQueryFailed = 419, - VRInitError_Compositor_InvalidAdapterDesktop = 420, - VRInitError_Compositor_InvalidHmdAttachment = 421, - VRInitError_Compositor_InvalidOutputDesktop = 422, - VRInitError_Compositor_InvalidDeviceProvided = 423, - VRInitError_Compositor_D3D11RendererInitializationFailed = 424, - VRInitError_Compositor_FailedToFindDisplayMode = 425, - VRInitError_Compositor_FailedToCreateSwapChain = 426, - VRInitError_Compositor_FailedToGetBackBuffer = 427, - VRInitError_Compositor_FailedToCreateRenderTarget = 428, - VRInitError_Compositor_FailedToCreateDXGI2SwapChain = 429, - VRInitError_Compositor_FailedtoGetDXGI2BackBuffer = 430, - VRInitError_Compositor_FailedToCreateDXGI2RenderTarget = 431, - VRInitError_Compositor_FailedToGetDXGIDeviceInterface = 432, - VRInitError_Compositor_SelectDisplayMode = 433, - VRInitError_Compositor_FailedToCreateNvAPIRenderTargets = 434, - VRInitError_Compositor_NvAPISetDisplayMode = 435, - VRInitError_Compositor_FailedToCreateDirectModeDisplay = 436, - VRInitError_Compositor_InvalidHmdPropertyContainer = 437, - VRInitError_Compositor_UpdateDisplayFrequency = 438, - VRInitError_Compositor_CreateRasterizerState = 439, - VRInitError_Compositor_CreateWireframeRasterizerState = 440, - VRInitError_Compositor_CreateSamplerState = 441, - VRInitError_Compositor_CreateClampToBorderSamplerState = 442, - VRInitError_Compositor_CreateAnisoSamplerState = 443, - VRInitError_Compositor_CreateOverlaySamplerState = 444, - VRInitError_Compositor_CreatePanoramaSamplerState = 445, - VRInitError_Compositor_CreateFontSamplerState = 446, - VRInitError_Compositor_CreateNoBlendState = 447, - VRInitError_Compositor_CreateBlendState = 448, - VRInitError_Compositor_CreateAlphaBlendState = 449, - VRInitError_Compositor_CreateBlendStateMaskR = 450, - VRInitError_Compositor_CreateBlendStateMaskG = 451, - VRInitError_Compositor_CreateBlendStateMaskB = 452, - VRInitError_Compositor_CreateDepthStencilState = 453, - VRInitError_Compositor_CreateDepthStencilStateNoWrite = 454, - VRInitError_Compositor_CreateDepthStencilStateNoDepth = 455, - VRInitError_Compositor_CreateFlushTexture = 456, - VRInitError_Compositor_CreateDistortionSurfaces = 457, - VRInitError_Compositor_CreateConstantBuffer = 458, - VRInitError_Compositor_CreateHmdPoseConstantBuffer = 459, - VRInitError_Compositor_CreateHmdPoseStagingConstantBuffer = 460, - VRInitError_Compositor_CreateSharedFrameInfoConstantBuffer = 461, - VRInitError_Compositor_CreateOverlayConstantBuffer = 462, - VRInitError_Compositor_CreateSceneTextureIndexConstantBuffer = 463, - VRInitError_Compositor_CreateReadableSceneTextureIndexConstantBuffer = 464, - VRInitError_Compositor_CreateLayerGraphicsTextureIndexConstantBuffer = 465, - VRInitError_Compositor_CreateLayerComputeTextureIndexConstantBuffer = 466, - VRInitError_Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer = 467, - VRInitError_Compositor_CreateComputeHmdPoseConstantBuffer = 468, - VRInitError_Compositor_CreateGeomConstantBuffer = 469, - VRInitError_Compositor_CreatePanelMaskConstantBuffer = 470, - VRInitError_Compositor_CreatePixelSimUBO = 471, - VRInitError_Compositor_CreateMSAARenderTextures = 472, - VRInitError_Compositor_CreateResolveRenderTextures = 473, - VRInitError_Compositor_CreateComputeResolveRenderTextures = 474, - VRInitError_Compositor_CreateDriverDirectModeResolveTextures = 475, - VRInitError_Compositor_OpenDriverDirectModeResolveTextures = 476, - VRInitError_Compositor_CreateFallbackSyncTexture = 477, - VRInitError_Compositor_ShareFallbackSyncTexture = 478, - VRInitError_Compositor_CreateOverlayIndexBuffer = 479, - VRInitError_Compositor_CreateOverlayVertexBuffer = 480, - VRInitError_Compositor_CreateTextVertexBuffer = 481, - VRInitError_Compositor_CreateTextIndexBuffer = 482, - VRInitError_Compositor_CreateMirrorTextures = 483, - VRInitError_Compositor_CreateLastFrameRenderTexture = 484, - VRInitError_Compositor_CreateMirrorOverlay = 485, - VRInitError_Compositor_FailedToCreateVirtualDisplayBackbuffer = 486, - VRInitError_Compositor_DisplayModeNotSupported = 487, - VRInitError_Compositor_CreateOverlayInvalidCall = 488, - VRInitError_Compositor_CreateOverlayAlreadyInitialized = 489, - VRInitError_Compositor_FailedToCreateMailbox = 490, - VRInitError_Compositor_WindowInterfaceIsNull = 491, - VRInitError_Compositor_SystemLayerCreateInstance = 492, - VRInitError_Compositor_SystemLayerCreateSession = 493, - - VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000, - VRInitError_VendorSpecific_WindowsNotInDevMode = 1001, - - VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101, - VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102, - VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103, - VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104, - VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105, - VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106, - VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107, - VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108, - VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109, - VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110, - VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111, - VRInitError_VendorSpecific_HmdFound_UserDataError = 1112, - VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113, - VRInitError_VendorSpecific_OculusRuntimeBadInstall = 1114, - - VRInitError_Steam_SteamInstallationNotFound = 2000, - - // Strictly a placeholder - VRInitError_LastError -}; - -enum EVRScreenshotType -{ - VRScreenshotType_None = 0, - VRScreenshotType_Mono = 1, // left eye only - VRScreenshotType_Stereo = 2, - VRScreenshotType_Cubemap = 3, - VRScreenshotType_MonoPanorama = 4, - VRScreenshotType_StereoPanorama = 5 -}; - -enum EVRScreenshotPropertyFilenames -{ - VRScreenshotPropertyFilenames_Preview = 0, - VRScreenshotPropertyFilenames_VR = 1, -}; - -enum EVRTrackedCameraError -{ - VRTrackedCameraError_None = 0, - VRTrackedCameraError_OperationFailed = 100, - VRTrackedCameraError_InvalidHandle = 101, - VRTrackedCameraError_InvalidFrameHeaderVersion = 102, - VRTrackedCameraError_OutOfHandles = 103, - VRTrackedCameraError_IPCFailure = 104, - VRTrackedCameraError_NotSupportedForThisDevice = 105, - VRTrackedCameraError_SharedMemoryFailure = 106, - VRTrackedCameraError_FrameBufferingFailure = 107, - VRTrackedCameraError_StreamSetupFailure = 108, - VRTrackedCameraError_InvalidGLTextureId = 109, - VRTrackedCameraError_InvalidSharedTextureHandle = 110, - VRTrackedCameraError_FailedToGetGLTextureId = 111, - VRTrackedCameraError_SharedTextureFailure = 112, - VRTrackedCameraError_NoFrameAvailable = 113, - VRTrackedCameraError_InvalidArgument = 114, - VRTrackedCameraError_InvalidFrameBufferSize = 115, -}; - -enum EVRTrackedCameraFrameLayout -{ - EVRTrackedCameraFrameLayout_Mono = 0x0001, - EVRTrackedCameraFrameLayout_Stereo = 0x0002, - EVRTrackedCameraFrameLayout_VerticalLayout = 0x0010, // Stereo frames are Top/Bottom (left/right) - EVRTrackedCameraFrameLayout_HorizontalLayout = 0x0020, // Stereo frames are Left/Right -}; - -enum EVRTrackedCameraFrameType -{ - VRTrackedCameraFrameType_Distorted = 0, // This is the camera video frame size in pixels, still distorted. - VRTrackedCameraFrameType_Undistorted, // In pixels, an undistorted inscribed rectangle region without invalid regions. This size is subject to changes shortly. - VRTrackedCameraFrameType_MaximumUndistorted, // In pixels, maximum undistorted with invalid regions. Non zero alpha component identifies valid regions. - MAX_CAMERA_FRAME_TYPES -}; - -enum EVRDistortionFunctionType -{ - VRDistortionFunctionType_None, - VRDistortionFunctionType_FTheta, - VRDistortionFunctionType_Extended_FTheta, - MAX_DISTORTION_FUNCTION_TYPES, -}; - -static const uint32_t k_unMaxDistortionFunctionParameters = 8; - -typedef uint64_t TrackedCameraHandle_t; -#define INVALID_TRACKED_CAMERA_HANDLE ((vr::TrackedCameraHandle_t)0) - -struct CameraVideoStreamFrameHeader_t -{ - EVRTrackedCameraFrameType eFrameType; - - uint32_t nWidth; - uint32_t nHeight; - uint32_t nBytesPerPixel; - - uint32_t nFrameSequence; - - TrackedDevicePose_t trackedDevicePose; - - uint64_t ulFrameExposureTime; // mid-point of the exposure of the image in host system ticks -}; - -// Screenshot types -typedef uint32_t ScreenshotHandle_t; - -static const uint32_t k_unScreenshotHandleInvalid = 0; - -/** Compositor frame timing reprojection flags. */ -const uint32_t VRCompositor_ReprojectionReason_Cpu = 0x01; -const uint32_t VRCompositor_ReprojectionReason_Gpu = 0x02; -const uint32_t VRCompositor_ReprojectionAsync = 0x04; // This flag indicates the async reprojection mode is active, - // but does not indicate if reprojection actually happened or not. - // Use the ReprojectionReason flags above to check if reprojection - // was actually applied (i.e. scene texture was reused). - // NumFramePresents > 1 also indicates the scene texture was reused, - // and also the number of times that it was presented in total. - -const uint32_t VRCompositor_ReprojectionMotion = 0x08; // This flag indicates whether or not motion smoothing was triggered for this frame - -const uint32_t VRCompositor_PredictionMask = 0xF0; // The runtime may predict more than one frame (up to four) ahead if - // it detects the application is taking too long to render. These two - // bits will contain the count of additional frames (normally zero). - // Use the VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES macro to read from - // the latest frame timing entry. - -const uint32_t VRCompositor_ThrottleMask = 0xF00; // Number of frames the compositor is throttling the application. - // Use the VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES macro to read from - // the latest frame timing entry. - -#define VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_PredictionMask ) >> 4 ) -#define VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_ThrottleMask ) >> 8 ) - -/** Provides a single frame's timing information to the app */ -struct Compositor_FrameTiming -{ - uint32_t m_nSize; // Set to sizeof( Compositor_FrameTiming ) - uint32_t m_nFrameIndex; - uint32_t m_nNumFramePresents; // number of times this frame was presented - uint32_t m_nNumMisPresented; // number of times this frame was presented on a vsync other than it was originally predicted to - uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out - uint32_t m_nReprojectionFlags; - - /** Absolute time reference for comparing frames. This aligns with the vsync that running start is relative to. */ - double m_flSystemTimeInSeconds; - - /** These times may include work from other processes due to OS scheduling. - * The fewer packets of work these are broken up into, the less likely this will happen. - * GPU work can be broken up by calling Flush. This can sometimes be useful to get the GPU started - * processing that work earlier in the frame. */ - float m_flPreSubmitGpuMs; // time spent rendering the scene (gpu work submitted between WaitGetPoses and second Submit) - float m_flPostSubmitGpuMs; // additional time spent rendering by application (e.g. companion window) - float m_flTotalRenderGpuMs; // time between work submitted immediately after present (ideally vsync) until the end of compositor submitted work - float m_flCompositorRenderGpuMs; // time spend performing distortion correction, rendering chaperone, overlays, etc. - float m_flCompositorRenderCpuMs; // time spent on cpu submitting the above work for this frame - float m_flCompositorIdleCpuMs; // time spent waiting for running start (application could have used this much more time) - - /** Miscellaneous measured intervals. */ - float m_flClientFrameIntervalMs; // time between calls to WaitGetPoses - float m_flPresentCallCpuMs; // time blocked on call to present (usually 0.0, but can go long) - float m_flWaitForPresentCpuMs; // time spent spin-waiting for frame index to change (not near-zero indicates wait object failure) - float m_flSubmitFrameMs; // time spent in IVRCompositor::Submit (not near-zero indicates driver issue) - - /** The following are all relative to this frame's SystemTimeInSeconds */ - float m_flWaitGetPosesCalledMs; - float m_flNewPosesReadyMs; - float m_flNewFrameReadyMs; // second call to IVRCompositor::Submit - float m_flCompositorUpdateStartMs; - float m_flCompositorUpdateEndMs; - float m_flCompositorRenderStartMs; - - vr::TrackedDevicePose_t m_HmdPose; // pose used by app to render this frame - - uint32_t m_nNumVSyncsReadyForUse; - uint32_t m_nNumVSyncsToFirstView; -}; - -/** Provides compositor benchmark results to the app */ -struct Compositor_BenchmarkResults -{ - float m_flMegaPixelsPerSecond; // Measurement of GPU MP/s performed by compositor benchmark - float m_flHmdRecommendedMegaPixelsPerSecond; // Recommended default MP/s given the HMD resolution, refresh, and panel mask. -}; - -/** Frame timing data provided by direct mode drivers. */ -struct DriverDirectMode_FrameTiming -{ - uint32_t m_nSize; // Set to sizeof( DriverDirectMode_FrameTiming ) - uint32_t m_nNumFramePresents; // number of times frame was presented - uint32_t m_nNumMisPresented; // number of times frame was presented on a vsync other than it was originally predicted to - uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out (i.e. compositor missed vsync) - uint32_t m_nReprojectionFlags; -}; - -/** These flags will be set on DriverDirectMode_FrameTiming::m_nReprojectionFlags when IVRDriverDirectModeComponent::GetFrameTiming is called for drivers to optionally respond to. */ -const uint32_t VRCompositor_ReprojectionMotion_Enabled = 0x100; // Motion Smoothing is enabled in the UI for the currently running application -const uint32_t VRCompositor_ReprojectionMotion_ForcedOn = 0x200; // Motion Smoothing is forced on in the UI for the currently running application -const uint32_t VRCompositor_ReprojectionMotion_AppThrottled = 0x400; // Application is requesting throttling via ForceInterleavedReprojectionOn - - -enum EVSync -{ - VSync_None, - VSync_WaitRender, // block following render work until vsync - VSync_NoWaitRender, // do not block following render work (allow to get started early) -}; - -enum EVRMuraCorrectionMode -{ - EVRMuraCorrectionMode_Default = 0, - EVRMuraCorrectionMode_NoCorrection -}; - -/** raw IMU data provided by IVRIOBuffer from paths to tracked devices with IMUs */ -enum Imu_OffScaleFlags -{ - OffScale_AccelX = 0x01, - OffScale_AccelY = 0x02, - OffScale_AccelZ = 0x04, - OffScale_GyroX = 0x08, - OffScale_GyroY = 0x10, - OffScale_GyroZ = 0x20, -}; - -struct ImuSample_t -{ - double fSampleTime; - HmdVector3d_t vAccel; - HmdVector3d_t vGyro; - uint32_t unOffScaleFlags; -}; - -#pragma pack( pop ) - -// figure out how to import from the VR API dll -#if defined(_WIN32) - - #if !defined(OPENVR_BUILD_STATIC) - #ifdef VR_API_EXPORT - #define VR_INTERFACE extern "C" __declspec( dllexport ) - #else - #define VR_INTERFACE extern "C" __declspec( dllimport ) - #endif - #else - #define VR_INTERFACE extern "C" - #endif - -#elif defined(__GNUC__) || defined(COMPILER_GCC) || defined(__APPLE__) - -#ifdef VR_API_EXPORT - #define VR_INTERFACE extern "C" __attribute__((visibility("default"))) -#else - #define VR_INTERFACE extern "C" -#endif - -#else - #error "Unsupported Platform." -#endif - - -#if defined( _WIN32 ) - #define VR_CALLTYPE __cdecl -#else - #define VR_CALLTYPE -#endif - -} // namespace vr -#endif // _INCLUDE_VRTYPES_H - -// vrannotation.h - -#ifdef API_GEN -# define VR_CLANG_ATTR(ATTR) __attribute__((annotate( ATTR ))) -#else -# define VR_CLANG_ATTR(ATTR) -#endif - -#define VR_METHOD_DESC(DESC) VR_CLANG_ATTR( "desc:" #DESC ";" ) -#define VR_IGNOREATTR() VR_CLANG_ATTR( "ignore" ) -#define VR_OUT_STRUCT() VR_CLANG_ATTR( "out_struct: ;" ) -#define VR_OUT_STRING() VR_CLANG_ATTR( "out_string: ;" ) -#define VR_OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) VR_CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" ) -#define VR_OUT_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "out_array_count:" #COUNTER ";" ) -#define VR_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "array_count:" #COUNTER ";" ) -#define VR_ARRAY_COUNT_D(COUNTER, DESC) VR_CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC ) -#define VR_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "buffer_count:" #COUNTER ";" ) -#define VR_OUT_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "out_buffer_count:" #COUNTER ";" ) -#define VR_OUT_STRING_COUNT(COUNTER) VR_CLANG_ATTR( "out_string_count:" #COUNTER ";" ) - -// ivrsystem.h - -namespace vr -{ - -class IVRSystem -{ -public: - - - // ------------------------------------ - // Display Methods - // ------------------------------------ - - /** Suggested size for the intermediate render target that the distortion pulls from. */ - virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0; - - /** The projection matrix for the specified eye */ - virtual HmdMatrix44_t GetProjectionMatrix( EVREye eEye, float fNearZ, float fFarZ ) = 0; - - /** The components necessary to build your own projection matrix in case your - * application is doing something fancy like infinite Z */ - virtual void GetProjectionRaw( EVREye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0; - - /** 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. */ - virtual bool ComputeDistortion( EVREye eEye, float fU, float fV, DistortionCoordinates_t *pDistortionCoordinates ) = 0; - - /** 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. - */ - virtual HmdMatrix34_t GetEyeToHeadTransform( EVREye eEye ) = 0; - - /** 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. */ - virtual bool GetTimeSinceLastVsync( float *pfSecondsSinceLastVsync, uint64_t *pulFrameCounter ) = 0; - - /** [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. - */ - virtual int32_t GetD3D9AdapterIndex() = 0; - - /** [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. - */ - virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex ) = 0; - - /** - * 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 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. - */ - virtual void GetOutputDevice( uint64_t *pnDevice, ETextureType textureType, VkInstance_T *pInstance = nullptr ) = 0; - - // ------------------------------------ - // Display Mode methods - // ------------------------------------ - - /** Use to determine if the headset display is part of the desktop (i.e. extended) or hidden (i.e. direct mode). */ - virtual bool IsDisplayOnDesktop() = 0; - - /** Set the display visibility (true = extended, false = direct mode). Return value of true indicates that the change was successful. */ - virtual bool SetDisplayVisibility( bool bIsVisibleOnDesktop ) = 0; - - // ------------------------------------ - // Tracking Methods - // ------------------------------------ - - /** 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. - */ - virtual void GetDeviceToAbsoluteTrackingPose( ETrackingUniverseOrigin eOrigin, float fPredictedSecondsToPhotonsFromNow, VR_ARRAY_COUNT(unTrackedDevicePoseArrayCount) TrackedDevicePose_t *pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount ) = 0; - - /** 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. */ - virtual HmdMatrix34_t GetSeatedZeroPoseToStandingAbsoluteTrackingPose() = 0; - - /** 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. */ - virtual HmdMatrix34_t GetRawZeroPoseToStandingAbsoluteTrackingPose() = 0; - - /** 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. */ - virtual uint32_t GetSortedTrackedDeviceIndicesOfClass( ETrackedDeviceClass eTrackedDeviceClass, VR_ARRAY_COUNT(unTrackedDeviceIndexArrayCount) vr::TrackedDeviceIndex_t *punTrackedDeviceIndexArray, uint32_t unTrackedDeviceIndexArrayCount, vr::TrackedDeviceIndex_t unRelativeToTrackedDeviceIndex = k_unTrackedDeviceIndex_Hmd ) = 0; - - /** Returns the level of activity on the device. */ - virtual EDeviceActivityLevel GetTrackedDeviceActivityLevel( vr::TrackedDeviceIndex_t unDeviceId ) = 0; - - /** Convenience utility to apply the specified transform to the specified pose. - * This properly transforms all pose components, including velocity and angular velocity - */ - virtual void ApplyTransform( TrackedDevicePose_t *pOutputPose, const TrackedDevicePose_t *pTrackedDevicePose, const HmdMatrix34_t *pTransform ) = 0; - - /** Returns 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. */ - virtual vr::TrackedDeviceIndex_t GetTrackedDeviceIndexForControllerRole( vr::ETrackedControllerRole unDeviceType ) = 0; - - /** Returns the controller type associated with a device index. This function is deprecated in favor of the new IVRInput system. */ - virtual vr::ETrackedControllerRole GetControllerRoleForTrackedDeviceIndex( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0; - - // ------------------------------------ - // Property methods - // ------------------------------------ - - /** 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. */ - virtual ETrackedDeviceClass GetTrackedDeviceClass( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0; - - /** Returns true if there is a device connected in this slot. */ - virtual bool IsTrackedDeviceConnected( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0; - - /** Returns a bool property. If the device index is not valid or the property is not a bool type this function will return false. */ - virtual bool GetBoolTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0; - - /** Returns a float property. If the device index is not valid or the property is not a float type this function will return 0. */ - virtual float GetFloatTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0; - - /** Returns an int property. If the device index is not valid or the property is not a int type this function will return 0. */ - virtual int32_t GetInt32TrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0; - - /** Returns a uint64 property. If the device index is not valid or the property is not a uint64 type this function will return 0. */ - virtual uint64_t GetUint64TrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0; - - /** Returns a matrix property. If the device index is not valid or the property is not a matrix type, this function will return identity. */ - virtual HmdMatrix34_t GetMatrix34TrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ) = 0; - - /** 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. */ - virtual uint32_t GetArrayTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, PropertyTypeTag_t propType, void *pBuffer, uint32_t unBufferSize, ETrackedPropertyError *pError = 0L ) = 0; - - /** 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. */ - virtual uint32_t GetStringTrackedDeviceProperty( vr::TrackedDeviceIndex_t unDeviceIndex, ETrackedDeviceProperty prop, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, ETrackedPropertyError *pError = 0L ) = 0; - - /** 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 */ - virtual const char *GetPropErrorNameFromEnum( ETrackedPropertyError error ) = 0; - - // ------------------------------------ - // Event methods - // ------------------------------------ - - /** 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 */ - virtual bool PollNextEvent( VREvent_t *pEvent, uint32_t uncbVREvent ) = 0; - - /** 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 */ - virtual bool PollNextEventWithPose( ETrackingUniverseOrigin eOrigin, VREvent_t *pEvent, uint32_t uncbVREvent, vr::TrackedDevicePose_t *pTrackedDevicePose ) = 0; - - /** returns the name of an EVREvent enum value */ - virtual const char *GetEventTypeNameFromEnum( EVREventType eType ) = 0; - - // ------------------------------------ - // Rendering helper methods - // ------------------------------------ - - /** 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. - */ - virtual HiddenAreaMesh_t GetHiddenAreaMesh( EVREye eEye, EHiddenAreaMeshType type = k_eHiddenAreaMesh_Standard ) = 0; - - // ------------------------------------ - // Controller methods - // ------------------------------------ - - /** 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. */ - virtual bool GetControllerState( vr::TrackedDeviceIndex_t unControllerDeviceIndex, vr::VRControllerState_t *pControllerState, uint32_t unControllerStateSize ) = 0; - - /** 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. */ - virtual bool GetControllerStateWithPose( ETrackingUniverseOrigin eOrigin, vr::TrackedDeviceIndex_t unControllerDeviceIndex, vr::VRControllerState_t *pControllerState, uint32_t unControllerStateSize, TrackedDevicePose_t *pTrackedDevicePose ) = 0; - - /** 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. */ - virtual void TriggerHapticPulse( vr::TrackedDeviceIndex_t unControllerDeviceIndex, uint32_t unAxisId, unsigned short usDurationMicroSec ) = 0; - - /** returns the name of an EVRButtonId enum value. This function is deprecated in favor of the new IVRInput system. */ - virtual const char *GetButtonIdNameFromEnum( EVRButtonId eButtonId ) = 0; - - /** returns the name of an EVRControllerAxisType enum value. This function is deprecated in favor of the new IVRInput system. */ - virtual const char *GetControllerAxisTypeNameFromEnum( EVRControllerAxisType eAxisType ) = 0; - - /** Returns true if this application is receiving input from the system. This would return false if - * system-related functionality is consuming the input stream. */ - virtual bool IsInputAvailable() = 0; - - /** 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. */ - virtual bool IsSteamVRDrawingControllers() = 0; - - /** 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. */ - virtual bool ShouldApplicationPause() = 0; - - /** 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. */ - virtual bool ShouldApplicationReduceRenderingWork() = 0; - - // ------------------------------------ - // Firmware methods - // ------------------------------------ - - /** 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 */ - virtual vr::EVRFirmwareError PerformFirmwareUpdate( vr::TrackedDeviceIndex_t unDeviceIndex ) = 0; - - // ------------------------------------ - // Application life cycle methods - // ------------------------------------ - - /** 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. */ - virtual void AcknowledgeQuit_Exiting() = 0; - - // ------------------------------------- - // App container sandbox methods - // ------------------------------------- - - /** 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. */ - virtual uint32_t GetAppContainerFilePaths( VR_OUT_STRING() char *pchBuffer, uint32_t unBufferSize ) = 0; - - // ------------------------------------- - // System methods - // ------------------------------------- - - /** 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. */ - virtual const char *GetRuntimeVersion() = 0; - -}; - -static const char * const IVRSystem_Version = "IVRSystem_022"; - -} - - -// ivrapplications.h - -namespace vr -{ - - /** Used for all errors reported by the IVRApplications interface */ - enum EVRApplicationError - { - VRApplicationError_None = 0, - - VRApplicationError_AppKeyAlreadyExists = 100, // Only one application can use any given key - VRApplicationError_NoManifest = 101, // the running application does not have a manifest - VRApplicationError_NoApplication = 102, // No application is running - VRApplicationError_InvalidIndex = 103, - VRApplicationError_UnknownApplication = 104, // the application could not be found - VRApplicationError_IPCFailed = 105, // An IPC failure caused the request to fail - VRApplicationError_ApplicationAlreadyRunning = 106, - VRApplicationError_InvalidManifest = 107, - VRApplicationError_InvalidApplication = 108, - VRApplicationError_LaunchFailed = 109, // the process didn't start - VRApplicationError_ApplicationAlreadyStarting = 110, // the system was already starting the same application - VRApplicationError_LaunchInProgress = 111, // The system was already starting a different application - VRApplicationError_OldApplicationQuitting = 112, - VRApplicationError_TransitionAborted = 113, - VRApplicationError_IsTemplate = 114, // error when you try to call LaunchApplication() on a template type app (use LaunchTemplateApplication) - VRApplicationError_SteamVRIsExiting = 115, - - VRApplicationError_BufferTooSmall = 200, // The provided buffer was too small to fit the requested data - VRApplicationError_PropertyNotSet = 201, // The requested property was not set - VRApplicationError_UnknownProperty = 202, - VRApplicationError_InvalidParameter = 203, - - VRApplicationError_NotImplemented = 300, // Fcn is not implemented in current interface - }; - - /** The maximum length of an application key */ - static const uint32_t k_unMaxApplicationKeyLength = 128; - - /** these are the properties available on applications. */ - enum EVRApplicationProperty - { - VRApplicationProperty_Name_String = 0, - - VRApplicationProperty_LaunchType_String = 11, - VRApplicationProperty_WorkingDirectory_String = 12, - VRApplicationProperty_BinaryPath_String = 13, - VRApplicationProperty_Arguments_String = 14, - VRApplicationProperty_URL_String = 15, - - VRApplicationProperty_Description_String = 50, - VRApplicationProperty_NewsURL_String = 51, - VRApplicationProperty_ImagePath_String = 52, - VRApplicationProperty_Source_String = 53, - VRApplicationProperty_ActionManifestURL_String = 54, - - VRApplicationProperty_IsDashboardOverlay_Bool = 60, - VRApplicationProperty_IsTemplate_Bool = 61, - VRApplicationProperty_IsInstanced_Bool = 62, - VRApplicationProperty_IsInternal_Bool = 63, - VRApplicationProperty_WantsCompositorPauseInStandby_Bool = 64, - VRApplicationProperty_IsHidden_Bool = 65, - - VRApplicationProperty_LastLaunchTime_Uint64 = 70, - }; - - enum EVRSceneApplicationState - { - EVRSceneApplicationState_None = 0, // Scene Application is not running - EVRSceneApplicationState_Starting = 1, // Scene Application is starting - EVRSceneApplicationState_Quitting = 2, // Scene Application is quitting - EVRSceneApplicationState_Running = 3, // Scene Application is running, and submitting frames, a custom skybox, or a visible overlay - EVRSceneApplicationState_Waiting = 4, // Scene Application is running, but not drawing anything - }; - - struct AppOverrideKeys_t - { - const char *pchKey; - const char *pchValue; - }; - - /** Currently recognized mime types */ - static const char * const k_pch_MimeType_HomeApp = "vr/home"; - static const char * const k_pch_MimeType_GameTheater = "vr/game_theater"; - - class IVRApplications - { - public: - - // --------------- Application management --------------- // - - /** Adds an application manifest to the list to load when building the list of installed applications. - * Temporary manifests are not automatically loaded */ - virtual EVRApplicationError AddApplicationManifest( const char *pchApplicationManifestFullPath, bool bTemporary = false ) = 0; - - /** Removes an application manifest from the list to load when building the list of installed applications. */ - virtual EVRApplicationError RemoveApplicationManifest( const char *pchApplicationManifestFullPath ) = 0; - - /** Returns true if an application is installed */ - virtual bool IsApplicationInstalled( const char *pchAppKey ) = 0; - - /** Returns the number of applications available in the list */ - virtual uint32_t GetApplicationCount() = 0; - - /** 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. */ - virtual EVRApplicationError GetApplicationKeyByIndex( uint32_t unApplicationIndex, VR_OUT_STRING() char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0; - - /** 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. */ - virtual EVRApplicationError GetApplicationKeyByProcessId( uint32_t unProcessId, VR_OUT_STRING() char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0; - - /** 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. */ - virtual EVRApplicationError LaunchApplication( const char *pchAppKey ) = 0; - - /** 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 - */ - virtual EVRApplicationError LaunchTemplateApplication( const char *pchTemplateAppKey, const char *pchNewAppKey, VR_ARRAY_COUNT( unKeys ) const AppOverrideKeys_t *pKeys, uint32_t unKeys ) = 0; - - /** launches the application currently associated with this mime type and passes it the option args, typically the filename or object name of the item being launched */ - virtual vr::EVRApplicationError LaunchApplicationFromMimeType( const char *pchMimeType, const char *pchArgs ) = 0; - - /** Launches the dashboard overlay application if it is not already running. This call is only valid for - * dashboard overlay applications. */ - virtual EVRApplicationError LaunchDashboardOverlay( const char *pchAppKey ) = 0; - - /** Cancel a pending launch for an application */ - virtual bool CancelApplicationLaunch( const char *pchAppKey ) = 0; - - /** 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. */ - virtual EVRApplicationError IdentifyApplication( uint32_t unProcessId, const char *pchAppKey ) = 0; - - /** Returns the process ID for an application. Return 0 if the application was not found or is not running. */ - virtual uint32_t GetApplicationProcessId( const char *pchAppKey ) = 0; - - /** Returns a string for an applications error */ - virtual const char *GetApplicationsErrorNameFromEnum( EVRApplicationError error ) = 0; - - // --------------- Application properties --------------- // - - /** Returns a value for an application property. The required buffer size to fit this value will be returned. */ - virtual uint32_t GetApplicationPropertyString( const char *pchAppKey, EVRApplicationProperty eProperty, VR_OUT_STRING() char *pchPropertyValueBuffer, uint32_t unPropertyValueBufferLen, EVRApplicationError *peError = nullptr ) = 0; - - /** Returns a bool value for an application property. Returns false in all error cases. */ - virtual bool GetApplicationPropertyBool( const char *pchAppKey, EVRApplicationProperty eProperty, EVRApplicationError *peError = nullptr ) = 0; - - /** Returns a uint64 value for an application property. Returns 0 in all error cases. */ - virtual uint64_t GetApplicationPropertyUint64( const char *pchAppKey, EVRApplicationProperty eProperty, EVRApplicationError *peError = nullptr ) = 0; - - /** Sets the application auto-launch flag. This is only valid for applications which return true for VRApplicationProperty_IsDashboardOverlay_Bool. */ - virtual EVRApplicationError SetApplicationAutoLaunch( const char *pchAppKey, bool bAutoLaunch ) = 0; - - /** Gets the application auto-launch flag. This is only valid for applications which return true for VRApplicationProperty_IsDashboardOverlay_Bool. */ - virtual bool GetApplicationAutoLaunch( const char *pchAppKey ) = 0; - - /** Adds this mime-type to the list of supported mime types for this application*/ - virtual EVRApplicationError SetDefaultApplicationForMimeType( const char *pchAppKey, const char *pchMimeType ) = 0; - - /** return the app key that will open this mime type */ - virtual bool GetDefaultApplicationForMimeType( const char *pchMimeType, VR_OUT_STRING() char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0; - - /** Get the list of supported mime types for this application, comma-delimited */ - virtual bool GetApplicationSupportedMimeTypes( const char *pchAppKey, VR_OUT_STRING() char *pchMimeTypesBuffer, uint32_t unMimeTypesBuffer ) = 0; - - /** Get 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 string */ - virtual uint32_t GetApplicationsThatSupportMimeType( const char *pchMimeType, VR_OUT_STRING() char *pchAppKeysThatSupportBuffer, uint32_t unAppKeysThatSupportBuffer ) = 0; - - /** Get the args list from an app launch that had the process already running, you call this when you get a VREvent_ApplicationMimeTypeLoad */ - virtual uint32_t GetApplicationLaunchArguments( uint32_t unHandle, VR_OUT_STRING() char *pchArgs, uint32_t unArgs ) = 0; - - // --------------- Transition methods --------------- // - - /** Returns the app key for the application that is starting up */ - virtual EVRApplicationError GetStartingApplication( VR_OUT_STRING() char *pchAppKeyBuffer, uint32_t unAppKeyBufferLen ) = 0; - - /** Returns the application transition state */ - virtual EVRSceneApplicationState GetSceneApplicationState() = 0; - - /** 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. - */ - virtual EVRApplicationError PerformApplicationPrelaunchCheck( const char *pchAppKey ) = 0; - - /** Returns a string for an application transition state */ - virtual const char *GetSceneApplicationStateNameFromEnum( EVRSceneApplicationState state ) = 0; - - /** 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. */ - virtual EVRApplicationError LaunchInternalProcess( const char *pchBinaryPath, const char *pchArguments, const char *pchWorkingDirectory ) = 0; - - /** 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. */ - virtual uint32_t GetCurrentSceneProcessId() = 0; - }; - - static const char * const IVRApplications_Version = "IVRApplications_007"; - -} // namespace vr - -// ivrsettings.h - -#include - -namespace vr -{ - enum EVRSettingsError - { - VRSettingsError_None = 0, - VRSettingsError_IPCFailed = 1, - VRSettingsError_WriteFailed = 2, - VRSettingsError_ReadFailed = 3, - VRSettingsError_JsonParseFailed = 4, - VRSettingsError_UnsetSettingHasNoDefault = 5, // This will be returned if the setting does not appear in the appropriate default file and has not been set - }; - - // The maximum length of a settings key - static const uint32_t k_unMaxSettingsKeyLength = 128; - - class IVRSettings - { - public: - virtual const char *GetSettingsErrorNameFromEnum( EVRSettingsError eError ) = 0; - - virtual void SetBool( const char *pchSection, const char *pchSettingsKey, bool bValue, EVRSettingsError *peError = nullptr ) = 0; - virtual void SetInt32( const char *pchSection, const char *pchSettingsKey, int32_t nValue, EVRSettingsError *peError = nullptr ) = 0; - virtual void SetFloat( const char *pchSection, const char *pchSettingsKey, float flValue, EVRSettingsError *peError = nullptr ) = 0; - virtual void SetString( const char *pchSection, const char *pchSettingsKey, const char *pchValue, EVRSettingsError *peError = nullptr ) = 0; - - // 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 "" - virtual bool GetBool( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; - virtual int32_t GetInt32( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; - virtual float GetFloat( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; - virtual void GetString( const char *pchSection, const char *pchSettingsKey, VR_OUT_STRING() char *pchValue, uint32_t unValueLen, EVRSettingsError *peError = nullptr ) = 0; - - virtual void RemoveSection( const char *pchSection, EVRSettingsError *peError = nullptr ) = 0; - virtual void RemoveKeyInSection( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; - }; - - //----------------------------------------------------------------------------- - static const char * const IVRSettings_Version = "IVRSettings_003"; - - class CVRSettingHelper - { - IVRSettings *m_pSettings; - public: - CVRSettingHelper( IVRSettings *pSettings ) - { - m_pSettings = pSettings; - } - - const char *GetSettingsErrorNameFromEnum( EVRSettingsError eError ) - { - return m_pSettings->GetSettingsErrorNameFromEnum( eError ); - } - - void SetBool( const char *pchSection, const char *pchSettingsKey, bool bValue, EVRSettingsError *peError = nullptr ) - { - m_pSettings->SetBool( pchSection, pchSettingsKey, bValue, peError ); - } - - void SetInt32( const char *pchSection, const char *pchSettingsKey, int32_t nValue, EVRSettingsError *peError = nullptr ) - { - m_pSettings->SetInt32( pchSection, pchSettingsKey, nValue, peError ); - } - void SetFloat( const char *pchSection, const char *pchSettingsKey, float flValue, EVRSettingsError *peError = nullptr ) - { - m_pSettings->SetFloat( pchSection, pchSettingsKey, flValue, peError ); - } - void SetString( const char *pchSection, const char *pchSettingsKey, const char *pchValue, EVRSettingsError *peError = nullptr ) - { - m_pSettings->SetString( pchSection, pchSettingsKey, pchValue, peError ); - } - void SetString( const std::string & sSection, const std::string & sSettingsKey, const std::string & sValue, EVRSettingsError *peError = nullptr ) - { - m_pSettings->SetString( sSection.c_str(), sSettingsKey.c_str(), sValue.c_str(), peError ); - } - - bool GetBool( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) - { - return m_pSettings->GetBool( pchSection, pchSettingsKey, peError ); - } - int32_t GetInt32( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) - { - return m_pSettings->GetInt32( pchSection, pchSettingsKey, peError ); - } - float GetFloat( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) - { - return m_pSettings->GetFloat( pchSection, pchSettingsKey, peError ); - } - void GetString( const char *pchSection, const char *pchSettingsKey, VR_OUT_STRING() char *pchValue, uint32_t unValueLen, EVRSettingsError *peError = nullptr ) - { - m_pSettings->GetString( pchSection, pchSettingsKey, pchValue, unValueLen, peError ); - } - std::string GetString( const std::string & sSection, const std::string & sSettingsKey, EVRSettingsError *peError = nullptr ) - { - char buf[4096]; - vr::EVRSettingsError eError; - m_pSettings->GetString( sSection.c_str(), sSettingsKey.c_str(), buf, sizeof( buf ), &eError ); - if ( peError ) - *peError = eError; - if ( eError == vr::VRSettingsError_None ) - return buf; - else - return ""; - } - - void RemoveSection( const char *pchSection, EVRSettingsError *peError = nullptr ) - { - m_pSettings->RemoveSection( pchSection, peError ); - } - void RemoveKeyInSection( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) - { - m_pSettings->RemoveKeyInSection( pchSection, pchSettingsKey, peError ); - } - }; - - - //----------------------------------------------------------------------------- - // steamvr keys - static const char * const k_pch_SteamVR_Section = "steamvr"; - static const char * const k_pch_SteamVR_RequireHmd_String = "requireHmd"; - static const char * const k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver"; - static const char * const k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd"; - static const char * const k_pch_SteamVR_DisplayDebug_Bool = "displayDebug"; - static const char * const k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe"; - static const char * const k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX"; - static const char * const k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY"; - static const char * const k_pch_SteamVR_SendSystemButtonToAllApps_Bool= "sendSystemButtonToAllApps"; - static const char * const k_pch_SteamVR_LogLevel_Int32 = "loglevel"; - static const char * const k_pch_SteamVR_IPD_Float = "ipd"; - static const char * const k_pch_SteamVR_Background_String = "background"; - static const char * const k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection"; - static const char * const k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight"; - static const char * const k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius"; - static const char * const k_pch_SteamVR_GridColor_String = "gridColor"; - static const char * const k_pch_SteamVR_PlayAreaColor_String = "playAreaColor"; - static const char * const k_pch_SteamVR_TrackingLossColor_String = "trackingLossColor"; - static const char * const k_pch_SteamVR_ShowStage_Bool = "showStage"; - static const char * const k_pch_SteamVR_DrawTrackingReferences_Bool = "drawTrackingReferences"; - static const char * const k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers"; - static const char * const k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers"; - static const char * const k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees"; - static const char * const k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement"; - static const char * const k_pch_SteamVR_ShowBaseStationPowerManagementTip_Int32 = "ShowBaseStationPowerManagementTip"; - static const char * const k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses"; - static const char * const k_pch_SteamVR_SupersampleScale_Float = "supersampleScale"; - static const char * const k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution"; - static const char * const k_pch_SteamVR_MotionSmoothing_Bool = "motionSmoothing"; - static const char * const k_pch_SteamVR_MotionSmoothingOverride_Int32 = "motionSmoothingOverride"; - static const char * const k_pch_SteamVR_FramesToThrottle_Int32 = "framesToThrottle"; - static const char * const k_pch_SteamVR_AdditionalFramesToPredict_Int32 = "additionalFramesToPredict"; - static const char * const k_pch_SteamVR_DisableAsyncReprojection_Bool = "disableAsync"; - static const char * const k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking"; - static const char * const k_pch_SteamVR_DefaultMirrorView_Int32 = "mirrorView"; - static const char * const k_pch_SteamVR_ShowLegacyMirrorView_Bool = "showLegacyMirrorView"; - static const char * const k_pch_SteamVR_MirrorViewVisibility_Bool = "showMirrorView"; - static const char * const k_pch_SteamVR_MirrorViewDisplayMode_Int32 = "mirrorViewDisplayMode"; - static const char * const k_pch_SteamVR_MirrorViewEye_Int32 = "mirrorViewEye"; - static const char * const k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry"; - static const char * const k_pch_SteamVR_MirrorViewGeometryMaximized_String = "mirrorViewGeometryMaximized"; - static const char * const k_pch_SteamVR_PerfGraphVisibility_Bool = "showPerfGraph"; - static const char * const k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch"; - static const char * const k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch"; - static const char * const k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch"; - static const char * const k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard"; - static const char * const k_pch_SteamVR_EnableHomeApp = "enableHomeApp"; - static const char * const k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec"; - static const char * const k_pch_SteamVR_RetailDemo_Bool = "retailDemo"; - static const char * const k_pch_SteamVR_IpdOffset_Float = "ipdOffset"; - static const char * const k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering"; - static const char * const k_pch_SteamVR_SupersampleManualOverride_Bool = "supersampleManualOverride"; - static const char * const k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync"; - static const char * const k_pch_SteamVR_AllowDisplayLockedMode_Bool = "allowDisplayLockedMode"; - static const char * const k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Bool = "haveStartedTutorialForNativeChaperoneDriver"; - static const char * const k_pch_SteamVR_ForceWindows32bitVRMonitor = "forceWindows32BitVRMonitor"; - static const char * const k_pch_SteamVR_DebugInputBinding = "debugInputBinding"; - static const char * const k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid"; - static const char * const k_pch_SteamVR_RenderCameraMode = "renderCameraMode"; - static const char * const k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling"; - static const char * const k_pch_SteamVR_EnableSafeMode = "enableSafeMode"; - static const char * const k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate"; - static const char * const k_pch_SteamVR_LastVersionNotice = "lastVersionNotice"; - static const char * const k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate"; - static const char * const k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR"; - static const char * const k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG"; - static const char * const k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB"; - static const char * const k_pch_SteamVR_CustomIconStyle_String = "customIconStyle"; - static const char * const k_pch_SteamVR_CustomOffIconStyle_String = "customOffIconStyle"; - static const char * const k_pch_SteamVR_CustomIconForceUpdate_String = "customIconForceUpdate"; - static const char * const k_pch_SteamVR_AllowGlobalActionSetPriority = "globalActionSetPriority"; - static const char * const k_pch_SteamVR_OverlayRenderQuality = "overlayRenderQuality_2"; - static const char * const k_pch_SteamVR_BlockOculusSDKOnOpenVRLaunchOption_Bool = "blockOculusSDKOnOpenVRLaunchOption"; - static const char * const k_pch_SteamVR_BlockOculusSDKOnAllLaunches_Bool = "blockOculusSDKOnAllLaunches"; - static const char * const k_pch_SteamVR_HDCPLegacyCompatibility_Bool = "hdcp14legacyCompatibility"; - static const char * const k_pch_SteamVR_UsePrism_Bool = "usePrism"; - - //----------------------------------------------------------------------------- - // direct mode keys - static const char * const k_pch_DirectMode_Section = "direct_mode"; - static const char * const k_pch_DirectMode_Enable_Bool = "enable"; - static const char * const k_pch_DirectMode_Count_Int32 = "count"; - static const char * const k_pch_DirectMode_EdidVid_Int32 = "edidVid"; - static const char * const k_pch_DirectMode_EdidPid_Int32 = "edidPid"; - - //----------------------------------------------------------------------------- - // lighthouse keys - static const char * const k_pch_Lighthouse_Section = "driver_lighthouse"; - static const char * const k_pch_Lighthouse_DisableIMU_Bool = "disableimu"; - static const char * const k_pch_Lighthouse_DisableIMUExceptHMD_Bool = "disableimuexcepthmd"; - static const char * const k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation"; - static const char * const k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug"; - static const char * const k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation"; - static const char * const k_pch_Lighthouse_DBHistory_Bool = "dbhistory"; - static const char * const k_pch_Lighthouse_EnableBluetooth_Bool = "enableBluetooth"; - static const char * const k_pch_Lighthouse_PowerManagedBaseStations_String = "PowerManagedBaseStations"; - static const char * const k_pch_Lighthouse_PowerManagedBaseStations2_String = "PowerManagedBaseStations2"; - static const char * const k_pch_Lighthouse_InactivityTimeoutForBaseStations_Int32 = "InactivityTimeoutForBaseStations"; - static const char * const k_pch_Lighthouse_EnableImuFallback_Bool = "enableImuFallback"; - - //----------------------------------------------------------------------------- - // null keys - static const char * const k_pch_Null_Section = "driver_null"; - static const char * const k_pch_Null_SerialNumber_String = "serialNumber"; - static const char * const k_pch_Null_ModelNumber_String = "modelNumber"; - static const char * const k_pch_Null_WindowX_Int32 = "windowX"; - static const char * const k_pch_Null_WindowY_Int32 = "windowY"; - static const char * const k_pch_Null_WindowWidth_Int32 = "windowWidth"; - static const char * const k_pch_Null_WindowHeight_Int32 = "windowHeight"; - static const char * const k_pch_Null_RenderWidth_Int32 = "renderWidth"; - static const char * const k_pch_Null_RenderHeight_Int32 = "renderHeight"; - static const char * const k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons"; - static const char * const k_pch_Null_DisplayFrequency_Float = "displayFrequency"; - - //----------------------------------------------------------------------------- - // Windows MR keys - static const char * const k_pch_WindowsMR_Section = "driver_holographic"; - - //----------------------------------------------------------------------------- - // user interface keys - static const char * const k_pch_UserInterface_Section = "userinterface"; - static const char * const k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop"; - static const char * const k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray"; - static const char * const k_pch_UserInterface_HidePopupsWhenStatusMinimized_Bool = "HidePopupsWhenStatusMinimized"; - static const char * const k_pch_UserInterface_Screenshots_Bool = "screenshots"; - static const char * const k_pch_UserInterface_ScreenshotType_Int = "screenshotType"; - - //----------------------------------------------------------------------------- - // notification keys - static const char * const k_pch_Notifications_Section = "notifications"; - static const char * const k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb"; - - //----------------------------------------------------------------------------- - // keyboard keys - static const char * const k_pch_Keyboard_Section = "keyboard"; - static const char * const k_pch_Keyboard_TutorialCompletions = "TutorialCompletions"; - static const char * const k_pch_Keyboard_ScaleX = "ScaleX"; - static const char * const k_pch_Keyboard_ScaleY = "ScaleY"; - static const char * const k_pch_Keyboard_OffsetLeftX = "OffsetLeftX"; - static const char * const k_pch_Keyboard_OffsetRightX = "OffsetRightX"; - static const char * const k_pch_Keyboard_OffsetY = "OffsetY"; - static const char * const k_pch_Keyboard_Smoothing = "Smoothing"; - - //----------------------------------------------------------------------------- - // perf keys - static const char * const k_pch_Perf_Section = "perfcheck"; - static const char * const k_pch_Perf_PerfGraphInHMD_Bool = "perfGraphInHMD"; - static const char * const k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore"; - static const char * const k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit"; - static const char * const k_pch_Perf_TestData_Float = "perfTestData"; - static const char * const k_pch_Perf_GPUProfiling_Bool = "GPUProfiling"; - - //----------------------------------------------------------------------------- - // collision bounds keys - static const char * const k_pch_CollisionBounds_Section = "collisionBounds"; - static const char * const k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle"; - static const char * const k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn"; - static const char * const k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn"; - static const char * const k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn"; - static const char * const k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance"; - static const char * const k_pch_CollisionBounds_WallHeight_Float = "CollisionBoundsWallHeight"; - static const char * const k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR"; - static const char * const k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG"; - static const char * const k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB"; - static const char * const k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA"; - static const char * const k_pch_CollisionBounds_EnableDriverImport = "enableDriverBoundsImport"; - - //----------------------------------------------------------------------------- - // camera keys - static const char * const k_pch_Camera_Section = "camera"; - static const char * const k_pch_Camera_EnableCamera_Bool = "enableCamera"; - static const char * const k_pch_Camera_ShowOnController_Bool = "showOnController"; - static const char * const k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds"; - static const char * const k_pch_Camera_RoomView_Int32 = "roomView"; - static const char * const k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR"; - static const char * const k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG"; - static const char * const k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB"; - static const char * const k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA"; - static const char * const k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength"; - static const char * const k_pch_Camera_RoomViewStyle_Int32 = "roomViewStyle"; - - //----------------------------------------------------------------------------- - // audio keys - static const char * const k_pch_audio_Section = "audio"; - static const char * const k_pch_audio_SetOsDefaultPlaybackDevice_Bool = "setOsDefaultPlaybackDevice"; - static const char * const k_pch_audio_EnablePlaybackDeviceOverride_Bool = "enablePlaybackDeviceOverride"; - static const char * const k_pch_audio_PlaybackDeviceOverride_String = "playbackDeviceOverride"; - static const char * const k_pch_audio_PlaybackDeviceOverrideName_String = "playbackDeviceOverrideName"; - static const char * const k_pch_audio_SetOsDefaultRecordingDevice_Bool = "setOsDefaultRecordingDevice"; - static const char * const k_pch_audio_EnableRecordingDeviceOverride_Bool = "enableRecordingDeviceOverride"; - static const char * const k_pch_audio_RecordingDeviceOverride_String = "recordingDeviceOverride"; - static const char * const k_pch_audio_RecordingDeviceOverrideName_String = "recordingDeviceOverrideName"; - static const char * const k_pch_audio_EnablePlaybackMirror_Bool = "enablePlaybackMirror"; - static const char * const k_pch_audio_PlaybackMirrorDevice_String = "playbackMirrorDevice"; - static const char * const k_pch_audio_PlaybackMirrorDeviceName_String = "playbackMirrorDeviceName"; - static const char * const k_pch_audio_OldPlaybackMirrorDevice_String = "onPlaybackMirrorDevice"; - static const char * const k_pch_audio_ActiveMirrorDevice_String = "activePlaybackMirrorDevice"; - static const char * const k_pch_audio_EnablePlaybackMirrorIndependentVolume_Bool = "enablePlaybackMirrorIndependentVolume"; - static const char * const k_pch_audio_LastHmdPlaybackDeviceId_String = "lastHmdPlaybackDeviceId"; - static const char * const k_pch_audio_VIVEHDMIGain = "viveHDMIGain"; - static const char * const k_pch_audio_DualSpeakerAndJackOutput_Bool = "dualSpeakerAndJackOutput"; - static const char * const k_pch_audio_MuteMicMonitor_Bool = "muteMicMonitor"; - - //----------------------------------------------------------------------------- - // power management keys - static const char * const k_pch_Power_Section = "power"; - static const char * const k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit"; - static const char * const k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout"; - static const char * const k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout"; - static const char * const k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout"; - static const char * const k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress"; - static const char * const k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby"; - - //----------------------------------------------------------------------------- - // dashboard keys - static const char * const k_pch_Dashboard_Section = "dashboard"; - static const char * const k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard"; - static const char * const k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode"; - static const char * const k_pch_Dashboard_Position = "position"; - static const char * const k_pch_Dashboard_DesktopScale = "desktopScale"; - static const char * const k_pch_Dashboard_DashboardScale = "dashboardScale"; - static const char * const k_pch_Dashboard_UseStandaloneSystemLayer = "standaloneSystemLayer"; - - //----------------------------------------------------------------------------- - // model skin keys - static const char * const k_pch_modelskin_Section = "modelskins"; - - //----------------------------------------------------------------------------- - // driver keys - These could be checked in any driver_ section - static const char * const k_pch_Driver_Enable_Bool = "enable"; - static const char * const k_pch_Driver_BlockedBySafemode_Bool = "blocked_by_safe_mode"; - static const char * const k_pch_Driver_LoadPriority_Int32 = "loadPriority"; - - //----------------------------------------------------------------------------- - // web interface keys - static const char* const k_pch_WebInterface_Section = "WebInterface"; - - //----------------------------------------------------------------------------- - // vrwebhelper keys - static const char* const k_pch_VRWebHelper_Section = "VRWebHelper"; - static const char* const k_pch_VRWebHelper_DebuggerEnabled_Bool = "DebuggerEnabled"; - static const char* const k_pch_VRWebHelper_DebuggerPort_Int32 = "DebuggerPort"; - - //----------------------------------------------------------------------------- - // tracking overrides - keys are device paths, values are the device paths their - // tracking/pose information overrides - static const char* const k_pch_TrackingOverride_Section = "TrackingOverrides"; - - //----------------------------------------------------------------------------- - // per-app keys - the section name for these is the app key itself. Some of these are prefixed by the controller type - static const char* const k_pch_App_BindingAutosaveURLSuffix_String = "AutosaveURL"; - static const char* const k_pch_App_BindingLegacyAPISuffix_String = "_legacy"; - static const char* const k_pch_App_BindingSteamVRInputAPISuffix_String = "_steamvrinput"; - static const char* const k_pch_App_BindingCurrentURLSuffix_String = "CurrentURL"; - static const char* const k_pch_App_BindingPreviousURLSuffix_String = "PreviousURL"; - static const char* const k_pch_App_NeedToUpdateAutosaveSuffix_Bool = "NeedToUpdateAutosave"; - static const char* const k_pch_App_DominantHand_Int32 = "DominantHand"; - static const char* const k_pch_App_BlockOculusSDK_Bool = "blockOculusSDK"; - - //----------------------------------------------------------------------------- - // configuration for trackers - static const char * const k_pch_Trackers_Section = "trackers"; - - //----------------------------------------------------------------------------- - // configuration for desktop UI windows - static const char * const k_pch_DesktopUI_Section = "DesktopUI"; - - //----------------------------------------------------------------------------- - // Last known keys for righting recovery - static const char * const k_pch_LastKnown_Section = "LastKnown"; - static const char* const k_pch_LastKnown_HMDManufacturer_String = "HMDManufacturer"; - static const char* const k_pch_LastKnown_HMDModel_String = "HMDModel"; - - //----------------------------------------------------------------------------- - // Dismissed warnings - static const char * const k_pch_DismissedWarnings_Section = "DismissedWarnings"; - - //----------------------------------------------------------------------------- - // Input Settings - static const char * const k_pch_Input_Section = "input"; - static const char* const k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation"; - static const char* const k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation"; - static const char* const k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone"; - - //----------------------------------------------------------------------------- - // Log of GPU performance - static const char * const k_pch_GpuSpeed_Section = "GpuSpeed"; - -} // namespace vr - -// ivrchaperone.h - -namespace vr -{ - -#pragma pack( push, 8 ) - -enum ChaperoneCalibrationState -{ - // OK! - ChaperoneCalibrationState_OK = 1, // Chaperone is fully calibrated and working correctly - - // Warnings - ChaperoneCalibrationState_Warning = 100, - ChaperoneCalibrationState_Warning_BaseStationMayHaveMoved = 101, // A base station thinks that it might have moved - ChaperoneCalibrationState_Warning_BaseStationRemoved = 102, // There are less base stations than when calibrated - ChaperoneCalibrationState_Warning_SeatedBoundsInvalid = 103, // Seated bounds haven't been calibrated for the current tracking center - - // Errors - ChaperoneCalibrationState_Error = 200, // The UniverseID is invalid - ChaperoneCalibrationState_Error_BaseStationUninitialized = 201, // Tracking center hasn't be calibrated for at least one of the base stations - ChaperoneCalibrationState_Error_BaseStationConflict = 202, // Tracking center is calibrated, but base stations disagree on the tracking space - ChaperoneCalibrationState_Error_PlayAreaInvalid = 203, // Play Area hasn't been calibrated for the current tracking center - ChaperoneCalibrationState_Error_CollisionBoundsInvalid = 204, // Collision Bounds haven't been calibrated for the current tracking center -}; - - -/** 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. */ -class IVRChaperone -{ -public: - - /** Get the current state of Chaperone calibration. This state can change at any time during a session due to physical base station changes. **/ - virtual ChaperoneCalibrationState GetCalibrationState() = 0; - - /** 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. **/ - virtual bool GetPlayAreaSize( float *pSizeX, float *pSizeZ ) = 0; - - /** Returns the 4 corner positions of the Play Area (formerly named Soft Bounds). - * Corners are in counter-clockwise order. - * Standing 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). **/ - virtual bool GetPlayAreaRect( HmdQuad_t *rect ) = 0; - - /** Reload Chaperone data from the .vrchap file on disk. */ - virtual void ReloadInfo( void ) = 0; - - /** Optionally give the chaperone system a hit about the color and brightness in the scene **/ - virtual void SetSceneColor( HmdColor_t color ) = 0; - - /** Get the current chaperone bounds draw color and brightness **/ - virtual void GetBoundsColor( HmdColor_t *pOutputColorArray, int nNumOutputColors, float flCollisionBoundsFadeDistance, HmdColor_t *pOutputCameraColor ) = 0; - - /** Determine whether the bounds are showing right now **/ - virtual bool AreBoundsVisible() = 0; - - /** Force the bounds to show, mostly for utilities **/ - virtual void ForceBoundsVisible( bool bForce ) = 0; - - /** 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. - **/ - virtual void ResetZeroPose( ETrackingUniverseOrigin eTrackingUniverseOrigin ) = 0; -}; - -static const char * const IVRChaperone_Version = "IVRChaperone_004"; - -#pragma pack( pop ) - -} - -// ivrchaperonesetup.h - -namespace vr -{ - -enum EChaperoneConfigFile -{ - EChaperoneConfigFile_Live = 1, // The live chaperone config, used by most applications and games - EChaperoneConfigFile_Temp = 2, // The temporary chaperone config, used to live-preview collision bounds in room setup -}; - -enum EChaperoneImportFlags -{ - EChaperoneImport_BoundsOnly = 0x0001, -}; - -/** 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. */ -class IVRChaperoneSetup -{ -public: - - /** Saves the current working copy to disk */ - virtual bool CommitWorkingCopy( EChaperoneConfigFile configFile ) = 0; - - /** 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. */ - virtual void RevertWorkingCopy() = 0; - - /** 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. */ - virtual bool GetWorkingPlayAreaSize( float *pSizeX, float *pSizeZ ) = 0; - - /** 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). **/ - virtual bool GetWorkingPlayAreaRect( HmdQuad_t *rect ) = 0; - - /** 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. */ - virtual bool GetWorkingCollisionBoundsInfo( VR_OUT_ARRAY_COUNT(punQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t* punQuadsCount ) = 0; - - /** Returns the number of Quads if the buffer points to null. Otherwise it returns Quads - * into the buffer up to the max specified. */ - virtual bool GetLiveCollisionBoundsInfo( VR_OUT_ARRAY_COUNT(punQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t* punQuadsCount ) = 0; - - /** Returns the preferred seated position from the working copy. */ - virtual bool GetWorkingSeatedZeroPoseToRawTrackingPose( HmdMatrix34_t *pmatSeatedZeroPoseToRawTrackingPose ) = 0; - - /** Returns the standing origin from the working copy. */ - virtual bool GetWorkingStandingZeroPoseToRawTrackingPose( HmdMatrix34_t *pmatStandingZeroPoseToRawTrackingPose ) = 0; - - /** Sets the Play Area in the working copy. */ - virtual void SetWorkingPlayAreaSize( float sizeX, float sizeZ ) = 0; - - /** Sets the Collision Bounds in the working copy. Note: ceiling height is ignored. */ - virtual void SetWorkingCollisionBoundsInfo( VR_ARRAY_COUNT(unQuadsCount) HmdQuad_t *pQuadsBuffer, uint32_t unQuadsCount ) = 0; - - /** Sets the Collision Bounds in the working copy. */ - virtual void SetWorkingPerimeter( VR_ARRAY_COUNT( unPointCount ) HmdVector2_t *pPointBuffer, uint32_t unPointCount ) = 0; - - /** Sets the preferred seated position in the working copy. */ - virtual void SetWorkingSeatedZeroPoseToRawTrackingPose( const HmdMatrix34_t *pMatSeatedZeroPoseToRawTrackingPose ) = 0; - - /** Sets the preferred standing position in the working copy. */ - virtual void SetWorkingStandingZeroPoseToRawTrackingPose( const HmdMatrix34_t *pMatStandingZeroPoseToRawTrackingPose ) = 0; - - /** Tear everything down and reload it from the file on disk */ - virtual void ReloadFromDisk( EChaperoneConfigFile configFile ) = 0; - - /** Returns the preferred seated position. */ - virtual bool GetLiveSeatedZeroPoseToRawTrackingPose( HmdMatrix34_t *pmatSeatedZeroPoseToRawTrackingPose ) = 0; - - virtual bool ExportLiveToBuffer( VR_OUT_STRING() char *pBuffer, uint32_t *pnBufferLength ) = 0; - virtual bool ImportFromBufferToWorking( const char *pBuffer, uint32_t nImportFlags ) = 0; - - /** Shows the chaperone data in the working set to preview in the compositor.*/ - virtual void ShowWorkingSetPreview() = 0; - - /** Hides the chaperone data in the working set to preview in the compositor (if it was visible).*/ - virtual void HideWorkingSetPreview() = 0; - - /** 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. */ - virtual void RoomSetupStarting() = 0; -}; - -static const char * const IVRChaperoneSetup_Version = "IVRChaperoneSetup_006"; - - -} - -// ivrcompositor.h - -namespace vr -{ - -#pragma pack( push, 8 ) - -/** Errors that can occur with the VR compositor */ -enum EVRCompositorError -{ - VRCompositorError_None = 0, - VRCompositorError_RequestFailed = 1, - VRCompositorError_IncompatibleVersion = 100, - VRCompositorError_DoNotHaveFocus = 101, - VRCompositorError_InvalidTexture = 102, - VRCompositorError_IsNotSceneApplication = 103, - VRCompositorError_TextureIsOnWrongDevice = 104, - VRCompositorError_TextureUsesUnsupportedFormat = 105, - VRCompositorError_SharedTexturesNotSupported = 106, - VRCompositorError_IndexOutOfRange = 107, - VRCompositorError_AlreadySubmitted = 108, - VRCompositorError_InvalidBounds = 109, - VRCompositorError_AlreadySet = 110, -}; - -/** Timing mode passed to SetExplicitTimingMode(); see that function for documentation */ -enum EVRCompositorTimingMode -{ - VRCompositorTimingMode_Implicit = 0, - VRCompositorTimingMode_Explicit_RuntimePerformsPostPresentHandoff = 1, - VRCompositorTimingMode_Explicit_ApplicationPerformsPostPresentHandoff = 2, -}; - -/** Cumulative stats for current application. These are not cleared until a new app connects, -* but they do stop accumulating once the associated app disconnects. */ -struct Compositor_CumulativeStats -{ - uint32_t m_nPid; // Process id associated with these stats (may no longer be running). - uint32_t m_nNumFramePresents; // total number of times we called present (includes reprojected frames) - uint32_t m_nNumDroppedFrames; // total number of times an old frame was re-scanned out (without reprojection) - uint32_t m_nNumReprojectedFrames; // total number of times a frame was scanned out a second time (with reprojection) - - /** Values recorded at startup before application has fully faded in the first time. */ - uint32_t m_nNumFramePresentsOnStartup; - uint32_t m_nNumDroppedFramesOnStartup; - uint32_t m_nNumReprojectedFramesOnStartup; - - /** Applications may explicitly fade to the compositor. This is usually to handle level transitions, and loading often causes - * system wide hitches. The following stats are collected during this period. Does not include values recorded during startup. */ - uint32_t m_nNumLoading; - uint32_t m_nNumFramePresentsLoading; - uint32_t m_nNumDroppedFramesLoading; - uint32_t m_nNumReprojectedFramesLoading; - - /** If we don't get a new frame from the app in less than 2.5 frames, then we assume the app has hung and start - * fading back to the compositor. The following stats are a result of this, and are a subset of those recorded above. - * Does not include values recorded during start up or loading. */ - uint32_t m_nNumTimedOut; - uint32_t m_nNumFramePresentsTimedOut; - uint32_t m_nNumDroppedFramesTimedOut; - uint32_t m_nNumReprojectedFramesTimedOut; -}; - -struct Compositor_StageRenderSettings -{ - /** Primary color is applied as a tint to (i.e. multiplied with) the model's texture */ - HmdColor_t m_PrimaryColor; - HmdColor_t m_SecondaryColor; - - /** Vignette radius is in meters and is used to fade to the specified secondary solid color over - * that 3D distance from the origin of the playspace. */ - float m_flVignetteInnerRadius; - float m_flVignetteOuterRadius; - - /** Fades to the secondary color based on view incidence. This variable controls the linearity - * of the effect. It is mutually exclusive with vignette. Additionally, it treats the mesh as faceted. */ - float m_flFresnelStrength; - - /** Controls backface culling. */ - bool m_bBackfaceCulling; - - /** Converts the render model's texture to luma and applies to rgb equally. This is useful to - * combat compression artifacts that can occur on desaturated source material. */ - bool m_bGreyscale; - - /** Renders mesh as a wireframe. */ - bool m_bWireframe; -}; - -static inline Compositor_StageRenderSettings DefaultStageRenderSettings() -{ - Compositor_StageRenderSettings settings; - settings.m_PrimaryColor.r = 1.0f; - settings.m_PrimaryColor.g = 1.0f; - settings.m_PrimaryColor.b = 1.0f; - settings.m_PrimaryColor.a = 1.0f; - settings.m_SecondaryColor.r = 1.0f; - settings.m_SecondaryColor.g = 1.0f; - settings.m_SecondaryColor.b = 1.0f; - settings.m_SecondaryColor.a = 1.0f; - settings.m_flVignetteInnerRadius = 0.0f; - settings.m_flVignetteOuterRadius = 0.0f; - settings.m_flFresnelStrength = 0.0f; - settings.m_bBackfaceCulling = false; - settings.m_bGreyscale = false; - settings.m_bWireframe = false; - return settings; -} - -#pragma pack( pop ) - -/** Allows the application to interact with the compositor */ -class IVRCompositor -{ -public: - /** Sets tracking space returned by WaitGetPoses */ - virtual void SetTrackingSpace( ETrackingUniverseOrigin eOrigin ) = 0; - - /** Gets current tracking space returned by WaitGetPoses */ - virtual ETrackingUniverseOrigin GetTrackingSpace() = 0; - - /** 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) - */ - virtual EVRCompositorError WaitGetPoses( VR_ARRAY_COUNT( unRenderPoseArrayCount ) TrackedDevicePose_t* pRenderPoseArray, uint32_t unRenderPoseArrayCount, - VR_ARRAY_COUNT( unGamePoseArrayCount ) TrackedDevicePose_t* pGamePoseArray, uint32_t unGamePoseArrayCount ) = 0; - - /** Get the last set of poses returned by WaitGetPoses. */ - virtual EVRCompositorError GetLastPoses( VR_ARRAY_COUNT( unRenderPoseArrayCount ) TrackedDevicePose_t* pRenderPoseArray, uint32_t unRenderPoseArrayCount, - VR_ARRAY_COUNT( unGamePoseArrayCount ) TrackedDevicePose_t* pGamePoseArray, uint32_t unGamePoseArrayCount ) = 0; - - /** 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. */ - virtual EVRCompositorError GetLastPoseForTrackedDeviceIndex( TrackedDeviceIndex_t unDeviceIndex, TrackedDevicePose_t *pOutputPose, TrackedDevicePose_t *pOutputGamePose ) = 0; - - /** 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) - */ - virtual EVRCompositorError Submit( EVREye eEye, const Texture_t *pTexture, const VRTextureBounds_t* pBounds = 0, EVRSubmitFlags nSubmitFlags = Submit_Default ) = 0; - - /** 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. */ - virtual void ClearLastSubmittedFrame() = 0; - - /** 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. */ - virtual void PostPresentHandoff() = 0; - - /** 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. */ - virtual bool GetFrameTiming( Compositor_FrameTiming *pTiming, uint32_t unFramesAgo = 0 ) = 0; - - /** 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. */ - virtual uint32_t GetFrameTimings( VR_ARRAY_COUNT( nFrames ) Compositor_FrameTiming *pTiming, uint32_t nFrames ) = 0; - - /** 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. */ - virtual float GetFrameTimeRemaining() = 0; - - /** Fills out stats accumulated for the last connected application. Pass in sizeof( Compositor_CumulativeStats ) as second parameter. */ - virtual void GetCumulativeStats( Compositor_CumulativeStats *pStats, uint32_t nStatsSizeInBytes ) = 0; - - /** 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. */ - virtual void FadeToColor( float fSeconds, float fRed, float fGreen, float fBlue, float fAlpha, bool bBackground = false ) = 0; - - /** Get current fade color value. */ - virtual HmdColor_t GetCurrentFadeColor( bool bBackground = false ) = 0; - - /** Fading the Grid in or out in fSeconds */ - virtual void FadeGrid( float fSeconds, bool bFadeGridIn ) = 0; - - /** Get current alpha value of grid. */ - virtual float GetCurrentGridAlpha() = 0; - - /** 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. */ - virtual EVRCompositorError SetSkyboxOverride( VR_ARRAY_COUNT( unTextureCount ) const Texture_t *pTextures, uint32_t unTextureCount ) = 0; - - /** Resets compositor skybox back to defaults. */ - virtual void ClearSkyboxOverride() = 0; - - /** 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. */ - virtual void CompositorBringToFront() = 0; - - /** Pushes the compositor window to the back. This is useful for allowing other applications to draw directly to the HMD. */ - virtual void CompositorGoToBack() = 0; - - /** 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. */ - virtual void CompositorQuit() = 0; - - /** Return whether the compositor is fullscreen */ - virtual bool IsFullscreen() = 0; - - /** Returns the process ID of the process that is currently rendering the scene */ - virtual uint32_t GetCurrentSceneFocusProcess() = 0; - - /** 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. */ - virtual uint32_t GetLastFrameRenderer() = 0; - - /** Returns true if the current process has the scene focus */ - virtual bool CanRenderScene() = 0; - - /** 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. */ - virtual void ShowMirrorWindow() = 0; - - /** DEPRECATED: Closes the headset view, either as a window or docked widget. */ - virtual void HideMirrorWindow() = 0; - - /** DEPRECATED: Returns true if the headset view (either as a window or docked widget) is shown. */ - virtual bool IsMirrorWindowVisible() = 0; - - /** Writes back buffer and stereo left/right pair from the application to a 'screenshots' folder in the SteamVR runtime root. */ - virtual void CompositorDumpImages() = 0; - - /** Let an app know it should be rendering with low resources. */ - virtual bool ShouldAppRenderWithLowResources() = 0; - - /** Override interleaved reprojection logic to force on. */ - virtual void ForceInterleavedReprojectionOn( bool bOverride ) = 0; - - /** Force reconnecting to the compositor process. */ - virtual void ForceReconnectProcess() = 0; - - /** Temporarily suspends rendering (useful for finer control over scene transitions). */ - virtual void SuspendRendering( bool bSuspend ) = 0; - - /** 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. */ - virtual vr::EVRCompositorError GetMirrorTextureD3D11( vr::EVREye eEye, void *pD3D11DeviceOrResource, void **ppD3D11ShaderResourceView ) = 0; - virtual void ReleaseMirrorTextureD3D11( void *pD3D11ShaderResourceView ) = 0; - - /** Access to mirror textures from OpenGL. */ - virtual vr::EVRCompositorError GetMirrorTextureGL( vr::EVREye eEye, vr::glUInt_t *pglTextureId, vr::glSharedTextureHandle_t *pglSharedTextureHandle ) = 0; - virtual bool ReleaseSharedGLTexture( vr::glUInt_t glTextureId, vr::glSharedTextureHandle_t glSharedTextureHandle ) = 0; - virtual void LockGLSharedTextureForAccess( vr::glSharedTextureHandle_t glSharedTextureHandle ) = 0; - virtual void UnlockGLSharedTextureForAccess( vr::glSharedTextureHandle_t glSharedTextureHandle ) = 0; - - /** [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 */ - virtual uint32_t GetVulkanInstanceExtensionsRequired( VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0; - - /** [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 */ - virtual uint32_t GetVulkanDeviceExtensionsRequired( VkPhysicalDevice_T *pPhysicalDevice, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0; - - /** [ 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. */ - virtual void SetExplicitTimingMode( EVRCompositorTimingMode eTimingMode ) = 0; - - /** [ 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. */ - virtual EVRCompositorError SubmitExplicitTimingData() = 0; - - /** 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. */ - virtual bool IsMotionSmoothingEnabled() = 0; - - /** Indicates whether or not motion smoothing is supported by the current hardware. */ - virtual bool IsMotionSmoothingSupported() = 0; - - /** 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. */ - virtual bool IsCurrentSceneFocusAppLoading() = 0; - - /** 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. */ - virtual EVRCompositorError SetStageOverride_Async( const char *pchRenderModelPath, const HmdMatrix34_t *pTransform = 0, - const Compositor_StageRenderSettings *pRenderSettings = 0, uint32_t nSizeOfRenderSettings = 0 ) = 0; - - /** Resets the stage to its default user specified setting. */ - virtual void ClearStageOverride() = 0; - - /** Returns true if pBenchmarkResults is filled it. Sets pBenchmarkResults with the result of the compositor benchmark. - * nSizeOfBenchmarkResults should be set to sizeof(Compositor_BenchmarkResults) */ - virtual bool GetCompositorBenchmarkResults( Compositor_BenchmarkResults *pBenchmarkResults, uint32_t nSizeOfBenchmarkResults ) = 0; - - /** Returns the frame id associated with the poses last returned by WaitGetPoses. Deltas between IDs correspond to number of headset vsync intervals. */ - virtual EVRCompositorError GetLastPosePredictionIDs( uint32_t *pRenderPosePredictionID, uint32_t *pGamePosePredictionID ) = 0; - - /** Get the most up-to-date predicted (or recorded - up to 100ms old) set of poses for a given frame id. */ - virtual EVRCompositorError GetPosesForFrame( uint32_t unPosePredictionID, VR_ARRAY_COUNT( unPoseArrayCount ) TrackedDevicePose_t* pPoseArray, uint32_t unPoseArrayCount ) = 0; -}; - -static const char * const IVRCompositor_Version = "IVRCompositor_027"; - -} // namespace vr - - - -// ivrheadsetview.h - -namespace vr -{ - enum HeadsetViewMode_t - { - HeadsetViewMode_Left = 0, - HeadsetViewMode_Right, - HeadsetViewMode_Both - }; - - class IVRHeadsetView - { - public: - /** 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. */ - virtual void SetHeadsetViewSize( uint32_t nWidth, uint32_t nHeight ) = 0; - - /** Gets the current resolution used to render the headset view. */ - virtual void GetHeadsetViewSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0; - - /** Set the mode used to render the headset view. */ - virtual void SetHeadsetViewMode( HeadsetViewMode_t eHeadsetViewMode ) = 0; - - /** Get the current mode used to render the headset view. */ - virtual HeadsetViewMode_t GetHeadsetViewMode() = 0; - - /** Set whether or not the headset view should be rendered cropped to hide the hidden area mesh or not. */ - virtual void SetHeadsetViewCropped( bool bCropped ) = 0; - - /** Get the current cropping status of the headset view. */ - virtual bool GetHeadsetViewCropped() = 0; - - /** Get the aspect ratio (width:height) of the uncropped headset view (accounting for the current set mode). */ - virtual float GetHeadsetViewAspectRatio() = 0; - - /** Set the range [0..1] that the headset view blends across the stereo overlapped area in cropped both mode. */ - virtual void SetHeadsetViewBlendRange( float flStartPct, float flEndPct ) = 0; - - /** Get the current range [0..1] that the headset view blends across the stereo overlapped area in cropped both mode. */ - virtual void GetHeadsetViewBlendRange( float *pStartPct, float *pEndPct ) = 0; - }; - - static const uint32_t k_unHeadsetViewMaxWidth = 3840; - static const uint32_t k_unHeadsetViewMaxHeight = 2160; - static const char * const k_pchHeadsetViewOverlayKey = "system.HeadsetView"; - - static const char * const IVRHeadsetView_Version = "IVRHeadsetView_001"; - - /** Returns the current IVRHeadsetView pointer or NULL the interface could not be found. */ - VR_INTERFACE vr::IVRHeadsetView *VR_CALLTYPE VRHeadsetView(); - -} // namespace vr - - -// ivrnotifications.h - -namespace vr -{ - -#pragma pack( push, 8 ) - -// Used for passing graphic data -struct NotificationBitmap_t -{ - NotificationBitmap_t() - : m_pImageData( nullptr ) - , m_nWidth( 0 ) - , m_nHeight( 0 ) - , m_nBytesPerPixel( 0 ) - { - } - - void *m_pImageData; - int32_t m_nWidth; - int32_t m_nHeight; - int32_t m_nBytesPerPixel; -}; - - -/** Be aware that the notification type is used as 'priority' to pick the next notification */ -enum EVRNotificationType -{ - /** Transient notifications are automatically hidden after a period of time set by the user. - * They are used for things like information and chat messages that do not require user interaction. */ - EVRNotificationType_Transient = 0, - - /** Persistent notifications are shown to the user until they are hidden by calling RemoveNotification(). - * They are used for things like phone calls and alarms that require user interaction. */ - EVRNotificationType_Persistent = 1, - - /** System notifications are shown no matter what. It is expected, that the ulUserValue is used as ID. - * If there is already a system notification in the queue with that ID it is not accepted into the queue - * to prevent spamming with system notification */ - EVRNotificationType_Transient_SystemWithUserValue = 2, -}; - -enum EVRNotificationStyle -{ - /** Creates a notification with minimal external styling. */ - EVRNotificationStyle_None = 0, - - /** Used for notifications about overlay-level status. In Steam this is used for events like downloads completing. */ - EVRNotificationStyle_Application = 100, - - /** Used for notifications about contacts that are unknown or not available. In Steam this is used for friend invitations and offline friends. */ - EVRNotificationStyle_Contact_Disabled = 200, - - /** Used for notifications about contacts that are available but inactive. In Steam this is used for friends that are online but not playing a game. */ - EVRNotificationStyle_Contact_Enabled = 201, - - /** Used for notifications about contacts that are available and active. In Steam this is used for friends that are online and currently running a game. */ - EVRNotificationStyle_Contact_Active = 202, -}; - -static const uint32_t k_unNotificationTextMaxSize = 256; - -typedef uint32_t VRNotificationId; - - - -#pragma pack( pop ) - -/** Allows notification sources to interact with the VR system - This current interface is not yet implemented. Do not use yet. */ -class IVRNotifications -{ -public: - /** 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. */ - virtual EVRNotificationError CreateNotification( VROverlayHandle_t ulOverlayHandle, uint64_t ulUserValue, EVRNotificationType type, const char *pchText, EVRNotificationStyle style, const NotificationBitmap_t *pImage, /* out */ VRNotificationId *pNotificationId ) = 0; - - /** Destroy a notification, hiding it first if it currently shown to the user. */ - virtual EVRNotificationError RemoveNotification( VRNotificationId notificationId ) = 0; - -}; - -static const char * const IVRNotifications_Version = "IVRNotifications_002"; - -} // namespace vr - - - -// ivroverlay.h - -namespace vr -{ - - /** The maximum length of an overlay key in bytes, counting the terminating null character. */ - static const uint32_t k_unVROverlayMaxKeyLength = 128; - - /** The maximum length of an overlay name in bytes, counting the terminating null character. */ - static const uint32_t k_unVROverlayMaxNameLength = 128; - - /** The maximum number of overlays that can exist in the system at one time. */ - static const uint32_t k_unMaxOverlayCount = 128; - - /** The maximum number of overlay intersection mask primitives per overlay */ - static const uint32_t k_unMaxOverlayIntersectionMaskPrimitivesCount = 32; - - /** Types of input supported by VR Overlays */ - enum VROverlayInputMethod - { - VROverlayInputMethod_None = 0, // No input events will be generated automatically for this overlay - VROverlayInputMethod_Mouse = 1, // Tracked controllers will get mouse events automatically - // VROverlayInputMethod_DualAnalog = 2, // No longer supported - }; - - /** Allows the caller to figure out which overlay transform getter to call. */ - enum VROverlayTransformType - { - VROverlayTransform_Invalid = -1, - VROverlayTransform_Absolute = 0, - VROverlayTransform_TrackedDeviceRelative = 1, - VROverlayTransform_SystemOverlay = 2, - VROverlayTransform_TrackedComponent = 3, - VROverlayTransform_Cursor = 4, - VROverlayTransform_DashboardTab = 5, - VROverlayTransform_DashboardThumb = 6, - VROverlayTransform_Mountable = 7, - VROverlayTransform_Projection = 8, - }; - - /** Overlay control settings */ - enum VROverlayFlags - { - // Set this flag on a dashboard overlay to prevent a tab from showing up for that overlay - VROverlayFlags_NoDashboardTab = 1 << 3, - - // When this is set the overlay will receive VREvent_ScrollDiscrete events like a mouse wheel. - // Requires mouse input mode. - VROverlayFlags_SendVRDiscreteScrollEvents = 1 << 6, - - // Indicates that the overlay would like to receive - VROverlayFlags_SendVRTouchpadEvents = 1 << 7, - - // If set this will render a vertical scroll wheel on the primary controller, - // only needed if not using VROverlayFlags_SendVRScrollEvents but you still want to represent a scroll wheel - VROverlayFlags_ShowTouchPadScrollWheel = 1 << 8, - - // If this is set ownership and render access to the overlay are transferred - // to the new scene process on a call to IVRApplications::LaunchInternalProcess - VROverlayFlags_TransferOwnershipToInternalProcess = 1 << 9, - - // If set, renders 50% of the texture in each eye, side by side - VROverlayFlags_SideBySide_Parallel = 1 << 10, // Texture is left/right - VROverlayFlags_SideBySide_Crossed = 1 << 11, // Texture is crossed and right/left - - VROverlayFlags_Panorama = 1 << 12, // Texture is a panorama - VROverlayFlags_StereoPanorama = 1 << 13, // Texture is a stereo panorama - - // If this is set on an overlay owned by the scene application that overlay - // will be sorted with the "Other" overlays on top of all other scene overlays - VROverlayFlags_SortWithNonSceneOverlays = 1 << 14, - - // If set, the overlay will be shown in the dashboard, otherwise it will be hidden. - VROverlayFlags_VisibleInDashboard = 1 << 15, - - // If this is set and the overlay's input method is not none, the system-wide laser mouse - // mode will be activated whenever this overlay is visible. - VROverlayFlags_MakeOverlaysInteractiveIfVisible = 1 << 16, - - // If this is set the overlay will receive smooth VREvent_ScrollSmooth that emulate trackpad scrolling. - // Requires mouse input mode. - VROverlayFlags_SendVRSmoothScrollEvents = 1 << 17, - - // If this is set, the overlay texture will be protected content, preventing unauthorized reads. - VROverlayFlags_ProtectedContent = 1 << 18, - - // If this is set, the laser mouse splat will not be drawn over this overlay. The overlay will - // be responsible for drawing its own "cursor". - VROverlayFlags_HideLaserIntersection = 1 << 19, - - // If this is set, clicking away from the overlay will cause it to receive a VREvent_Modal_Cancel event. - // This is ignored for dashboard overlays. - VROverlayFlags_WantsModalBehavior = 1 << 20, - - // If this is set, alpha composition assumes the texture is pre-multiplied - VROverlayFlags_IsPremultiplied = 1 << 21, - }; - - enum VRMessageOverlayResponse - { - VRMessageOverlayResponse_ButtonPress_0 = 0, - VRMessageOverlayResponse_ButtonPress_1 = 1, - VRMessageOverlayResponse_ButtonPress_2 = 2, - VRMessageOverlayResponse_ButtonPress_3 = 3, - VRMessageOverlayResponse_CouldntFindSystemOverlay = 4, - VRMessageOverlayResponse_CouldntFindOrCreateClientOverlay= 5, - VRMessageOverlayResponse_ApplicationQuit = 6 - }; - - struct VROverlayIntersectionParams_t - { - HmdVector3_t vSource; - HmdVector3_t vDirection; - ETrackingUniverseOrigin eOrigin; - }; - - struct VROverlayIntersectionResults_t - { - HmdVector3_t vPoint; - HmdVector3_t vNormal; - HmdVector2_t vUVs; - float fDistance; - }; - - // Input modes for the Big Picture gamepad text entry - enum EGamepadTextInputMode - { - k_EGamepadTextInputModeNormal = 0, - k_EGamepadTextInputModePassword = 1, - k_EGamepadTextInputModeSubmit = 2, - }; - - // Controls number of allowed lines for the Big Picture gamepad text entry - enum EGamepadTextInputLineMode - { - k_EGamepadTextInputLineModeSingleLine = 0, - k_EGamepadTextInputLineModeMultipleLines = 1 - }; - - enum EVROverlayIntersectionMaskPrimitiveType - { - OverlayIntersectionPrimitiveType_Rectangle, - OverlayIntersectionPrimitiveType_Circle, - }; - - struct IntersectionMaskRectangle_t - { - float m_flTopLeftX; - float m_flTopLeftY; - float m_flWidth; - float m_flHeight; - }; - - struct IntersectionMaskCircle_t - { - float m_flCenterX; - float m_flCenterY; - float m_flRadius; - }; - - /** NOTE!!! If you change this you MUST manually update openvr_interop.cs.py and openvr_api_flat.h.py */ - typedef union - { - IntersectionMaskRectangle_t m_Rectangle; - IntersectionMaskCircle_t m_Circle; - } VROverlayIntersectionMaskPrimitive_Data_t; - - struct VROverlayIntersectionMaskPrimitive_t - { - EVROverlayIntersectionMaskPrimitiveType m_nPrimitiveType; - VROverlayIntersectionMaskPrimitive_Data_t m_Primitive; - }; - - enum EKeyboardFlags - { - KeyboardFlag_Minimal = 1 << 0, // makes the keyboard send key events immediately instead of accumulating a buffer - KeyboardFlag_Modal = 2 << 0, // makes the keyboard take all focus and dismiss when clicking off the panel - }; - - /** Defines the project used in an overlay that is using SetOverlayTransformProjection */ - struct VROverlayProjection_t - { - /** Tangent of the sides of the frustum */ - float fLeft; - float fRight; - float fTop; - float fBottom; - }; - - class IVROverlay - { - public: - - // --------------------------------------------- - // Overlay management methods - // --------------------------------------------- - - /** Finds an existing overlay with the specified key. */ - virtual EVROverlayError FindOverlay( const char *pchOverlayKey, VROverlayHandle_t * pOverlayHandle ) = 0; - - /** Creates a new named overlay. All overlays start hidden and with default settings. */ - virtual EVROverlayError CreateOverlay( const char *pchOverlayKey, const char *pchOverlayName, VROverlayHandle_t * pOverlayHandle ) = 0; - - /** Destroys the specified overlay. When an application calls VR_Shutdown all overlays created by that app are - * automatically destroyed. */ - virtual EVROverlayError DestroyOverlay( VROverlayHandle_t ulOverlayHandle ) = 0; - - /** 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. */ - virtual uint32_t GetOverlayKey( VROverlayHandle_t ulOverlayHandle, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, EVROverlayError *pError = 0L ) = 0; - - /** 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. */ - virtual uint32_t GetOverlayName( VROverlayHandle_t ulOverlayHandle, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, EVROverlayError *pError = 0L ) = 0; - - /** set the name to use for this overlay */ - virtual EVROverlayError SetOverlayName( VROverlayHandle_t ulOverlayHandle, const char *pchName ) = 0; - - /** 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. */ - virtual EVROverlayError GetOverlayImageData( VROverlayHandle_t ulOverlayHandle, void *pvBuffer, uint32_t unBufferSize, uint32_t *punWidth, uint32_t *punHeight ) = 0; - - /** 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 */ - virtual const char *GetOverlayErrorNameFromEnum( EVROverlayError error ) = 0; - - // --------------------------------------------- - // Overlay rendering methods - // --------------------------------------------- - - /** 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 */ - virtual EVROverlayError SetOverlayRenderingPid( VROverlayHandle_t ulOverlayHandle, uint32_t unPID ) = 0; - - /** Gets the pid that is allowed to render to this overlay */ - virtual uint32_t GetOverlayRenderingPid( VROverlayHandle_t ulOverlayHandle ) = 0; - - /** Specify flag setting for a given overlay */ - virtual EVROverlayError SetOverlayFlag( VROverlayHandle_t ulOverlayHandle, VROverlayFlags eOverlayFlag, bool bEnabled ) = 0; - - /** Sets flag setting for a given overlay */ - virtual EVROverlayError GetOverlayFlag( VROverlayHandle_t ulOverlayHandle, VROverlayFlags eOverlayFlag, bool *pbEnabled ) = 0; - - /** Gets all the flags for a given overlay */ - virtual EVROverlayError GetOverlayFlags( VROverlayHandle_t ulOverlayHandle, uint32_t *pFlags ) = 0; - - /** Sets the color tint of the overlay quad. Use 0.0 to 1.0 per channel. */ - virtual EVROverlayError SetOverlayColor( VROverlayHandle_t ulOverlayHandle, float fRed, float fGreen, float fBlue ) = 0; - - /** Gets the color tint of the overlay quad. */ - virtual EVROverlayError GetOverlayColor( VROverlayHandle_t ulOverlayHandle, float *pfRed, float *pfGreen, float *pfBlue ) = 0; - - /** Sets the alpha of the overlay quad. Use 1.0 for 100 percent opacity to 0.0 for 0 percent opacity. */ - virtual EVROverlayError SetOverlayAlpha( VROverlayHandle_t ulOverlayHandle, float fAlpha ) = 0; - - /** Gets the alpha of the overlay quad. By default overlays are rendering at 100 percent alpha (1.0). */ - virtual EVROverlayError GetOverlayAlpha( VROverlayHandle_t ulOverlayHandle, float *pfAlpha ) = 0; - - /** 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. */ - virtual EVROverlayError SetOverlayTexelAspect( VROverlayHandle_t ulOverlayHandle, float fTexelAspect ) = 0; - - /** Gets the aspect ratio of the texels in the overlay. Defaults to 1.0 */ - virtual EVROverlayError GetOverlayTexelAspect( VROverlayHandle_t ulOverlayHandle, float *pfTexelAspect ) = 0; - - /** 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. - * - * Sort order defaults to 0. */ - virtual EVROverlayError SetOverlaySortOrder( VROverlayHandle_t ulOverlayHandle, uint32_t unSortOrder ) = 0; - - /** Gets the sort order of the overlay. See SetOverlaySortOrder for how this works. */ - virtual EVROverlayError GetOverlaySortOrder( VROverlayHandle_t ulOverlayHandle, uint32_t *punSortOrder ) = 0; - - /** Sets the width of the overlay quad in meters. By default overlays are rendered on a quad that is 1 meter across */ - virtual EVROverlayError SetOverlayWidthInMeters( VROverlayHandle_t ulOverlayHandle, float fWidthInMeters ) = 0; - - /** Returns the width of the overlay quad in meters. By default overlays are rendered on a quad that is 1 meter across */ - virtual EVROverlayError GetOverlayWidthInMeters( VROverlayHandle_t ulOverlayHandle, float *pfWidthInMeters ) = 0; - - /** 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). */ - virtual EVROverlayError SetOverlayCurvature( VROverlayHandle_t ulOverlayHandle, float fCurvature ) = 0; - - /** Returns the curvature of the overlay as a percentage from (0..1] where 1 is a fully closed cylinder. */ - virtual EVROverlayError GetOverlayCurvature( VROverlayHandle_t ulOverlayHandle, float *pfCurvature ) = 0; - - /** 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. */ - virtual EVROverlayError SetOverlayTextureColorSpace( VROverlayHandle_t ulOverlayHandle, EColorSpace eTextureColorSpace ) = 0; - - /** Gets the overlay's current colorspace setting. */ - virtual EVROverlayError GetOverlayTextureColorSpace( VROverlayHandle_t ulOverlayHandle, EColorSpace *peTextureColorSpace ) = 0; - - /** Sets 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. */ - virtual EVROverlayError SetOverlayTextureBounds( VROverlayHandle_t ulOverlayHandle, const VRTextureBounds_t *pOverlayTextureBounds ) = 0; - - /** Gets 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. */ - virtual EVROverlayError GetOverlayTextureBounds( VROverlayHandle_t ulOverlayHandle, VRTextureBounds_t *pOverlayTextureBounds ) = 0; - - /** Returns the transform type of this overlay. */ - virtual EVROverlayError GetOverlayTransformType( VROverlayHandle_t ulOverlayHandle, VROverlayTransformType *peTransformType ) = 0; - - /** Sets the transform to absolute tracking origin. */ - virtual EVROverlayError SetOverlayTransformAbsolute( VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, const HmdMatrix34_t *pmatTrackingOriginToOverlayTransform ) = 0; - - /** Gets the transform if it is absolute. Returns an error if the transform is some other type. */ - virtual EVROverlayError GetOverlayTransformAbsolute( VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin *peTrackingOrigin, HmdMatrix34_t *pmatTrackingOriginToOverlayTransform ) = 0; - - /** Sets the transform to relative to the transform of the specified tracked device. */ - virtual EVROverlayError SetOverlayTransformTrackedDeviceRelative( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unTrackedDevice, const HmdMatrix34_t *pmatTrackedDeviceToOverlayTransform ) = 0; - - /** Gets the transform if it is relative to a tracked device. Returns an error if the transform is some other type. */ - virtual EVROverlayError GetOverlayTransformTrackedDeviceRelative( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t *punTrackedDevice, HmdMatrix34_t *pmatTrackedDeviceToOverlayTransform ) = 0; - - /** 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. */ - virtual EVROverlayError SetOverlayTransformTrackedDeviceComponent( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t unDeviceIndex, const char *pchComponentName ) = 0; - - /** Gets the transform information when the overlay is rendering on a component. */ - virtual EVROverlayError GetOverlayTransformTrackedDeviceComponent( VROverlayHandle_t ulOverlayHandle, TrackedDeviceIndex_t *punDeviceIndex, VR_OUT_STRING() char *pchComponentName, uint32_t unComponentNameSize ) = 0; - - /** Gets the transform if it is relative to another overlay. Returns an error if the transform is some other type. */ - virtual vr::EVROverlayError GetOverlayTransformOverlayRelative( VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t *ulOverlayHandleParent, HmdMatrix34_t *pmatParentOverlayToOverlayTransform ) = 0; - - /** Sets the transform to relative to the transform of the specified overlay. This overlays visibility will also track the parents visibility */ - virtual vr::EVROverlayError SetOverlayTransformOverlayRelative( VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t ulOverlayHandleParent, const HmdMatrix34_t *pmatParentOverlayToOverlayTransform ) = 0; - - /** 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. */ - virtual EVROverlayError SetOverlayTransformCursor( VROverlayHandle_t ulCursorOverlayHandle, const HmdVector2_t *pvHotspot ) = 0; - - /** Gets cursor hotspot/transform for the specified overlay */ - virtual vr::EVROverlayError GetOverlayTransformCursor( VROverlayHandle_t ulOverlayHandle, HmdVector2_t *pvHotspot ) = 0; - - /** Sets the overlay as a projection overlay */ - virtual vr::EVROverlayError SetOverlayTransformProjection( VROverlayHandle_t ulOverlayHandle, - ETrackingUniverseOrigin eTrackingOrigin, const HmdMatrix34_t* pmatTrackingOriginToOverlayTransform, - const VROverlayProjection_t *pProjection, vr::EVREye eEye ) = 0; - - /** Shows the VR overlay. For dashboard overlays, only the Dashboard Manager is allowed to call this. */ - virtual EVROverlayError ShowOverlay( VROverlayHandle_t ulOverlayHandle ) = 0; - - /** Hides the VR overlay. For dashboard overlays, only the Dashboard Manager is allowed to call this. */ - virtual EVROverlayError HideOverlay( VROverlayHandle_t ulOverlayHandle ) = 0; - - /** Returns true if the overlay is visible. */ - virtual bool IsOverlayVisible( VROverlayHandle_t ulOverlayHandle ) = 0; - - /** Get 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 */ - virtual EVROverlayError GetTransformForOverlayCoordinates( VROverlayHandle_t ulOverlayHandle, ETrackingUniverseOrigin eTrackingOrigin, HmdVector2_t coordinatesInOverlay, HmdMatrix34_t *pmatTransform ) = 0; - - // --------------------------------------------- - // Overlay input methods - // --------------------------------------------- - - /** 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 */ - virtual bool PollNextOverlayEvent( VROverlayHandle_t ulOverlayHandle, VREvent_t *pEvent, uint32_t uncbVREvent ) = 0; - - /** Returns the current input settings for the specified overlay. */ - virtual EVROverlayError GetOverlayInputMethod( VROverlayHandle_t ulOverlayHandle, VROverlayInputMethod *peInputMethod ) = 0; - - /** Sets the input settings for the specified overlay. */ - virtual EVROverlayError SetOverlayInputMethod( VROverlayHandle_t ulOverlayHandle, VROverlayInputMethod eInputMethod ) = 0; - - /** 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. */ - virtual EVROverlayError GetOverlayMouseScale( VROverlayHandle_t ulOverlayHandle, HmdVector2_t *pvecMouseScale ) = 0; - - /** 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). */ - virtual EVROverlayError SetOverlayMouseScale( VROverlayHandle_t ulOverlayHandle, const HmdVector2_t *pvecMouseScale ) = 0; - - /** Computes the overlay-space pixel coordinates of where the ray intersects the overlay with the - * specified settings. Returns false if there is no intersection. */ - virtual bool ComputeOverlayIntersection( VROverlayHandle_t ulOverlayHandle, const VROverlayIntersectionParams_t *pParams, VROverlayIntersectionResults_t *pResults ) = 0; - - /** 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 */ - virtual bool IsHoverTargetOverlay( VROverlayHandle_t ulOverlayHandle ) = 0; - - /** 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). */ - virtual EVROverlayError SetOverlayIntersectionMask( VROverlayHandle_t ulOverlayHandle, VROverlayIntersectionMaskPrimitive_t *pMaskPrimitives, uint32_t unNumMaskPrimitives, uint32_t unPrimitiveSize = sizeof( VROverlayIntersectionMaskPrimitive_t ) ) = 0; - - /** Triggers a haptic event on the laser mouse controller for the specified overlay */ - virtual EVROverlayError TriggerLaserMouseHapticVibration( VROverlayHandle_t ulOverlayHandle, float fDurationSeconds, float fFrequency, float fAmplitude ) = 0; - - /** Sets 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 overlay */ - virtual EVROverlayError SetOverlayCursor( VROverlayHandle_t ulOverlayHandle, VROverlayHandle_t ulCursorHandle ) = 0; - - /** 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. */ - virtual EVROverlayError SetOverlayCursorPositionOverride( VROverlayHandle_t ulOverlayHandle, const HmdVector2_t *pvCursor ) = 0; - - /** Clears the override cursor position for this overlay */ - virtual EVROverlayError ClearOverlayCursorPositionOverride( VROverlayHandle_t ulOverlayHandle ) = 0; - - // --------------------------------------------- - // Overlay texture methods - // --------------------------------------------- - - /** 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 - */ - virtual EVROverlayError SetOverlayTexture( VROverlayHandle_t ulOverlayHandle, const Texture_t *pTexture ) = 0; - - /** Use this to tell the overlay system to release the texture set for this overlay. */ - virtual EVROverlayError ClearOverlayTexture( VROverlayHandle_t ulOverlayHandle ) = 0; - - /** 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. */ - virtual EVROverlayError SetOverlayRaw( VROverlayHandle_t ulOverlayHandle, void *pvBuffer, uint32_t unWidth, uint32_t unHeight, uint32_t unBytesPerPixel ) = 0; - - /** 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 */ - virtual EVROverlayError SetOverlayFromFile( VROverlayHandle_t ulOverlayHandle, const char *pchFilePath ) = 0; - - /** 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. - */ - virtual EVROverlayError GetOverlayTexture( VROverlayHandle_t ulOverlayHandle, void **pNativeTextureHandle, void *pNativeTextureRef, uint32_t *pWidth, uint32_t *pHeight, uint32_t *pNativeFormat, ETextureType *pAPIType, EColorSpace *pColorSpace, VRTextureBounds_t *pTextureBounds ) = 0; - - /** 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. - */ - virtual EVROverlayError ReleaseNativeOverlayHandle( VROverlayHandle_t ulOverlayHandle, void *pNativeTextureHandle ) = 0; - - /** Get the size of the overlay texture */ - virtual EVROverlayError GetOverlayTextureSize( VROverlayHandle_t ulOverlayHandle, uint32_t *pWidth, uint32_t *pHeight ) = 0; - - // ---------------------------------------------- - // Dashboard Overlay Methods - // ---------------------------------------------- - - /** Creates a dashboard overlay and returns its handle */ - virtual EVROverlayError CreateDashboardOverlay( const char *pchOverlayKey, const char *pchOverlayFriendlyName, VROverlayHandle_t * pMainHandle, VROverlayHandle_t *pThumbnailHandle ) = 0; - - /** Returns true if the dashboard is visible */ - virtual bool IsDashboardVisible() = 0; - - /** returns true if the dashboard is visible and the specified overlay is the active system Overlay */ - virtual bool IsActiveDashboardOverlay( VROverlayHandle_t ulOverlayHandle ) = 0; - - /** Sets the dashboard overlay to only appear when the specified process ID has scene focus */ - virtual EVROverlayError SetDashboardOverlaySceneProcess( VROverlayHandle_t ulOverlayHandle, uint32_t unProcessId ) = 0; - - /** Gets the process ID that this dashboard overlay requires to have scene focus */ - virtual EVROverlayError GetDashboardOverlaySceneProcess( VROverlayHandle_t ulOverlayHandle, uint32_t *punProcessId ) = 0; - - /** Shows the dashboard. */ - virtual void ShowDashboard( const char *pchOverlayToShow ) = 0; - - /** Returns the tracked device that has the laser pointer in the dashboard */ - virtual vr::TrackedDeviceIndex_t GetPrimaryDashboardDevice() = 0; - - // --------------------------------------------- - // Keyboard methods - // --------------------------------------------- - - /** 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. */ - virtual EVROverlayError ShowKeyboard( EGamepadTextInputMode eInputMode, EGamepadTextInputLineMode eLineInputMode, uint32_t unFlags, - const char *pchDescription, uint32_t unCharMax, const char *pchExistingText, uint64_t uUserValue ) = 0; - - /** 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. */ - virtual EVROverlayError ShowKeyboardForOverlay( VROverlayHandle_t ulOverlayHandle, EGamepadTextInputMode eInputMode, - EGamepadTextInputLineMode eLineInputMode, uint32_t unFlags, const char *pchDescription, uint32_t unCharMax, - const char *pchExistingText, uint64_t uUserValue ) = 0; - - /** Get the text that was entered into the text input **/ - virtual uint32_t GetKeyboardText( VR_OUT_STRING() char *pchText, uint32_t cchText ) = 0; - - /** Hide the virtual keyboard **/ - virtual void HideKeyboard() = 0; - - /** Set the position of the keyboard in world space **/ - virtual void SetKeyboardTransformAbsolute( ETrackingUniverseOrigin eTrackingOrigin, const HmdMatrix34_t *pmatTrackingOriginToKeyboardTransform ) = 0; - - /** Set 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 left **/ - virtual void SetKeyboardPositionForOverlay( VROverlayHandle_t ulOverlayHandle, HmdRect2_t avoidRect ) = 0; - - // --------------------------------------------- - // Message box methods - // --------------------------------------------- - - /** Show the message overlay. This will block and return you a result. **/ - virtual VRMessageOverlayResponse ShowMessageOverlay( const char* pchText, const char* pchCaption, const char* pchButton0Text, const char* pchButton1Text = nullptr, const char* pchButton2Text = nullptr, const char* pchButton3Text = nullptr ) = 0; - - /** If the calling process owns the overlay and it's open, this will close it. **/ - virtual void CloseMessageOverlay() = 0; - }; - - static const char * const IVROverlay_Version = "IVROverlay_025"; - -} // namespace vr - -// ivroverlayview.h - -namespace vr -{ - struct VROverlayView_t - { - VROverlayHandle_t overlayHandle; - Texture_t texture; - VRTextureBounds_t textureBounds; - }; - - enum EDeviceType - { - DeviceType_Invalid = -1, // Invalid handle - DeviceType_DirectX11 = 0, // Handle is an ID3D11Device - DeviceType_Vulkan = 1, // Handle is a pointer to a VRVulkanDevice_t structure - }; - - struct VRVulkanDevice_t - { - VkInstance_T *m_pInstance; - VkDevice_T *m_pDevice; - VkPhysicalDevice_T *m_pPhysicalDevice; - VkQueue_T *m_pQueue; - uint32_t m_uQueueFamilyIndex; - }; - - struct VRNativeDevice_t - { - void *handle; // See EDeviceType definition above - EDeviceType eType; - }; - - class IVROverlayView - { - public: - /** 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. - */ - virtual EVROverlayError AcquireOverlayView(VROverlayHandle_t ulOverlayHandle, VRNativeDevice_t *pNativeDevice, VROverlayView_t *pOverlayView, uint32_t unOverlayViewSize ) = 0; - - /** 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. - */ - virtual EVROverlayError ReleaseOverlayView(VROverlayView_t *pOverlayView) = 0; - - /** Posts an overlay event */ - virtual void PostOverlayEvent(VROverlayHandle_t ulOverlayHandle, const VREvent_t *pvrEvent) = 0; - - /** Determines whether this process is permitted to view an overlay's content. */ - virtual bool IsViewingPermitted( VROverlayHandle_t ulOverlayHandle ) = 0; - - }; - - static const char * const IVROverlayView_Version = "IVROverlayView_003"; - -} - -// ivrrendermodels.h - -namespace vr -{ - -static const char * const k_pch_Controller_Component_GDC2015 = "gdc2015"; // Canonical coordinate system of the gdc 2015 wired controller, provided for backwards compatibility -static const char * const k_pch_Controller_Component_Base = "base"; // For controllers with an unambiguous 'base'. -static const char * const k_pch_Controller_Component_Tip = "tip"; // For controllers with an unambiguous 'tip' (used for 'laser-pointing') -static const char * const k_pch_Controller_Component_HandGrip = "handgrip"; // Neutral, ambidextrous hand-pose when holding controller. On plane between neutrally posed index finger and thumb -static const char * const k_pch_Controller_Component_Status = "status"; // 1:1 aspect ratio status area, with canonical [0,1] uv mapping - -#pragma pack( push, 8 ) - -/** Errors that can occur with the VR compositor */ -enum EVRRenderModelError -{ - VRRenderModelError_None = 0, - VRRenderModelError_Loading = 100, - VRRenderModelError_NotSupported = 200, - VRRenderModelError_InvalidArg = 300, - VRRenderModelError_InvalidModel = 301, - VRRenderModelError_NoShapes = 302, - VRRenderModelError_MultipleShapes = 303, - VRRenderModelError_TooManyVertices = 304, - VRRenderModelError_MultipleTextures = 305, - VRRenderModelError_BufferTooSmall = 306, - VRRenderModelError_NotEnoughNormals = 307, - VRRenderModelError_NotEnoughTexCoords = 308, - - VRRenderModelError_InvalidTexture = 400, -}; - -enum EVRRenderModelTextureFormat -{ - VRRenderModelTextureFormat_RGBA8_SRGB = 0, // RGBA with 8 bits per channel per pixel. Data size is width * height * 4ub - VRRenderModelTextureFormat_BC2, - VRRenderModelTextureFormat_BC4, - VRRenderModelTextureFormat_BC7, - VRRenderModelTextureFormat_BC7_SRGB -}; - -/** A single vertex in a render model */ -struct RenderModel_Vertex_t -{ - HmdVector3_t vPosition; // position in meters in device space - HmdVector3_t vNormal; - float rfTextureCoord[2]; -}; - -/** A texture map for use on a render model */ -#if defined(__linux__) || defined(__APPLE__) -// This structure was originally defined mis-packed on Linux, preserved for -// compatibility. -#pragma pack( push, 4 ) -#endif - -struct RenderModel_TextureMap_t -{ - uint16_t unWidth, unHeight; // width and height of the texture map in pixels - const uint8_t *rubTextureMapData; // Map texture data. - EVRRenderModelTextureFormat format; // Refer to EVRRenderModelTextureFormat -}; -#if defined(__linux__) || defined(__APPLE__) -#pragma pack( pop ) -#endif - -/** Session unique texture identifier. Rendermodels which share the same texture will have the same id. -IDs <0 denote the texture is not present */ - -typedef int32_t TextureID_t; - -const TextureID_t INVALID_TEXTURE_ID = -1; - -#if defined(__linux__) || defined(__APPLE__) -// This structure was originally defined mis-packed on Linux, preserved for -// compatibility. -#pragma pack( push, 4 ) -#endif - -struct RenderModel_t -{ - const RenderModel_Vertex_t *rVertexData; // Vertex data for the mesh - uint32_t unVertexCount; // Number of vertices in the vertex data - const uint16_t *rIndexData; // Indices into the vertex data for each triangle - uint32_t unTriangleCount; // Number of triangles in the mesh. Index count is 3 * TriangleCount - TextureID_t diffuseTextureId; // Session unique texture identifier. Rendermodels which share the same texture will have the same id. <0 == texture not present -}; -#if defined(__linux__) || defined(__APPLE__) -#pragma pack( pop ) -#endif - - -struct RenderModel_ControllerMode_State_t -{ - bool bScrollWheelVisible; // is this controller currently set to be in a scroll wheel mode -}; - -#pragma pack( pop ) - -class IVRRenderModels -{ -public: - - /** 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. */ - virtual EVRRenderModelError LoadRenderModel_Async( const char *pchRenderModelName, RenderModel_t **ppRenderModel ) = 0; - - /** Frees a previously returned render model - * It is safe to call this on a null ptr. */ - virtual void FreeRenderModel( RenderModel_t *pRenderModel ) = 0; - - /** Loads and returns a texture for use in the application. */ - virtual EVRRenderModelError LoadTexture_Async( TextureID_t textureId, RenderModel_TextureMap_t **ppTexture ) = 0; - - /** Frees a previously returned texture - * It is safe to call this on a null ptr. */ - virtual void FreeTexture( RenderModel_TextureMap_t *pTexture ) = 0; - - /** Creates a D3D11 texture and loads data into it. */ - virtual EVRRenderModelError LoadTextureD3D11_Async( TextureID_t textureId, void *pD3D11Device, void **ppD3D11Texture2D ) = 0; - - /** Helper function to copy the bits into an existing texture. */ - virtual EVRRenderModelError LoadIntoTextureD3D11_Async( TextureID_t textureId, void *pDstTexture ) = 0; - - /** Use this to free textures created with LoadTextureD3D11_Async instead of calling Release on them. */ - virtual void FreeTextureD3D11( void *pD3D11Texture2D ) = 0; - - /** 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. */ - virtual uint32_t GetRenderModelName( uint32_t unRenderModelIndex, VR_OUT_STRING() char *pchRenderModelName, uint32_t unRenderModelNameLen ) = 0; - - /** Returns the number of available render models. */ - virtual uint32_t GetRenderModelCount() = 0; - - - /** 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 */ - virtual uint32_t GetComponentCount( const char *pchRenderModelName ) = 0; - - /** 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. */ - virtual uint32_t GetComponentName( const char *pchRenderModelName, uint32_t unComponentIndex, VR_OUT_STRING( ) char *pchComponentName, uint32_t unComponentNameLen ) = 0; - - /** 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 */ - virtual uint64_t GetComponentButtonMask( const char *pchRenderModelName, const char *pchComponentName ) = 0; - - /** 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. */ - virtual uint32_t GetComponentRenderModelName( const char *pchRenderModelName, const char *pchComponentName, VR_OUT_STRING( ) char *pchComponentRenderModelName, uint32_t unComponentRenderModelNameLen ) = 0; - - /** 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 ) */ - virtual bool GetComponentStateForDevicePath( const char *pchRenderModelName, const char *pchComponentName, vr::VRInputValueHandle_t devicePath, const vr::RenderModel_ControllerMode_State_t *pState, vr::RenderModel_ComponentState_t *pComponentState ) = 0; - - /** This 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. */ - virtual bool GetComponentState( const char *pchRenderModelName, const char *pchComponentName, const vr::VRControllerState_t *pControllerState, const RenderModel_ControllerMode_State_t *pState, RenderModel_ComponentState_t *pComponentState ) = 0; - - /** Returns true if the render model has a component with the specified name */ - virtual bool RenderModelHasComponent( const char *pchRenderModelName, const char *pchComponentName ) = 0; - - /** Returns the URL of the thumbnail image for this rendermodel */ - virtual uint32_t GetRenderModelThumbnailURL( const char *pchRenderModelName, VR_OUT_STRING() char *pchThumbnailURL, uint32_t unThumbnailURLLen, vr::EVRRenderModelError *peError ) = 0; - - /** 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. */ - virtual uint32_t GetRenderModelOriginalPath( const char *pchRenderModelName, VR_OUT_STRING() char *pchOriginalPath, uint32_t unOriginalPathLen, vr::EVRRenderModelError *peError ) = 0; - - /** Returns a string for a render model error */ - virtual const char *GetRenderModelErrorNameFromEnum( vr::EVRRenderModelError error ) = 0; -}; - -static const char * const IVRRenderModels_Version = "IVRRenderModels_006"; - -} - - -// ivrextendeddisplay.h - -namespace vr -{ - - /** 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. */ - class IVRExtendedDisplay - { - public: - - /** Size and position that the window needs to be on the VR display. */ - virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0; - - /** Gets the viewport in the frame buffer to draw the output of the distortion into */ - virtual void GetEyeOutputViewport( EVREye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0; - - /** [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. - */ - virtual void GetDXGIOutputInfo( int32_t *pnAdapterIndex, int32_t *pnAdapterOutputIndex ) = 0; - - }; - - static const char * const IVRExtendedDisplay_Version = "IVRExtendedDisplay_001"; - -} - - -// ivrtrackedcamera.h - -namespace vr -{ - -class IVRTrackedCamera -{ -public: - /** Returns a string for an error */ - virtual const char *GetCameraErrorNameFromEnum( vr::EVRTrackedCameraError eCameraError ) = 0; - - /** For convenience, same as tracked property request Prop_HasCamera_Bool */ - virtual vr::EVRTrackedCameraError HasCamera( vr::TrackedDeviceIndex_t nDeviceIndex, bool *pHasCamera ) = 0; - - /** Gets size of the image frame. */ - virtual vr::EVRTrackedCameraError GetCameraFrameSize( vr::TrackedDeviceIndex_t nDeviceIndex, vr::EVRTrackedCameraFrameType eFrameType, uint32_t *pnWidth, uint32_t *pnHeight, uint32_t *pnFrameBufferSize ) = 0; - - virtual vr::EVRTrackedCameraError GetCameraIntrinsics( vr::TrackedDeviceIndex_t nDeviceIndex, uint32_t nCameraIndex, vr::EVRTrackedCameraFrameType eFrameType, vr::HmdVector2_t *pFocalLength, vr::HmdVector2_t *pCenter ) = 0; - - virtual vr::EVRTrackedCameraError GetCameraProjection( vr::TrackedDeviceIndex_t nDeviceIndex, uint32_t nCameraIndex, vr::EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, vr::HmdMatrix44_t *pProjection ) = 0; - - /** 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. */ - virtual vr::EVRTrackedCameraError AcquireVideoStreamingService( vr::TrackedDeviceIndex_t nDeviceIndex, vr::TrackedCameraHandle_t *pHandle ) = 0; - virtual vr::EVRTrackedCameraError ReleaseVideoStreamingService( vr::TrackedCameraHandle_t hTrackedCamera ) = 0; - - /** 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 */ - virtual vr::EVRTrackedCameraError GetVideoStreamFrameBuffer( vr::TrackedCameraHandle_t hTrackedCamera, vr::EVRTrackedCameraFrameType eFrameType, void *pFrameBuffer, uint32_t nFrameBufferSize, vr::CameraVideoStreamFrameHeader_t *pFrameHeader, uint32_t nFrameHeaderSize ) = 0; - - /** Gets size of the image frame. */ - virtual vr::EVRTrackedCameraError GetVideoStreamTextureSize( vr::TrackedDeviceIndex_t nDeviceIndex, vr::EVRTrackedCameraFrameType eFrameType, vr::VRTextureBounds_t *pTextureBounds, uint32_t *pnWidth, uint32_t *pnHeight ) = 0; - - /** 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. */ - virtual vr::EVRTrackedCameraError GetVideoStreamTextureD3D11( vr::TrackedCameraHandle_t hTrackedCamera, vr::EVRTrackedCameraFrameType eFrameType, void *pD3D11DeviceOrResource, void **ppD3D11ShaderResourceView, vr::CameraVideoStreamFrameHeader_t *pFrameHeader, uint32_t nFrameHeaderSize ) = 0; - - /** Access a shared GL texture for the specified tracked camera stream */ - virtual vr::EVRTrackedCameraError GetVideoStreamTextureGL( vr::TrackedCameraHandle_t hTrackedCamera, vr::EVRTrackedCameraFrameType eFrameType, vr::glUInt_t *pglTextureId, vr::CameraVideoStreamFrameHeader_t *pFrameHeader, uint32_t nFrameHeaderSize ) = 0; - virtual vr::EVRTrackedCameraError ReleaseVideoStreamTextureGL( vr::TrackedCameraHandle_t hTrackedCamera, vr::glUInt_t glTextureId ) = 0; - virtual void SetCameraTrackingSpace( vr::ETrackingUniverseOrigin eUniverse ) = 0; - virtual vr::ETrackingUniverseOrigin GetCameraTrackingSpace( ) = 0; -}; - -static const char * const IVRTrackedCamera_Version = "IVRTrackedCamera_006"; - -} // namespace vr - - -// ivrscreenshots.h - -namespace vr -{ - -/** Errors that can occur with the VR compositor */ -enum EVRScreenshotError -{ - VRScreenshotError_None = 0, - VRScreenshotError_RequestFailed = 1, - VRScreenshotError_IncompatibleVersion = 100, - VRScreenshotError_NotFound = 101, - VRScreenshotError_BufferTooSmall = 102, - VRScreenshotError_ScreenshotAlreadyInProgress = 108, -}; - -/** Allows the application to generate screenshots */ -class IVRScreenshots -{ -public: - /** 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. */ - virtual vr::EVRScreenshotError RequestScreenshot( vr::ScreenshotHandle_t *pOutScreenshotHandle, vr::EVRScreenshotType type, const char *pchPreviewFilename, const char *pchVRFilename ) = 0; - - /** 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. */ - virtual vr::EVRScreenshotError HookScreenshot( VR_ARRAY_COUNT( numTypes ) const vr::EVRScreenshotType *pSupportedTypes, int numTypes ) = 0; - - /** When your application receives a - * VREvent_RequestScreenshot event, call these functions to get - * the details of the screenshot request. */ - virtual vr::EVRScreenshotType GetScreenshotPropertyType( vr::ScreenshotHandle_t screenshotHandle, vr::EVRScreenshotError *pError ) = 0; - - /** Get the filename for the preview or vr image (see - * vr::EScreenshotPropertyFilenames). The return value is - * the size of the string. */ - virtual uint32_t GetScreenshotPropertyFilename( vr::ScreenshotHandle_t screenshotHandle, vr::EVRScreenshotPropertyFilenames filenameType, VR_OUT_STRING() char *pchFilename, uint32_t cchFilename, vr::EVRScreenshotError *pError ) = 0; - - /** 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. */ - virtual vr::EVRScreenshotError UpdateScreenshotProgress( vr::ScreenshotHandle_t screenshotHandle, float flProgress ) = 0; - - /** 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. */ - virtual vr::EVRScreenshotError TakeStereoScreenshot( vr::ScreenshotHandle_t *pOutScreenshotHandle, const char *pchPreviewFilename, const char *pchVRFilename ) = 0; - - /** 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) */ - virtual vr::EVRScreenshotError SubmitScreenshot( vr::ScreenshotHandle_t screenshotHandle, vr::EVRScreenshotType type, const char *pchSourcePreviewFilename, const char *pchSourceVRFilename ) = 0; -}; - -static const char * const IVRScreenshots_Version = "IVRScreenshots_001"; - -} // namespace vr - - - -// ivrresources.h - -namespace vr -{ - -class IVRResources -{ -public: - - // ------------------------------------ - // Shared Resource Methods - // ------------------------------------ - - /** 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. */ - virtual uint32_t LoadSharedResource( const char *pchResourceName, char *pchBuffer, uint32_t unBufferLen ) = 0; - - /** 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. */ - virtual uint32_t GetResourceFullPath( const char *pchResourceName, const char *pchResourceTypeDirectory, VR_OUT_STRING() char *pchPathBuffer, uint32_t unBufferLen ) = 0; -}; - -static const char * const IVRResources_Version = "IVRResources_001"; - - -} - -// ivrdrivermanager.h - -namespace vr -{ - -class IVRDriverManager -{ -public: - virtual uint32_t GetDriverCount() const = 0; - - /** Returns the length of the number of bytes necessary to hold this string including the trailing null. */ - virtual uint32_t GetDriverName( vr::DriverId_t nDriver, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0; - - virtual DriverHandle_t GetDriverHandle( const char *pchDriverName ) = 0; - - virtual bool IsEnabled( vr::DriverId_t nDriver ) const = 0; -}; - -static const char * const IVRDriverManager_Version = "IVRDriverManager_001"; - -} // namespace vr - - - -// ivrinput.h - -namespace vr -{ - // Maximum number of characters in an action name, including the trailing null - static const uint32_t k_unMaxActionNameLength = 64; - - // Maximum number of characters in an action set name, including the trailing null - static const uint32_t k_unMaxActionSetNameLength = 64; - - // Maximum number of origins for an action - static const uint32_t k_unMaxActionOriginCount = 16; - - // Maximum number of characters in a bone name, including the trailing null - static const uint32_t k_unMaxBoneNameLength = 32; - - enum EVRSkeletalTransformSpace - { - VRSkeletalTransformSpace_Model = 0, - VRSkeletalTransformSpace_Parent = 1 - }; - - enum EVRSkeletalReferencePose - { - VRSkeletalReferencePose_BindPose = 0, - VRSkeletalReferencePose_OpenHand, - VRSkeletalReferencePose_Fist, - VRSkeletalReferencePose_GripLimit - }; - - enum EVRFinger - { - VRFinger_Thumb = 0, - VRFinger_Index, - VRFinger_Middle, - VRFinger_Ring, - VRFinger_Pinky, - VRFinger_Count - }; - - enum EVRFingerSplay - { - VRFingerSplay_Thumb_Index = 0, - VRFingerSplay_Index_Middle, - VRFingerSplay_Middle_Ring, - VRFingerSplay_Ring_Pinky, - VRFingerSplay_Count - }; - - enum EVRSummaryType - { - // The skeletal summary data will match the animated bone transforms for the action. - VRSummaryType_FromAnimation = 0, - - // The skeletal summary data will include unprocessed data directly from the device when available. - // This data is generally less latent than the data that is computed from the animations. - VRSummaryType_FromDevice = 1, - }; - - enum EVRInputFilterCancelType - { - VRInputFilterCancel_Timers = 0, - VRInputFilterCancel_Momentum = 1, - }; - - enum EVRInputStringBits - { - VRInputString_Hand = 0x01, - VRInputString_ControllerType = 0x02, - VRInputString_InputSource = 0x04, - - VRInputString_All = 0xFFFFFFFF - }; - - struct InputAnalogActionData_t - { - /** Whether or not this action is currently available to be bound in the active action set */ - bool bActive; - - /** The origin that caused this action's current state */ - VRInputValueHandle_t activeOrigin; - - /** The current state of this action; will be delta updates for mouse actions */ - float x, y, z; - - /** Deltas since the previous call to UpdateActionState() */ - float deltaX, deltaY, deltaZ; - - /** Time relative to now when this event happened. Will be negative to indicate a past time. */ - float fUpdateTime; - }; - - struct InputDigitalActionData_t - { - /** Whether or not this action is currently available to be bound in the active action set */ - bool bActive; - - /** The origin that caused this action's current state */ - VRInputValueHandle_t activeOrigin; - - /** The current state of this action; will be true if currently pressed */ - bool bState; - - /** This is true if the state has changed since the last frame */ - bool bChanged; - - /** Time relative to now when this event happened. Will be negative to indicate a past time. */ - float fUpdateTime; - }; - - struct InputPoseActionData_t - { - /** Whether or not this action is currently available to be bound in the active action set */ - bool bActive; - - /** The origin that caused this action's current state */ - VRInputValueHandle_t activeOrigin; - - /** The current state of this action */ - TrackedDevicePose_t pose; - }; - - struct InputSkeletalActionData_t - { - /** Whether or not this action is currently available to be bound in the active action set */ - bool bActive; - - /** The origin that caused this action's current state */ - VRInputValueHandle_t activeOrigin; - }; - - struct InputOriginInfo_t - { - VRInputValueHandle_t devicePath; - TrackedDeviceIndex_t trackedDeviceIndex; - char rchRenderModelComponentName[128]; - }; - - struct InputBindingInfo_t - { - char rchDevicePathName[128]; - char rchInputPathName[128]; - char rchModeName[128]; - char rchSlotName[128]; - char rchInputSourceType[ 32 ]; - }; - - // * Experimental global action set priority * - // These constants are part of the experimental support in SteamVR for overlay - // apps selectively overriding input in the base scene application. This may be - // useful for overlay applications that need to use part or all of a controller - // without taking away all input to the game. This system must be enabled by the - // "Experimental overlay input overrides" setting in the developer section of - // SteamVR settings. - // - // To use this system, set the nPriority field of an action set to any number in - // this range. - static const int32_t k_nActionSetOverlayGlobalPriorityMin = 0x01000000; - static const int32_t k_nActionSetOverlayGlobalPriorityMax = 0x01FFFFFF; - - static const int32_t k_nActionSetPriorityReservedMin = 0x02000000; - - struct VRActiveActionSet_t - { - /** This is the handle of the action set to activate for this frame. */ - VRActionSetHandle_t ulActionSet; - - /** This is the handle of a device path that this action set should be active for. To - * activate for all devices, set this to k_ulInvalidInputValueHandle. */ - VRInputValueHandle_t ulRestrictedToDevice; - - /** The action set to activate for all devices other than ulRestrictedDevice. If - * ulRestrictedToDevice is set to k_ulInvalidInputValueHandle, this parameter is - * ignored. */ - VRActionSetHandle_t ulSecondaryActionSet; - - // This field is ignored - uint32_t unPadding; - - /** The priority of this action set relative to other action sets. Any inputs - * bound to a source (e.g. trackpad, joystick, trigger) will disable bindings in - * other active action sets with a smaller priority. - * - * Overlay applications (i.e. ApplicationType_Overlay) may set their action set priority - * to a value between k_nActionSetOverlayGlobalPriorityMin and k_nActionSetOverlayGlobalPriorityMax - * to cause any inputs bound to a source used by that action set to be disabled in scene applications. - * - * No action set priority may value may be larger than k_nActionSetPriorityReservedMin - */ - int32_t nPriority; - }; - - /** Contains summary information about the current skeletal pose */ - struct VRSkeletalSummaryData_t - { - /** The amount that each finger is 'curled' inwards towards the palm. In the case of the thumb, - * this represents how much the thumb is wrapped around the fist. - * 0 means straight, 1 means fully curled */ - float flFingerCurl[ VRFinger_Count ]; - - /** The amount that each pair of adjacent fingers are separated. - * 0 means the digits are touching, 1 means they are fully separated. - */ - float flFingerSplay[ VRFingerSplay_Count ]; - }; - - - class IVRInput - { - public: - - // --------------- Handle management --------------- // - - /** 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. */ - virtual EVRInputError SetActionManifestPath( const char *pchActionManifestPath ) = 0; - - /** Returns a handle for an action set. This handle is used for all performance-sensitive calls. */ - virtual EVRInputError GetActionSetHandle( const char *pchActionSetName, VRActionSetHandle_t *pHandle ) = 0; - - /** Returns a handle for an action. This handle is used for all performance-sensitive calls. */ - virtual EVRInputError GetActionHandle( const char *pchActionName, VRActionHandle_t *pHandle ) = 0; - - /** Returns a handle for any path in the input system. E.g. /user/hand/right */ - virtual EVRInputError GetInputSourceHandle( const char *pchInputSourcePath, VRInputValueHandle_t *pHandle ) = 0; - - - - // --------------- Reading action state ------------------- // - - /** 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. */ - virtual EVRInputError UpdateActionState( VR_ARRAY_COUNT( unSetCount ) VRActiveActionSet_t *pSets, uint32_t unSizeOfVRSelectedActionSet_t, uint32_t unSetCount ) = 0; - - /** 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 */ - virtual EVRInputError GetDigitalActionData( VRActionHandle_t action, InputDigitalActionData_t *pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) = 0; - - /** 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 */ - virtual EVRInputError GetAnalogActionData( VRActionHandle_t action, InputAnalogActionData_t *pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) = 0; - - /** 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. */ - virtual EVRInputError GetPoseActionDataRelativeToNow( VRActionHandle_t action, ETrackingUniverseOrigin eOrigin, float fPredictedSecondsFromNow, InputPoseActionData_t *pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) = 0; - - /** 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(). */ - virtual EVRInputError GetPoseActionDataForNextFrame( VRActionHandle_t action, ETrackingUniverseOrigin eOrigin, InputPoseActionData_t *pActionData, uint32_t unActionDataSize, VRInputValueHandle_t ulRestrictToDevice ) = 0; - - /** Reads the state of a skeletal action given its handle. */ - virtual EVRInputError GetSkeletalActionData( VRActionHandle_t action, InputSkeletalActionData_t *pActionData, uint32_t unActionDataSize ) = 0; - - /** 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. */ - virtual EVRInputError GetDominantHand( ETrackedControllerRole *peDominantHand ) = 0; - - /** Sets the dominant hand for the user for this application. */ - virtual EVRInputError SetDominantHand( ETrackedControllerRole eDominantHand ) = 0; - - // --------------- Static Skeletal Data ------------------- // - - /** Reads the number of bones in skeleton associated with the given action */ - virtual EVRInputError GetBoneCount( VRActionHandle_t action, uint32_t* pBoneCount ) = 0; - - /** Fills the given array with the index of each bone's parent in the skeleton associated with the given action */ - virtual EVRInputError GetBoneHierarchy( VRActionHandle_t action, VR_ARRAY_COUNT( unIndexArayCount ) BoneIndex_t* pParentIndices, uint32_t unIndexArayCount ) = 0; - - /** Fills the given buffer with the name of the bone at the given index in the skeleton associated with the given action */ - virtual EVRInputError GetBoneName( VRActionHandle_t action, BoneIndex_t nBoneIndex, VR_OUT_STRING() char* pchBoneName, uint32_t unNameBufferSize ) = 0; - - /** Fills the given buffer with the transforms for a specific static skeletal reference pose */ - virtual EVRInputError GetSkeletalReferenceTransforms( VRActionHandle_t action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalReferencePose eReferencePose, VR_ARRAY_COUNT( unTransformArrayCount ) VRBoneTransform_t *pTransformArray, uint32_t unTransformArrayCount ) = 0; - - /** Reads the level of accuracy to which the controller is able to track the user to recreate a skeletal pose */ - virtual EVRInputError GetSkeletalTrackingLevel( VRActionHandle_t action, EVRSkeletalTrackingLevel* pSkeletalTrackingLevel ) = 0; - - // --------------- Dynamic Skeletal Data ------------------- // - - /** Reads the state of the skeletal bone data associated with this action and copies it into the given buffer. */ - virtual EVRInputError GetSkeletalBoneData( VRActionHandle_t action, EVRSkeletalTransformSpace eTransformSpace, EVRSkeletalMotionRange eMotionRange, VR_ARRAY_COUNT( unTransformArrayCount ) VRBoneTransform_t *pTransformArray, uint32_t unTransformArrayCount ) = 0; - - /** Reads summary information about the current pose of the skeleton associated with the given action. */ - virtual EVRInputError GetSkeletalSummaryData( VRActionHandle_t action, EVRSummaryType eSummaryType, VRSkeletalSummaryData_t * pSkeletalSummaryData ) = 0; - - /** 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. */ - virtual EVRInputError GetSkeletalBoneDataCompressed( VRActionHandle_t action, EVRSkeletalMotionRange eMotionRange, VR_OUT_BUFFER_COUNT( unCompressedSize ) void *pvCompressedData, uint32_t unCompressedSize, uint32_t *punRequiredCompressedSize ) = 0; - - /** Turns a compressed buffer from GetSkeletalBoneDataCompressed and turns it back into a bone transform array. */ - virtual EVRInputError DecompressSkeletalBoneData( const void *pvCompressedBuffer, uint32_t unCompressedBufferSize, EVRSkeletalTransformSpace eTransformSpace, VR_ARRAY_COUNT( unTransformArrayCount ) VRBoneTransform_t *pTransformArray, uint32_t unTransformArrayCount ) = 0; - - // --------------- Haptics ------------------- // - - /** Triggers a haptic event as described by the specified action */ - virtual EVRInputError TriggerHapticVibrationAction( VRActionHandle_t action, float fStartSecondsFromNow, float fDurationSeconds, float fFrequency, float fAmplitude, VRInputValueHandle_t ulRestrictToDevice ) = 0; - - // --------------- Action Origins ---------------- // - - /** Retrieve origin handles for an action */ - virtual EVRInputError GetActionOrigins( VRActionSetHandle_t actionSetHandle, VRActionHandle_t digitalActionHandle, VR_ARRAY_COUNT( originOutCount ) VRInputValueHandle_t *originsOut, uint32_t originOutCount ) = 0; - - /** 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. */ - virtual EVRInputError GetOriginLocalizedName( VRInputValueHandle_t origin, VR_OUT_STRING() char *pchNameArray, uint32_t unNameArraySize, int32_t unStringSectionsToInclude ) = 0; - - /** Retrieves useful information for the origin of this action */ - virtual EVRInputError GetOriginTrackedDeviceInfo( VRInputValueHandle_t origin, InputOriginInfo_t *pOriginInfo, uint32_t unOriginInfoSize ) = 0; - - /** Retrieves useful information about the bindings for an action */ - virtual EVRInputError GetActionBindingInfo( VRActionHandle_t action, InputBindingInfo_t *pOriginInfo, uint32_t unBindingInfoSize, uint32_t unBindingInfoCount, uint32_t *punReturnedBindingInfoCount ) = 0; - - /** Shows the current binding for the action in-headset */ - virtual EVRInputError ShowActionOrigins( VRActionSetHandle_t actionSetHandle, VRActionHandle_t ulActionHandle ) = 0; - - /** Shows the current binding all the actions in the specified action sets */ - virtual EVRInputError ShowBindingsForActionSet( VR_ARRAY_COUNT( unSetCount ) VRActiveActionSet_t *pSets, uint32_t unSizeOfVRSelectedActionSet_t, uint32_t unSetCount, VRInputValueHandle_t originToHighlight ) = 0; - - /** Use this to query what action on the component returned by GetOriginTrackedDeviceInfo would trigger this binding. */ - virtual EVRInputError GetComponentStateForBinding( const char *pchRenderModelName, const char *pchComponentName, - const InputBindingInfo_t *pOriginInfo, uint32_t unBindingInfoSize, uint32_t unBindingInfoCount, - vr::RenderModel_ComponentState_t *pComponentState ) = 0; - - - // --------------- Legacy Input ------------------- // - virtual bool IsUsingLegacyInput() = 0; - - - // --------------- Utilities ------------------- // - - /** 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. */ - virtual EVRInputError OpenBindingUI( const char* pchAppKey, VRActionSetHandle_t ulActionSetHandle, VRInputValueHandle_t ulDeviceHandle, bool bShowOnDesktop ) = 0; - - /** Returns the variant set in the current bindings. If the binding doesn't include a variant setting, this function - * will return an empty string */ - virtual EVRInputError GetBindingVariant( vr::VRInputValueHandle_t ulDevicePath, - VR_OUT_STRING() char *pchVariantArray, uint32_t unVariantArraySize ) = 0; - - }; - - static const char * const IVRInput_Version = "IVRInput_010"; - -} // namespace vr - -// ivriobuffer.h - -namespace vr -{ - -typedef uint64_t IOBufferHandle_t; -static const uint64_t k_ulInvalidIOBufferHandle = 0; - - enum EIOBufferError - { - IOBuffer_Success = 0, - IOBuffer_OperationFailed = 100, - IOBuffer_InvalidHandle = 101, - IOBuffer_InvalidArgument = 102, - IOBuffer_PathExists = 103, - IOBuffer_PathDoesNotExist = 104, - IOBuffer_Permission = 105, - }; - - enum EIOBufferMode - { - IOBufferMode_Read = 0x0001, - IOBufferMode_Write = 0x0002, - IOBufferMode_Create = 0x0200, - }; - - // ---------------------------------------------------------------------------------------------- - // Purpose: - // ---------------------------------------------------------------------------------------------- - class IVRIOBuffer - { - public: - /** opens an existing or creates a new IOBuffer of unSize bytes */ - virtual vr::EIOBufferError Open( const char *pchPath, vr::EIOBufferMode mode, uint32_t unElementSize, uint32_t unElements, vr::IOBufferHandle_t *pulBuffer ) = 0; - - /** closes a previously opened or created buffer */ - virtual vr::EIOBufferError Close( vr::IOBufferHandle_t ulBuffer ) = 0; - - /** reads up to unBytes from buffer into *pDst, returning number of bytes read in *punRead */ - virtual vr::EIOBufferError Read( vr::IOBufferHandle_t ulBuffer, void *pDst, uint32_t unBytes, uint32_t *punRead ) = 0; - - /** writes unBytes of data from *pSrc into a buffer. */ - virtual vr::EIOBufferError Write( vr::IOBufferHandle_t ulBuffer, void *pSrc, uint32_t unBytes ) = 0; - - /** retrieves the property container of an buffer. */ - virtual vr::PropertyContainerHandle_t PropertyContainer( vr::IOBufferHandle_t ulBuffer ) = 0; - - /** inexpensively checks for readers to allow writers to fast-fail potentially expensive copies and writes. */ - virtual bool HasReaders( vr::IOBufferHandle_t ulBuffer ) = 0; - }; - - static const char *IVRIOBuffer_Version = "IVRIOBuffer_002"; -} - -// ivrspatialanchors.h - -namespace vr -{ - static const SpatialAnchorHandle_t k_ulInvalidSpatialAnchorHandle = 0; - - struct SpatialAnchorPose_t - { - HmdMatrix34_t mAnchorToAbsoluteTracking; - }; - - class IVRSpatialAnchors - { - public: - - /** 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. */ - virtual EVRSpatialAnchorError CreateSpatialAnchorFromDescriptor( const char *pchDescriptor, SpatialAnchorHandle_t *pHandleOut ) = 0; - - /** 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. */ - virtual EVRSpatialAnchorError CreateSpatialAnchorFromPose( TrackedDeviceIndex_t unDeviceIndex, ETrackingUniverseOrigin eOrigin, SpatialAnchorPose_t *pPose, SpatialAnchorHandle_t *pHandleOut ) = 0; - - /** 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. */ - virtual EVRSpatialAnchorError GetSpatialAnchorPose( SpatialAnchorHandle_t unHandle, ETrackingUniverseOrigin eOrigin, SpatialAnchorPose_t *pPoseOut ) = 0; - - /** 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. */ - virtual EVRSpatialAnchorError GetSpatialAnchorDescriptor( SpatialAnchorHandle_t unHandle, VR_OUT_STRING() char *pchDescriptorOut, uint32_t *punDescriptorBufferLenInOut ) = 0; - - }; - - static const char * const IVRSpatialAnchors_Version = "IVRSpatialAnchors_001"; - -} // namespace vr - -// ivrdebug.h - -namespace vr -{ - enum EVRDebugError - { - VRDebugError_Success = 0, - VRDebugError_BadParameter - }; - - /** Handle for vr profiler events */ - typedef uint64_t VrProfilerEventHandle_t; - - class IVRDebug - { - public: - - /** 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. */ - virtual EVRDebugError EmitVrProfilerEvent( const char *pchMessage ) = 0; - - /** 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. */ - virtual EVRDebugError BeginVrProfilerEvent( VrProfilerEventHandle_t *pHandleOut ) = 0; - - /** 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. */ - virtual EVRDebugError FinishVrProfilerEvent( VrProfilerEventHandle_t hHandle, const char *pchMessage ) = 0; - - /** 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. */ - virtual uint32_t DriverDebugRequest( vr::TrackedDeviceIndex_t unDeviceIndex, const char *pchRequest, VR_OUT_STRING() char *pchResponseBuffer, uint32_t unResponseBufferSize ) = 0; - - }; - - static const char * const IVRDebug_Version = "IVRDebug_001"; - -} // namespace vr -// End - -#endif // _OPENVR_API - - - -namespace vr -{ -#if !defined( OPENVR_INTERFACE_INTERNAL ) - - /** 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. - * - * pStartupInfo is reserved for future use. - */ - inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo = nullptr ); - - /** unloads vrclient.dll. Any interface pointers from the interface are - * invalid after this point */ - inline void VR_Shutdown(); - - /** 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. - */ - VR_INTERFACE bool VR_CALLTYPE VR_IsHmdPresent(); - - /** Returns true if the OpenVR runtime is installed. */ - VR_INTERFACE bool VR_CALLTYPE VR_IsRuntimeInstalled(); - - /** Returns where the OpenVR runtime is installed. */ - VR_INTERFACE bool VR_GetRuntimePath( VR_OUT_STRING() char *pchPathBuffer, uint32_t unBufferSize, uint32_t *punRequiredBufferSize ); - - /** Returns the name of the enum value for an EVRInitError. This function may be called outside of VR_Init()/VR_Shutdown(). */ - VR_INTERFACE const char *VR_CALLTYPE VR_GetVRInitErrorAsSymbol( EVRInitError error ); - - /** 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(). */ - VR_INTERFACE const char *VR_CALLTYPE VR_GetVRInitErrorAsEnglishDescription( EVRInitError error ); - - /** 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. - */ - VR_INTERFACE void *VR_CALLTYPE VR_GetGenericInterface( const char *pchInterfaceVersion, EVRInitError *peError ); - - /** Returns whether the interface of the specified version exists. - */ - VR_INTERFACE bool VR_CALLTYPE VR_IsInterfaceVersionValid( const char *pchInterfaceVersion ); - - /** Returns a token that represents whether the VR interface handles need to be reloaded */ - VR_INTERFACE uint32_t VR_CALLTYPE VR_GetInitToken(); - - // These typedefs allow old enum names from SDK 0.9.11 to be used in applications. - // They will go away in the future. - typedef EVRInitError HmdError; - typedef EVREye Hmd_Eye; - typedef EColorSpace ColorSpace; - typedef ETrackingResult HmdTrackingResult; - typedef ETrackedDeviceClass TrackedDeviceClass; - typedef ETrackingUniverseOrigin TrackingUniverseOrigin; - typedef ETrackedDeviceProperty TrackedDeviceProperty; - typedef ETrackedPropertyError TrackedPropertyError; - typedef EVRSubmitFlags VRSubmitFlags_t; - typedef EVRState VRState_t; - typedef ECollisionBoundsStyle CollisionBoundsStyle_t; - typedef EVROverlayError VROverlayError; - typedef EVRFirmwareError VRFirmwareError; - typedef EVRCompositorError VRCompositorError; - typedef EVRScreenshotError VRScreenshotsError; - - inline uint32_t &VRToken() - { - static uint32_t token; - return token; - } - - class COpenVRContext - { - public: - COpenVRContext() { Clear(); } - void Clear(); - - inline void CheckClear() - { - if ( VRToken() != VR_GetInitToken() ) - { - Clear(); - VRToken() = VR_GetInitToken(); - } - } - - IVRSystem *VRSystem() - { - CheckClear(); - if ( m_pVRSystem == nullptr ) - { - EVRInitError eError; - m_pVRSystem = ( IVRSystem * )VR_GetGenericInterface( IVRSystem_Version, &eError ); - } - return m_pVRSystem; - } - IVRChaperone *VRChaperone() - { - CheckClear(); - if ( m_pVRChaperone == nullptr ) - { - EVRInitError eError; - m_pVRChaperone = ( IVRChaperone * )VR_GetGenericInterface( IVRChaperone_Version, &eError ); - } - return m_pVRChaperone; - } - - IVRChaperoneSetup *VRChaperoneSetup() - { - CheckClear(); - if ( m_pVRChaperoneSetup == nullptr ) - { - EVRInitError eError; - m_pVRChaperoneSetup = ( IVRChaperoneSetup * )VR_GetGenericInterface( IVRChaperoneSetup_Version, &eError ); - } - return m_pVRChaperoneSetup; - } - - IVRCompositor *VRCompositor() - { - CheckClear(); - if ( m_pVRCompositor == nullptr ) - { - EVRInitError eError; - m_pVRCompositor = ( IVRCompositor * )VR_GetGenericInterface( IVRCompositor_Version, &eError ); - } - return m_pVRCompositor; - } - - IVROverlay *VROverlay() - { - CheckClear(); - if ( m_pVROverlay == nullptr ) - { - EVRInitError eError; - m_pVROverlay = ( IVROverlay * )VR_GetGenericInterface( IVROverlay_Version, &eError ); - } - return m_pVROverlay; - } - - IVROverlayView *VROverlayView() - { - CheckClear(); - if ( m_pVROverlayView == nullptr ) - { - EVRInitError eError; - m_pVROverlayView = ( IVROverlayView * ) VR_GetGenericInterface( IVROverlayView_Version, &eError ); - } - return m_pVROverlayView; - } - - IVRHeadsetView *VRHeadsetView() - { - CheckClear(); - if ( m_pVRHeadsetView == nullptr ) - { - EVRInitError eError; - m_pVRHeadsetView = ( IVRHeadsetView * ) VR_GetGenericInterface( IVRHeadsetView_Version, &eError ); - } - return m_pVRHeadsetView; - } - - IVRResources *VRResources() - { - CheckClear(); - if ( m_pVRResources == nullptr ) - { - EVRInitError eError; - m_pVRResources = (IVRResources *)VR_GetGenericInterface( IVRResources_Version, &eError ); - } - return m_pVRResources; - } - - IVRScreenshots *VRScreenshots() - { - CheckClear(); - if ( m_pVRScreenshots == nullptr ) - { - EVRInitError eError; - m_pVRScreenshots = ( IVRScreenshots * )VR_GetGenericInterface( IVRScreenshots_Version, &eError ); - } - return m_pVRScreenshots; - } - - IVRRenderModels *VRRenderModels() - { - CheckClear(); - if ( m_pVRRenderModels == nullptr ) - { - EVRInitError eError; - m_pVRRenderModels = ( IVRRenderModels * )VR_GetGenericInterface( IVRRenderModels_Version, &eError ); - } - return m_pVRRenderModels; - } - - IVRExtendedDisplay *VRExtendedDisplay() - { - CheckClear(); - if ( m_pVRExtendedDisplay == nullptr ) - { - EVRInitError eError; - m_pVRExtendedDisplay = ( IVRExtendedDisplay * )VR_GetGenericInterface( IVRExtendedDisplay_Version, &eError ); - } - return m_pVRExtendedDisplay; - } - - IVRSettings *VRSettings() - { - CheckClear(); - if ( m_pVRSettings == nullptr ) - { - EVRInitError eError; - m_pVRSettings = ( IVRSettings * )VR_GetGenericInterface( IVRSettings_Version, &eError ); - } - return m_pVRSettings; - } - - IVRApplications *VRApplications() - { - CheckClear(); - if ( m_pVRApplications == nullptr ) - { - EVRInitError eError; - m_pVRApplications = ( IVRApplications * )VR_GetGenericInterface( IVRApplications_Version, &eError ); - } - return m_pVRApplications; - } - - IVRTrackedCamera *VRTrackedCamera() - { - CheckClear(); - if ( m_pVRTrackedCamera == nullptr ) - { - EVRInitError eError; - m_pVRTrackedCamera = ( IVRTrackedCamera * )VR_GetGenericInterface( IVRTrackedCamera_Version, &eError ); - } - return m_pVRTrackedCamera; - } - - IVRDriverManager *VRDriverManager() - { - CheckClear(); - if ( !m_pVRDriverManager ) - { - EVRInitError eError; - m_pVRDriverManager = ( IVRDriverManager * )VR_GetGenericInterface( IVRDriverManager_Version, &eError ); - } - return m_pVRDriverManager; - } - - IVRInput *VRInput() - { - CheckClear(); - if ( !m_pVRInput ) - { - EVRInitError eError; - m_pVRInput = (IVRInput *)VR_GetGenericInterface( IVRInput_Version, &eError ); - } - return m_pVRInput; - } - - IVRIOBuffer *VRIOBuffer() - { - if ( !m_pVRIOBuffer ) - { - EVRInitError eError; - m_pVRIOBuffer = ( IVRIOBuffer * )VR_GetGenericInterface( IVRIOBuffer_Version, &eError ); - } - return m_pVRIOBuffer; - } - - IVRSpatialAnchors *VRSpatialAnchors() - { - CheckClear(); - if ( !m_pVRSpatialAnchors ) - { - EVRInitError eError; - m_pVRSpatialAnchors = (IVRSpatialAnchors *)VR_GetGenericInterface( IVRSpatialAnchors_Version, &eError ); - } - return m_pVRSpatialAnchors; - } - - IVRDebug *VRDebug() - { - CheckClear(); - if ( !m_pVRDebug ) - { - EVRInitError eError; - m_pVRDebug = (IVRDebug *)VR_GetGenericInterface( IVRDebug_Version, &eError ); - } - return m_pVRDebug; - } - - IVRNotifications *VRNotifications() - { - CheckClear(); - if ( !m_pVRNotifications ) - { - EVRInitError eError; - m_pVRNotifications = ( IVRNotifications * )VR_GetGenericInterface( IVRNotifications_Version, &eError ); - } - return m_pVRNotifications; - } - - private: - IVRSystem *m_pVRSystem; - IVRChaperone *m_pVRChaperone; - IVRChaperoneSetup *m_pVRChaperoneSetup; - IVRCompositor *m_pVRCompositor; - IVRHeadsetView *m_pVRHeadsetView; - IVROverlay *m_pVROverlay; - IVROverlayView *m_pVROverlayView; - IVRResources *m_pVRResources; - IVRRenderModels *m_pVRRenderModels; - IVRExtendedDisplay *m_pVRExtendedDisplay; - IVRSettings *m_pVRSettings; - IVRApplications *m_pVRApplications; - IVRTrackedCamera *m_pVRTrackedCamera; - IVRScreenshots *m_pVRScreenshots; - IVRDriverManager *m_pVRDriverManager; - IVRInput *m_pVRInput; - IVRIOBuffer *m_pVRIOBuffer; - IVRSpatialAnchors *m_pVRSpatialAnchors; - IVRDebug *m_pVRDebug; - IVRNotifications *m_pVRNotifications; - }; - - inline COpenVRContext &OpenVRInternal_ModuleContext() - { - static void *ctx[ sizeof( COpenVRContext ) / sizeof( void * ) ]; - return *( COpenVRContext * )ctx; // bypass zero-init constructor - } - - inline IVRSystem *VR_CALLTYPE VRSystem() { return OpenVRInternal_ModuleContext().VRSystem(); } - inline IVRChaperone *VR_CALLTYPE VRChaperone() { return OpenVRInternal_ModuleContext().VRChaperone(); } - inline IVRChaperoneSetup *VR_CALLTYPE VRChaperoneSetup() { return OpenVRInternal_ModuleContext().VRChaperoneSetup(); } - inline IVRCompositor *VR_CALLTYPE VRCompositor() { return OpenVRInternal_ModuleContext().VRCompositor(); } - inline IVROverlay *VR_CALLTYPE VROverlay() { return OpenVRInternal_ModuleContext().VROverlay(); } - inline IVROverlayView *VR_CALLTYPE VROverlayView() { return OpenVRInternal_ModuleContext().VROverlayView(); } - inline IVRHeadsetView *VR_CALLTYPE VRHeadsetView() { return OpenVRInternal_ModuleContext().VRHeadsetView(); } - inline IVRScreenshots *VR_CALLTYPE VRScreenshots() { return OpenVRInternal_ModuleContext().VRScreenshots(); } - inline IVRRenderModels *VR_CALLTYPE VRRenderModels() { return OpenVRInternal_ModuleContext().VRRenderModels(); } - inline IVRApplications *VR_CALLTYPE VRApplications() { return OpenVRInternal_ModuleContext().VRApplications(); } - inline IVRSettings *VR_CALLTYPE VRSettings() { return OpenVRInternal_ModuleContext().VRSettings(); } - inline IVRResources *VR_CALLTYPE VRResources() { return OpenVRInternal_ModuleContext().VRResources(); } - inline IVRExtendedDisplay *VR_CALLTYPE VRExtendedDisplay() { return OpenVRInternal_ModuleContext().VRExtendedDisplay(); } - inline IVRTrackedCamera *VR_CALLTYPE VRTrackedCamera() { return OpenVRInternal_ModuleContext().VRTrackedCamera(); } - inline IVRDriverManager *VR_CALLTYPE VRDriverManager() { return OpenVRInternal_ModuleContext().VRDriverManager(); } - inline IVRInput *VR_CALLTYPE VRInput() { return OpenVRInternal_ModuleContext().VRInput(); } - inline IVRIOBuffer *VR_CALLTYPE VRIOBuffer() { return OpenVRInternal_ModuleContext().VRIOBuffer(); } - inline IVRSpatialAnchors *VR_CALLTYPE VRSpatialAnchors() { return OpenVRInternal_ModuleContext().VRSpatialAnchors(); } - inline IVRNotifications *VR_CALLTYPE VRNotifications() { return OpenVRInternal_ModuleContext().VRNotifications(); } - inline IVRDebug *VR_CALLTYPE VRDebug() { return OpenVRInternal_ModuleContext().VRDebug(); } - - inline void COpenVRContext::Clear() - { - m_pVRSystem = nullptr; - m_pVRChaperone = nullptr; - m_pVRChaperoneSetup = nullptr; - m_pVRCompositor = nullptr; - m_pVROverlay = nullptr; - m_pVROverlayView = nullptr; - m_pVRHeadsetView = nullptr; - m_pVRRenderModels = nullptr; - m_pVRExtendedDisplay = nullptr; - m_pVRSettings = nullptr; - m_pVRApplications = nullptr; - m_pVRTrackedCamera = nullptr; - m_pVRResources = nullptr; - m_pVRScreenshots = nullptr; - m_pVRDriverManager = nullptr; - m_pVRInput = nullptr; - m_pVRIOBuffer = nullptr; - m_pVRSpatialAnchors = nullptr; - m_pVRNotifications = nullptr; - m_pVRDebug = nullptr; - } - - VR_INTERFACE uint32_t VR_CALLTYPE VR_InitInternal2( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo ); - VR_INTERFACE void VR_CALLTYPE VR_ShutdownInternal(); - - /** Finds the active installation of vrclient.dll and initializes it */ - inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType, const char *pStartupInfo ) - { - IVRSystem *pVRSystem = nullptr; - - EVRInitError eError; - VRToken() = VR_InitInternal2( &eError, eApplicationType, pStartupInfo ); - COpenVRContext &ctx = OpenVRInternal_ModuleContext(); - ctx.Clear(); - - if ( eError == VRInitError_None ) - { - if ( VR_IsInterfaceVersionValid( IVRSystem_Version ) ) - { - pVRSystem = VRSystem(); - } - else - { - VR_ShutdownInternal(); - eError = VRInitError_Init_InterfaceNotFound; - } - } - - if ( peError ) - *peError = eError; - return pVRSystem; - } - - /** unloads vrclient.dll. Any interface pointers from the interface are - * invalid after this point */ - inline void VR_Shutdown() - { - VR_ShutdownInternal(); - } - -#endif // OPENVR_INTERFACE_INTERNAL -} diff --git a/alvr/server/cpp/openvr/headers/openvr_driver.h b/alvr/server/cpp/openvr/headers/openvr_driver.h deleted file mode 100644 index 34b7053d25..0000000000 --- a/alvr/server/cpp/openvr/headers/openvr_driver.h +++ /dev/null @@ -1,4212 +0,0 @@ -#pragma once - -// openvr_driver.h -//========= Copyright Valve Corporation ============// -// Dynamically generated file. Do not modify this file directly. - -#ifndef _OPENVR_DRIVER_API -#define _OPENVR_DRIVER_API - -#include - - - -// version.h - -namespace vr -{ - static const uint32_t k_nSteamVRVersionMajor = 1; - static const uint32_t k_nSteamVRVersionMinor = 16; - static const uint32_t k_nSteamVRVersionBuild = 8; -} // namespace vr - -// public_vrtypes.h - -#ifndef _INCLUDE_CORE_VRTYPES_PUBLIC_H -#define _INCLUDE_CORE_VRTYPES_PUBLIC_H - -namespace vr -{ -#pragma pack( push, 8 ) - -// right-handed system -// +y is up -// +x is to the right -// -z is forward -// Distance unit is meters -struct HmdMatrix34_t -{ - float m[3][4]; -}; - -struct HmdMatrix33_t -{ - float m[3][3]; -}; - -struct HmdMatrix44_t -{ - float m[4][4]; -}; - -struct HmdVector3_t -{ - float v[3]; -}; - -struct HmdVector4_t -{ - float v[4]; -}; - -struct HmdVector3d_t -{ - double v[3]; -}; - -struct HmdVector2_t -{ - float v[2]; -}; - -struct HmdQuaternion_t -{ - double w, x, y, z; -}; - -struct HmdQuaternionf_t -{ - float w, x, y, z; -}; - -struct HmdColor_t -{ - float r, g, b, a; -}; - -struct HmdQuad_t -{ - HmdVector3_t vCorners[ 4 ]; -}; - -struct HmdRect2_t -{ - HmdVector2_t vTopLeft; - HmdVector2_t vBottomRight; -}; - -/** Holds the transform for a single bone */ -struct VRBoneTransform_t -{ - HmdVector4_t position; - HmdQuaternionf_t orientation; -}; - -#pragma pack( pop ) - -} // namespace vr - -#endif - -// vrtypes.h - -#ifndef _INCLUDE_VRTYPES_H -#define _INCLUDE_VRTYPES_H - -// Forward declarations to avoid requiring vulkan.h -struct VkDevice_T; -struct VkPhysicalDevice_T; -struct VkInstance_T; -struct VkQueue_T; - -// Forward declarations to avoid requiring d3d12.h -struct ID3D12Resource; -struct ID3D12CommandQueue; - -namespace vr -{ -#pragma pack( push, 8 ) - -/** A handle for a spatial anchor. This handle is only valid during the session it was created in. -* Anchors that live beyond one session should be saved by their string descriptors. */ -typedef uint32_t SpatialAnchorHandle_t; - -typedef void* glSharedTextureHandle_t; -typedef int32_t glInt_t; -typedef uint32_t glUInt_t; - - -/** 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. */ -struct DistortionCoordinates_t -{ - float rfRed[2]; - float rfGreen[2]; - float rfBlue[2]; -}; - -enum EVREye -{ - Eye_Left = 0, - Eye_Right = 1 -}; - -enum ETextureType -{ - TextureType_Invalid = -1, // Handle has been invalidated - TextureType_DirectX = 0, // Handle is an ID3D11Texture - TextureType_OpenGL = 1, // Handle is an OpenGL texture name or an OpenGL render buffer name, depending on submit flags - TextureType_Vulkan = 2, // Handle is a pointer to a VRVulkanTextureData_t structure - TextureType_IOSurface = 3, // Handle is a macOS cross-process-sharable IOSurfaceRef, deprecated in favor of TextureType_Metal on supported platforms - TextureType_DirectX12 = 4, // Handle is a pointer to a D3D12TextureData_t structure - TextureType_DXGISharedHandle = 5, // Handle is a HANDLE DXGI share handle, only supported for Overlay render targets. - // this texture is used directly by our renderer, so only perform atomic (copyresource or resolve) on it - TextureType_Metal = 6, // Handle is a MTLTexture conforming to the MTLSharedTexture protocol. Textures submitted to IVRCompositor::Submit which - // are of type MTLTextureType2DArray assume layer 0 is the left eye texture (vr::EVREye::Eye_left), layer 1 is the right - // eye texture (vr::EVREye::Eye_Right) -}; - -enum EColorSpace -{ - ColorSpace_Auto = 0, // Assumes 'gamma' for 8-bit per component formats, otherwise 'linear'. This mirrors the DXGI formats which have _SRGB variants. - ColorSpace_Gamma = 1, // Texture data can be displayed directly on the display without any conversion (a.k.a. display native format). - ColorSpace_Linear = 2, // Same as gamma but has been converted to a linear representation using DXGI's sRGB conversion algorithm. -}; - -struct Texture_t -{ - void* handle; // See ETextureType definition above - ETextureType eType; - EColorSpace eColorSpace; -}; - -// Handle to a shared texture (HANDLE on Windows obtained using OpenSharedResource). -typedef uint64_t SharedTextureHandle_t; -#define INVALID_SHARED_TEXTURE_HANDLE ((vr::SharedTextureHandle_t)0) - -enum ETrackingResult -{ - TrackingResult_Uninitialized = 1, - - TrackingResult_Calibrating_InProgress = 100, - TrackingResult_Calibrating_OutOfRange = 101, - - TrackingResult_Running_OK = 200, - TrackingResult_Running_OutOfRange = 201, - - TrackingResult_Fallback_RotationOnly = 300, -}; - -typedef uint32_t DriverId_t; -static const uint32_t k_nDriverNone = 0xFFFFFFFF; - -static const uint32_t k_unMaxDriverDebugResponseSize = 32768; - -/** Used to pass device IDs to API calls */ -typedef uint32_t TrackedDeviceIndex_t; -static const uint32_t k_unTrackedDeviceIndex_Hmd = 0; -static const uint32_t k_unMaxTrackedDeviceCount = 64; -static const uint32_t k_unTrackedDeviceIndexOther = 0xFFFFFFFE; -static const uint32_t k_unTrackedDeviceIndexInvalid = 0xFFFFFFFF; - -/** Describes what kind of object is being tracked at a given ID */ -enum ETrackedDeviceClass -{ - TrackedDeviceClass_Invalid = 0, // the ID was not valid. - TrackedDeviceClass_HMD = 1, // Head-Mounted Displays - TrackedDeviceClass_Controller = 2, // Tracked controllers - TrackedDeviceClass_GenericTracker = 3, // Generic trackers, similar to controllers - TrackedDeviceClass_TrackingReference = 4, // Camera and base stations that serve as tracking reference points - TrackedDeviceClass_DisplayRedirect = 5, // Accessories that aren't necessarily tracked themselves, but may redirect video output from other tracked devices - - TrackedDeviceClass_Max -}; - - -/** Describes what specific role associated with a tracked device */ -enum ETrackedControllerRole -{ - TrackedControllerRole_Invalid = 0, // Invalid value for controller type - TrackedControllerRole_LeftHand = 1, // Tracked device associated with the left hand - TrackedControllerRole_RightHand = 2, // Tracked device associated with the right hand - TrackedControllerRole_OptOut = 3, // Tracked device is opting out of left/right hand selection - TrackedControllerRole_Treadmill = 4, // Tracked device is a treadmill or other locomotion device - TrackedControllerRole_Stylus = 5, // Tracked device is a stylus - TrackedControllerRole_Max = 5 -}; - - -/** Returns true if the tracked controller role is allowed to be a hand */ -inline bool IsRoleAllowedAsHand( ETrackedControllerRole eRole ) -{ - switch ( eRole ) - { - case TrackedControllerRole_Invalid: - case TrackedControllerRole_LeftHand: - case TrackedControllerRole_RightHand: - return true; - default: - return false; - } -} - - -/** describes a single pose for a tracked object */ -struct TrackedDevicePose_t -{ - HmdMatrix34_t mDeviceToAbsoluteTracking; - HmdVector3_t vVelocity; // velocity in tracker space in m/s - HmdVector3_t vAngularVelocity; // angular velocity in radians/s (?) - ETrackingResult eTrackingResult; - bool bPoseIsValid; - - // This indicates that there is a device connected for this spot in the pose array. - // It could go from true to false if the user unplugs the device. - bool bDeviceIsConnected; -}; - -/** Identifies which style of tracking origin the application wants to use -* for the poses it is requesting */ -enum ETrackingUniverseOrigin -{ - TrackingUniverseSeated = 0, // Poses are provided relative to the seated zero pose - TrackingUniverseStanding = 1, // Poses are provided relative to the safe bounds configured by the user - TrackingUniverseRawAndUncalibrated = 2, // Poses are provided in the coordinate system defined by the driver. It has Y up and is unified for devices of the same driver. You usually don't want this one. -}; - -enum EAdditionalRadioFeatures -{ - AdditionalRadioFeatures_None = 0x00000000, - AdditionalRadioFeatures_HTCLinkBox = 0x00000001, - AdditionalRadioFeatures_InternalDongle = 0x00000002, - AdditionalRadioFeatures_ExternalDongle = 0x00000004, -}; - -typedef uint64_t WebConsoleHandle_t; -#define INVALID_WEB_CONSOLE_HANDLE ((vr::WebConsoleHandle_t)0) - -// Refers to a single container of properties -typedef uint64_t PropertyContainerHandle_t; -typedef uint32_t PropertyTypeTag_t; - -static const PropertyContainerHandle_t k_ulInvalidPropertyContainer = 0; -static const PropertyTypeTag_t k_unInvalidPropertyTag = 0; - -typedef PropertyContainerHandle_t DriverHandle_t; -static const PropertyContainerHandle_t k_ulInvalidDriverHandle = 0; - -// Use these tags to set/get common types as struct properties -static const PropertyTypeTag_t k_unFloatPropertyTag = 1; -static const PropertyTypeTag_t k_unInt32PropertyTag = 2; -static const PropertyTypeTag_t k_unUint64PropertyTag = 3; -static const PropertyTypeTag_t k_unBoolPropertyTag = 4; -static const PropertyTypeTag_t k_unStringPropertyTag = 5; -static const PropertyTypeTag_t k_unErrorPropertyTag = 6; -static const PropertyTypeTag_t k_unDoublePropertyTag = 7; - -static const PropertyTypeTag_t k_unHmdMatrix34PropertyTag = 20; -static const PropertyTypeTag_t k_unHmdMatrix44PropertyTag = 21; -static const PropertyTypeTag_t k_unHmdVector3PropertyTag = 22; -static const PropertyTypeTag_t k_unHmdVector4PropertyTag = 23; -static const PropertyTypeTag_t k_unHmdVector2PropertyTag = 24; -static const PropertyTypeTag_t k_unHmdQuadPropertyTag = 25; - -static const PropertyTypeTag_t k_unHiddenAreaPropertyTag = 30; -static const PropertyTypeTag_t k_unPathHandleInfoTag = 31; -static const PropertyTypeTag_t k_unActionPropertyTag = 32; -static const PropertyTypeTag_t k_unInputValuePropertyTag = 33; -static const PropertyTypeTag_t k_unWildcardPropertyTag = 34; -static const PropertyTypeTag_t k_unHapticVibrationPropertyTag = 35; -static const PropertyTypeTag_t k_unSkeletonPropertyTag = 36; - -static const PropertyTypeTag_t k_unSpatialAnchorPosePropertyTag = 40; -static const PropertyTypeTag_t k_unJsonPropertyTag = 41; -static const PropertyTypeTag_t k_unActiveActionSetPropertyTag = 42; - -static const PropertyTypeTag_t k_unOpenVRInternalReserved_Start = 1000; -static const PropertyTypeTag_t k_unOpenVRInternalReserved_End = 10000; - - -/** Each entry in this enum represents a property that can be retrieved about a -* tracked device. Many fields are only valid for one ETrackedDeviceClass. */ -enum ETrackedDeviceProperty -{ - Prop_Invalid = 0, - - // general properties that apply to all device classes - Prop_TrackingSystemName_String = 1000, - Prop_ModelNumber_String = 1001, - Prop_SerialNumber_String = 1002, - Prop_RenderModelName_String = 1003, - Prop_WillDriftInYaw_Bool = 1004, - Prop_ManufacturerName_String = 1005, - Prop_TrackingFirmwareVersion_String = 1006, - Prop_HardwareRevision_String = 1007, - Prop_AllWirelessDongleDescriptions_String = 1008, - Prop_ConnectedWirelessDongle_String = 1009, - Prop_DeviceIsWireless_Bool = 1010, - Prop_DeviceIsCharging_Bool = 1011, - Prop_DeviceBatteryPercentage_Float = 1012, // 0 is empty, 1 is full - Prop_StatusDisplayTransform_Matrix34 = 1013, - Prop_Firmware_UpdateAvailable_Bool = 1014, - Prop_Firmware_ManualUpdate_Bool = 1015, - Prop_Firmware_ManualUpdateURL_String = 1016, - Prop_HardwareRevision_Uint64 = 1017, - Prop_FirmwareVersion_Uint64 = 1018, - Prop_FPGAVersion_Uint64 = 1019, - Prop_VRCVersion_Uint64 = 1020, - Prop_RadioVersion_Uint64 = 1021, - Prop_DongleVersion_Uint64 = 1022, - Prop_BlockServerShutdown_Bool = 1023, - Prop_CanUnifyCoordinateSystemWithHmd_Bool = 1024, - Prop_ContainsProximitySensor_Bool = 1025, - Prop_DeviceProvidesBatteryStatus_Bool = 1026, - Prop_DeviceCanPowerOff_Bool = 1027, - Prop_Firmware_ProgrammingTarget_String = 1028, - Prop_DeviceClass_Int32 = 1029, - Prop_HasCamera_Bool = 1030, - Prop_DriverVersion_String = 1031, - Prop_Firmware_ForceUpdateRequired_Bool = 1032, - Prop_ViveSystemButtonFixRequired_Bool = 1033, - Prop_ParentDriver_Uint64 = 1034, - Prop_ResourceRoot_String = 1035, - Prop_RegisteredDeviceType_String = 1036, - Prop_InputProfilePath_String = 1037, // input profile to use for this device in the input system. Will default to tracking system name if this isn't provided - Prop_NeverTracked_Bool = 1038, // Used for devices that will never have a valid pose by design - Prop_NumCameras_Int32 = 1039, - Prop_CameraFrameLayout_Int32 = 1040, // EVRTrackedCameraFrameLayout value - Prop_CameraStreamFormat_Int32 = 1041, // ECameraVideoStreamFormat value - Prop_AdditionalDeviceSettingsPath_String = 1042, // driver-relative path to additional device and global configuration settings - Prop_Identifiable_Bool = 1043, // Whether device supports being identified from vrmonitor (e.g. blink LED, vibrate haptics, etc) - Prop_BootloaderVersion_Uint64 = 1044, - Prop_AdditionalSystemReportData_String = 1045, // additional string to include in system reports about a tracked device - Prop_CompositeFirmwareVersion_String = 1046, // additional FW components from a device that gets propagated into reports - Prop_Firmware_RemindUpdate_Bool = 1047, - Prop_PeripheralApplicationVersion_Uint64 = 1048, - Prop_ManufacturerSerialNumber_String = 1049, - Prop_ComputedSerialNumber_String = 1050, - Prop_EstimatedDeviceFirstUseTime_Int32 = 1051, - - // Properties that are unique to TrackedDeviceClass_HMD - Prop_ReportsTimeSinceVSync_Bool = 2000, - Prop_SecondsFromVsyncToPhotons_Float = 2001, - Prop_DisplayFrequency_Float = 2002, - Prop_UserIpdMeters_Float = 2003, - Prop_CurrentUniverseId_Uint64 = 2004, - Prop_PreviousUniverseId_Uint64 = 2005, - Prop_DisplayFirmwareVersion_Uint64 = 2006, - Prop_IsOnDesktop_Bool = 2007, - Prop_DisplayMCType_Int32 = 2008, - Prop_DisplayMCOffset_Float = 2009, - Prop_DisplayMCScale_Float = 2010, - Prop_EdidVendorID_Int32 = 2011, - Prop_DisplayMCImageLeft_String = 2012, - Prop_DisplayMCImageRight_String = 2013, - Prop_DisplayGCBlackClamp_Float = 2014, - Prop_EdidProductID_Int32 = 2015, - Prop_CameraToHeadTransform_Matrix34 = 2016, - Prop_DisplayGCType_Int32 = 2017, - Prop_DisplayGCOffset_Float = 2018, - Prop_DisplayGCScale_Float = 2019, - Prop_DisplayGCPrescale_Float = 2020, - Prop_DisplayGCImage_String = 2021, - Prop_LensCenterLeftU_Float = 2022, - Prop_LensCenterLeftV_Float = 2023, - Prop_LensCenterRightU_Float = 2024, - Prop_LensCenterRightV_Float = 2025, - Prop_UserHeadToEyeDepthMeters_Float = 2026, - Prop_CameraFirmwareVersion_Uint64 = 2027, - Prop_CameraFirmwareDescription_String = 2028, - Prop_DisplayFPGAVersion_Uint64 = 2029, - Prop_DisplayBootloaderVersion_Uint64 = 2030, - Prop_DisplayHardwareVersion_Uint64 = 2031, - Prop_AudioFirmwareVersion_Uint64 = 2032, - Prop_CameraCompatibilityMode_Int32 = 2033, - Prop_ScreenshotHorizontalFieldOfViewDegrees_Float = 2034, - Prop_ScreenshotVerticalFieldOfViewDegrees_Float = 2035, - Prop_DisplaySuppressed_Bool = 2036, - Prop_DisplayAllowNightMode_Bool = 2037, - Prop_DisplayMCImageWidth_Int32 = 2038, - Prop_DisplayMCImageHeight_Int32 = 2039, - Prop_DisplayMCImageNumChannels_Int32 = 2040, - Prop_DisplayMCImageData_Binary = 2041, - Prop_SecondsFromPhotonsToVblank_Float = 2042, - Prop_DriverDirectModeSendsVsyncEvents_Bool = 2043, - Prop_DisplayDebugMode_Bool = 2044, - Prop_GraphicsAdapterLuid_Uint64 = 2045, - Prop_DriverProvidedChaperonePath_String = 2048, - Prop_ExpectedTrackingReferenceCount_Int32 = 2049, // expected number of sensors or basestations to reserve UI space for - Prop_ExpectedControllerCount_Int32 = 2050, // expected number of tracked controllers to reserve UI space for - Prop_NamedIconPathControllerLeftDeviceOff_String = 2051, // placeholder icon for "left" controller if not yet detected/loaded - Prop_NamedIconPathControllerRightDeviceOff_String = 2052, // placeholder icon for "right" controller if not yet detected/loaded - Prop_NamedIconPathTrackingReferenceDeviceOff_String = 2053, // placeholder icon for sensor/base if not yet detected/loaded - Prop_DoNotApplyPrediction_Bool = 2054, // currently no effect. was used to disable HMD pose prediction on MR, which is now done by MR driver setting velocity=0 - Prop_CameraToHeadTransforms_Matrix34_Array = 2055, - Prop_DistortionMeshResolution_Int32 = 2056, // custom resolution of compositor calls to IVRSystem::ComputeDistortion - Prop_DriverIsDrawingControllers_Bool = 2057, - Prop_DriverRequestsApplicationPause_Bool = 2058, - Prop_DriverRequestsReducedRendering_Bool = 2059, - Prop_MinimumIpdStepMeters_Float = 2060, - Prop_AudioBridgeFirmwareVersion_Uint64 = 2061, - Prop_ImageBridgeFirmwareVersion_Uint64 = 2062, - Prop_ImuToHeadTransform_Matrix34 = 2063, - Prop_ImuFactoryGyroBias_Vector3 = 2064, - Prop_ImuFactoryGyroScale_Vector3 = 2065, - Prop_ImuFactoryAccelerometerBias_Vector3 = 2066, - Prop_ImuFactoryAccelerometerScale_Vector3 = 2067, - // reserved 2068 - Prop_ConfigurationIncludesLighthouse20Features_Bool = 2069, - Prop_AdditionalRadioFeatures_Uint64 = 2070, - Prop_CameraWhiteBalance_Vector4_Array = 2071, // Prop_NumCameras_Int32-sized array of float[4] RGBG white balance calibration data (max size is vr::k_unMaxCameras) - Prop_CameraDistortionFunction_Int32_Array = 2072, // Prop_NumCameras_Int32-sized array of vr::EVRDistortionFunctionType values (max size is vr::k_unMaxCameras) - Prop_CameraDistortionCoefficients_Float_Array = 2073, // Prop_NumCameras_Int32-sized array of double[vr::k_unMaxDistortionFunctionParameters] (max size is vr::k_unMaxCameras) - Prop_ExpectedControllerType_String = 2074, - Prop_HmdTrackingStyle_Int32 = 2075, // one of EHmdTrackingStyle - Prop_DriverProvidedChaperoneVisibility_Bool = 2076, - Prop_HmdColumnCorrectionSettingPrefix_String = 2077, - Prop_CameraSupportsCompatibilityModes_Bool = 2078, - Prop_SupportsRoomViewDepthProjection_Bool = 2079, - Prop_DisplayAvailableFrameRates_Float_Array = 2080, // populated by compositor from actual EDID list when available from GPU driver - Prop_DisplaySupportsMultipleFramerates_Bool = 2081, // if this is true but Prop_DisplayAvailableFrameRates_Float_Array is empty, explain to user - Prop_DisplayColorMultLeft_Vector3 = 2082, - Prop_DisplayColorMultRight_Vector3 = 2083, - Prop_DisplaySupportsRuntimeFramerateChange_Bool = 2084, - Prop_DisplaySupportsAnalogGain_Bool = 2085, - Prop_DisplayMinAnalogGain_Float = 2086, - Prop_DisplayMaxAnalogGain_Float = 2087, - Prop_CameraExposureTime_Float = 2088, - Prop_CameraGlobalGain_Float = 2089, - // Prop_DashboardLayoutPathName_String = 2090, // DELETED - Prop_DashboardScale_Float = 2091, - Prop_IpdUIRangeMinMeters_Float = 2100, - Prop_IpdUIRangeMaxMeters_Float = 2101, - Prop_Hmd_SupportsHDCP14LegacyCompat_Bool = 2102, - Prop_Hmd_SupportsMicMonitoring_Bool = 2103, - - // Driver requested mura correction properties - Prop_DriverRequestedMuraCorrectionMode_Int32 = 2200, - Prop_DriverRequestedMuraFeather_InnerLeft_Int32 = 2201, - Prop_DriverRequestedMuraFeather_InnerRight_Int32 = 2202, - Prop_DriverRequestedMuraFeather_InnerTop_Int32 = 2203, - Prop_DriverRequestedMuraFeather_InnerBottom_Int32 = 2204, - Prop_DriverRequestedMuraFeather_OuterLeft_Int32 = 2205, - Prop_DriverRequestedMuraFeather_OuterRight_Int32 = 2206, - Prop_DriverRequestedMuraFeather_OuterTop_Int32 = 2207, - Prop_DriverRequestedMuraFeather_OuterBottom_Int32 = 2208, - - Prop_Audio_DefaultPlaybackDeviceId_String = 2300, - Prop_Audio_DefaultRecordingDeviceId_String = 2301, - Prop_Audio_DefaultPlaybackDeviceVolume_Float = 2302, - Prop_Audio_SupportsDualSpeakerAndJackOutput_Bool = 2303, - - // Properties that are unique to TrackedDeviceClass_Controller - Prop_AttachedDeviceId_String = 3000, - Prop_SupportedButtons_Uint64 = 3001, - Prop_Axis0Type_Int32 = 3002, // Return value is of type EVRControllerAxisType - Prop_Axis1Type_Int32 = 3003, // Return value is of type EVRControllerAxisType - Prop_Axis2Type_Int32 = 3004, // Return value is of type EVRControllerAxisType - Prop_Axis3Type_Int32 = 3005, // Return value is of type EVRControllerAxisType - Prop_Axis4Type_Int32 = 3006, // Return value is of type EVRControllerAxisType - Prop_ControllerRoleHint_Int32 = 3007, // Return value is of type ETrackedControllerRole - - // Properties that are unique to TrackedDeviceClass_TrackingReference - Prop_FieldOfViewLeftDegrees_Float = 4000, - Prop_FieldOfViewRightDegrees_Float = 4001, - Prop_FieldOfViewTopDegrees_Float = 4002, - Prop_FieldOfViewBottomDegrees_Float = 4003, - Prop_TrackingRangeMinimumMeters_Float = 4004, - Prop_TrackingRangeMaximumMeters_Float = 4005, - Prop_ModeLabel_String = 4006, - Prop_CanWirelessIdentify_Bool = 4007, // volatile, based on radio presence and fw discovery - Prop_Nonce_Int32 = 4008, - - // Properties that are used for user interface like icons names - Prop_IconPathName_String = 5000, // DEPRECATED. Value not referenced. Now expected to be part of icon path properties. - Prop_NamedIconPathDeviceOff_String = 5001, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceSearching_String = 5002, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceSearchingAlert_String = 5003, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceReady_String = 5004, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceReadyAlert_String = 5005, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceNotReady_String = 5006, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceStandby_String = 5007, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceAlertLow_String = 5008, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - Prop_NamedIconPathDeviceStandbyAlert_String = 5009, // {driver}/icons/icon_filename - PNG for static icon, or GIF for animation, 50x32 for headsets and 32x32 for others - - // Properties that are used by helpers, but are opaque to applications - Prop_DisplayHiddenArea_Binary_Start = 5100, - Prop_DisplayHiddenArea_Binary_End = 5150, - Prop_ParentContainer = 5151, - Prop_OverrideContainer_Uint64 = 5152, - - // Properties that are unique to drivers - Prop_UserConfigPath_String = 6000, - Prop_InstallPath_String = 6001, - Prop_HasDisplayComponent_Bool = 6002, - Prop_HasControllerComponent_Bool = 6003, - Prop_HasCameraComponent_Bool = 6004, - Prop_HasDriverDirectModeComponent_Bool = 6005, - Prop_HasVirtualDisplayComponent_Bool = 6006, - Prop_HasSpatialAnchorsSupport_Bool = 6007, - - // Properties that are set internally based on other information provided by drivers - Prop_ControllerType_String = 7000, - //Prop_LegacyInputProfile_String = 7001, // This is no longer used. See "legacy_binding" in the input profile instead. - Prop_ControllerHandSelectionPriority_Int32 = 7002, // Allows hand assignments to prefer some controllers over others. High numbers are selected over low numbers - - // Vendors are free to expose private debug data in this reserved region - Prop_VendorSpecific_Reserved_Start = 10000, - Prop_VendorSpecific_Reserved_End = 10999, - - Prop_TrackedDeviceProperty_Max = 1000000, -}; - -/** No string property will ever be longer than this length */ -static const uint32_t k_unMaxPropertyStringSize = 32 * 1024; - -/** Used to return errors that occur when reading properties. */ -enum ETrackedPropertyError -{ - TrackedProp_Success = 0, - TrackedProp_WrongDataType = 1, - TrackedProp_WrongDeviceClass = 2, - TrackedProp_BufferTooSmall = 3, - TrackedProp_UnknownProperty = 4, // Driver has not set the property (and may not ever). - TrackedProp_InvalidDevice = 5, - TrackedProp_CouldNotContactServer = 6, - TrackedProp_ValueNotProvidedByDevice = 7, - TrackedProp_StringExceedsMaximumLength = 8, - TrackedProp_NotYetAvailable = 9, // The property value isn't known yet, but is expected soon. Call again later. - TrackedProp_PermissionDenied = 10, - TrackedProp_InvalidOperation = 11, - TrackedProp_CannotWriteToWildcards = 12, - TrackedProp_IPCReadFailure = 13, - TrackedProp_OutOfMemory = 14, - TrackedProp_InvalidContainer = 15, -}; - -/** Used to drive certain text in the UI when talking about the tracking system for the HMD */ -enum EHmdTrackingStyle -{ - HmdTrackingStyle_Unknown = 0, - - HmdTrackingStyle_Lighthouse = 1, // base stations and lasers - HmdTrackingStyle_OutsideInCameras = 2, // Cameras and LED, Rift 1 style - HmdTrackingStyle_InsideOutCameras = 3, // Cameras on HMD looking at the world -}; - -typedef uint64_t VRActionHandle_t; -typedef uint64_t VRActionSetHandle_t; -typedef uint64_t VRInputValueHandle_t; - -static const VRActionHandle_t k_ulInvalidActionHandle = 0; -static const VRActionSetHandle_t k_ulInvalidActionSetHandle = 0; -static const VRInputValueHandle_t k_ulInvalidInputValueHandle = 0; - - -/** Allows the application to control what part of the provided texture will be used in the -* frame buffer. */ -struct VRTextureBounds_t -{ - float uMin, vMin; - float uMax, vMax; -}; - -/** Allows specifying pose used to render provided scene texture (if different from value returned by WaitGetPoses). */ -struct VRTextureWithPose_t : public Texture_t -{ - HmdMatrix34_t mDeviceToAbsoluteTracking; // Actual pose used to render scene textures. -}; - -struct VRTextureDepthInfo_t -{ - void* handle; // See ETextureType definition above - HmdMatrix44_t mProjection; - HmdVector2_t vRange; // 0..1 -}; - -struct VRTextureWithDepth_t : public Texture_t -{ - VRTextureDepthInfo_t depth; -}; - -struct VRTextureWithPoseAndDepth_t : public VRTextureWithPose_t -{ - VRTextureDepthInfo_t depth; -}; - -/** Allows the application to control how scene textures are used by the compositor when calling Submit. */ -enum EVRSubmitFlags -{ - // Simple render path. App submits rendered left and right eye images with no lens distortion correction applied. - Submit_Default = 0x00, - - // App submits final left and right eye images with lens distortion already applied (lens distortion makes the images appear - // barrel distorted with chromatic aberration correction applied). The app would have used the data returned by - // vr::IVRSystem::ComputeDistortion() to apply the correct distortion to the rendered images before calling Submit(). - Submit_LensDistortionAlreadyApplied = 0x01, - - // If the texture pointer passed in is actually a renderbuffer (e.g. for MSAA in OpenGL) then set this flag. - Submit_GlRenderBuffer = 0x02, - - // Do not use - Submit_Reserved = 0x04, - - // Set to indicate that pTexture is a pointer to a VRTextureWithPose_t. - // This flag can be combined with Submit_TextureWithDepth to pass a VRTextureWithPoseAndDepth_t. - Submit_TextureWithPose = 0x08, - - // Set to indicate that pTexture is a pointer to a VRTextureWithDepth_t. - // This flag can be combined with Submit_TextureWithPose to pass a VRTextureWithPoseAndDepth_t. - Submit_TextureWithDepth = 0x10, - - // Set to indicate a discontinuity between this and the last frame. - // This will prevent motion smoothing from attempting to extrapolate using the pair. - Submit_FrameDiscontinuty = 0x20, - - // Set to indicate that pTexture->handle is a contains VRVulkanTextureArrayData_t - Submit_VulkanTextureWithArrayData = 0x40, - - // If the texture pointer passed in is an OpenGL Array texture, set this flag - Submit_GlArrayTexture = 0x80, - - // Do not use - Submit_Reserved2 = 0x8000, - - -}; - -/** 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 */ -struct VRVulkanTextureData_t -{ - uint64_t m_nImage; // VkImage - VkDevice_T *m_pDevice; - VkPhysicalDevice_T *m_pPhysicalDevice; - VkInstance_T *m_pInstance; - VkQueue_T *m_pQueue; - uint32_t m_nQueueFamilyIndex; - uint32_t m_nWidth, m_nHeight, m_nFormat, m_nSampleCount; -}; - -/** 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 */ -struct VRVulkanTextureArrayData_t : public VRVulkanTextureData_t -{ - uint32_t m_unArrayIndex; - uint32_t m_unArraySize; -}; - -/** Data required for passing D3D12 textures to IVRCompositor::Submit. -* Be sure to call OpenVR_Shutdown before destroying these resources. */ -struct D3D12TextureData_t -{ - ID3D12Resource *m_pResource; - ID3D12CommandQueue *m_pCommandQueue; - uint32_t m_nNodeMask; -}; - -/** Status of the overall system or tracked objects */ -enum EVRState -{ - VRState_Undefined = -1, - VRState_Off = 0, - VRState_Searching = 1, - VRState_Searching_Alert = 2, - VRState_Ready = 3, - VRState_Ready_Alert = 4, - VRState_NotReady = 5, - VRState_Standby = 6, - VRState_Ready_Alert_Low = 7, -}; - -/** The types of events that could be posted (and what the parameters mean for each event type) */ -enum EVREventType -{ - VREvent_None = 0, - - VREvent_TrackedDeviceActivated = 100, - VREvent_TrackedDeviceDeactivated = 101, - VREvent_TrackedDeviceUpdated = 102, - VREvent_TrackedDeviceUserInteractionStarted = 103, - VREvent_TrackedDeviceUserInteractionEnded = 104, - VREvent_IpdChanged = 105, - VREvent_EnterStandbyMode = 106, - VREvent_LeaveStandbyMode = 107, - VREvent_TrackedDeviceRoleChanged = 108, - VREvent_WatchdogWakeUpRequested = 109, - VREvent_LensDistortionChanged = 110, - VREvent_PropertyChanged = 111, - VREvent_WirelessDisconnect = 112, - VREvent_WirelessReconnect = 113, - - VREvent_ButtonPress = 200, // data is controller - VREvent_ButtonUnpress = 201, // data is controller - VREvent_ButtonTouch = 202, // data is controller - VREvent_ButtonUntouch = 203, // data is controller - - // VREvent_DualAnalog_Press = 250, // No longer sent - // VREvent_DualAnalog_Unpress = 251, // No longer sent - // VREvent_DualAnalog_Touch = 252, // No longer sent - // VREvent_DualAnalog_Untouch = 253, // No longer sent - // VREvent_DualAnalog_Move = 254, // No longer sent - // VREvent_DualAnalog_ModeSwitch1 = 255, // No longer sent - // VREvent_DualAnalog_ModeSwitch2 = 256, // No longer sent - VREvent_Modal_Cancel = 257, // Sent to overlays with the - - VREvent_MouseMove = 300, // data is mouse - VREvent_MouseButtonDown = 301, // data is mouse - VREvent_MouseButtonUp = 302, // data is mouse - VREvent_FocusEnter = 303, // data is overlay - VREvent_FocusLeave = 304, // data is overlay - VREvent_ScrollDiscrete = 305, // data is scroll - VREvent_TouchPadMove = 306, // data is mouse - VREvent_OverlayFocusChanged = 307, // data is overlay, global event - VREvent_ReloadOverlays = 308, - VREvent_ScrollSmooth = 309, // data is scroll - VREvent_LockMousePosition = 310, - VREvent_UnlockMousePosition = 311, - - VREvent_InputFocusCaptured = 400, // data is process DEPRECATED - VREvent_InputFocusReleased = 401, // data is process DEPRECATED - // VREvent_SceneFocusLost = 402, // data is process - // VREvent_SceneFocusGained = 403, // data is process - VREvent_SceneApplicationChanged = 404, // data is process - The App actually drawing the scene changed (usually to or from the compositor) - VREvent_SceneFocusChanged = 405, // data is process - New app got access to draw the scene - VREvent_InputFocusChanged = 406, // data is process - // VREvent_SceneApplicationSecondaryRenderingStarted = 407, - VREvent_SceneApplicationUsingWrongGraphicsAdapter = 408, // data is process - VREvent_ActionBindingReloaded = 409, // data is process - The App that action binds reloaded for - - VREvent_HideRenderModels = 410, // Sent to the scene application to request hiding render models temporarily - VREvent_ShowRenderModels = 411, // Sent to the scene application to request restoring render model visibility - - VREvent_SceneApplicationStateChanged = 412, // No data; but query VRApplications()->GetSceneApplicationState(); - - VREvent_ConsoleOpened = 420, - VREvent_ConsoleClosed = 421, - - VREvent_OverlayShown = 500, - VREvent_OverlayHidden = 501, - VREvent_DashboardActivated = 502, - VREvent_DashboardDeactivated = 503, - //VREvent_DashboardThumbSelected = 504, // Sent to the overlay manager - data is overlay - No longer sent - VREvent_DashboardRequested = 505, // Sent to the overlay manager - data is overlay - VREvent_ResetDashboard = 506, // Send to the overlay manager - //VREvent_RenderToast = 507, // Send to the dashboard to render a toast - data is the notification ID -- no longer sent - VREvent_ImageLoaded = 508, // Sent to overlays when a SetOverlayRaw or SetOverlayFromFile call finishes loading - VREvent_ShowKeyboard = 509, // Sent to keyboard renderer in the dashboard to invoke it - VREvent_HideKeyboard = 510, // Sent to keyboard renderer in the dashboard to hide it - VREvent_OverlayGamepadFocusGained = 511, // Sent to an overlay when IVROverlay::SetFocusOverlay is called on it - VREvent_OverlayGamepadFocusLost = 512, // Send to an overlay when it previously had focus and IVROverlay::SetFocusOverlay is called on something else - VREvent_OverlaySharedTextureChanged = 513, - //VREvent_DashboardGuideButtonDown = 514, // These are no longer sent - //VREvent_DashboardGuideButtonUp = 515, - VREvent_ScreenshotTriggered = 516, // Screenshot button combo was pressed, Dashboard should request a screenshot - VREvent_ImageFailed = 517, // Sent to overlays when a SetOverlayRaw or SetOverlayfromFail fails to load - VREvent_DashboardOverlayCreated = 518, - VREvent_SwitchGamepadFocus = 519, - - // Screenshot API - VREvent_RequestScreenshot = 520, // Sent by vrclient application to compositor to take a screenshot - VREvent_ScreenshotTaken = 521, // Sent by compositor to the application that the screenshot has been taken - VREvent_ScreenshotFailed = 522, // Sent by compositor to the application that the screenshot failed to be taken - VREvent_SubmitScreenshotToDashboard = 523, // Sent by compositor to the dashboard that a completed screenshot was submitted - VREvent_ScreenshotProgressToDashboard = 524, // Sent by compositor to the dashboard that a completed screenshot was submitted - - VREvent_PrimaryDashboardDeviceChanged = 525, - VREvent_RoomViewShown = 526, // Sent by compositor whenever room-view is enabled - VREvent_RoomViewHidden = 527, // Sent by compositor whenever room-view is disabled - VREvent_ShowUI = 528, // data is showUi - VREvent_ShowDevTools = 529, // data is showDevTools - VREvent_DesktopViewUpdating = 530, - VREvent_DesktopViewReady = 531, - - VREvent_Notification_Shown = 600, - VREvent_Notification_Hidden = 601, - VREvent_Notification_BeginInteraction = 602, - VREvent_Notification_Destroyed = 603, - - VREvent_Quit = 700, // data is process - VREvent_ProcessQuit = 701, // data is process - //VREvent_QuitAborted_UserPrompt = 702, // data is process - VREvent_QuitAcknowledged = 703, // data is process - VREvent_DriverRequestedQuit = 704, // The driver has requested that SteamVR shut down - VREvent_RestartRequested = 705, // A driver or other component wants the user to restart SteamVR - - VREvent_ChaperoneDataHasChanged = 800, // this will never happen with the new chaperone system - VREvent_ChaperoneUniverseHasChanged = 801, - VREvent_ChaperoneTempDataHasChanged = 802, // this will never happen with the new chaperone system - VREvent_ChaperoneSettingsHaveChanged = 803, - VREvent_SeatedZeroPoseReset = 804, - VREvent_ChaperoneFlushCache = 805, // Sent when the process needs to reload any cached data it retrieved from VRChaperone() - VREvent_ChaperoneRoomSetupStarting = 806, // Triggered by CVRChaperoneClient::RoomSetupStarting - VREvent_ChaperoneRoomSetupFinished = 807, // Triggered by CVRChaperoneClient::CommitWorkingCopy - VREvent_StandingZeroPoseReset = 808, - - VREvent_AudioSettingsHaveChanged = 820, - - VREvent_BackgroundSettingHasChanged = 850, - VREvent_CameraSettingsHaveChanged = 851, - VREvent_ReprojectionSettingHasChanged = 852, - VREvent_ModelSkinSettingsHaveChanged = 853, - VREvent_EnvironmentSettingsHaveChanged = 854, - VREvent_PowerSettingsHaveChanged = 855, - VREvent_EnableHomeAppSettingsHaveChanged = 856, - VREvent_SteamVRSectionSettingChanged = 857, - VREvent_LighthouseSectionSettingChanged = 858, - VREvent_NullSectionSettingChanged = 859, - VREvent_UserInterfaceSectionSettingChanged = 860, - VREvent_NotificationsSectionSettingChanged = 861, - VREvent_KeyboardSectionSettingChanged = 862, - VREvent_PerfSectionSettingChanged = 863, - VREvent_DashboardSectionSettingChanged = 864, - VREvent_WebInterfaceSectionSettingChanged = 865, - VREvent_TrackersSectionSettingChanged = 866, - VREvent_LastKnownSectionSettingChanged = 867, - VREvent_DismissedWarningsSectionSettingChanged = 868, - VREvent_GpuSpeedSectionSettingChanged = 869, - VREvent_WindowsMRSectionSettingChanged = 870, - VREvent_OtherSectionSettingChanged = 871, - - VREvent_StatusUpdate = 900, - - VREvent_WebInterface_InstallDriverCompleted = 950, - - VREvent_MCImageUpdated = 1000, - - VREvent_FirmwareUpdateStarted = 1100, - VREvent_FirmwareUpdateFinished = 1101, - - VREvent_KeyboardClosed = 1200, - VREvent_KeyboardCharInput = 1201, - VREvent_KeyboardDone = 1202, // Sent when DONE button clicked on keyboard - - //VREvent_ApplicationTransitionStarted = 1300, - //VREvent_ApplicationTransitionAborted = 1301, - //VREvent_ApplicationTransitionNewAppStarted = 1302, - VREvent_ApplicationListUpdated = 1303, - VREvent_ApplicationMimeTypeLoad = 1304, - // VREvent_ApplicationTransitionNewAppLaunchComplete = 1305, - VREvent_ProcessConnected = 1306, - VREvent_ProcessDisconnected = 1307, - - //VREvent_Compositor_MirrorWindowShown = 1400, // DEPRECATED - //VREvent_Compositor_MirrorWindowHidden = 1401, // DEPRECATED - VREvent_Compositor_ChaperoneBoundsShown = 1410, - VREvent_Compositor_ChaperoneBoundsHidden = 1411, - VREvent_Compositor_DisplayDisconnected = 1412, - VREvent_Compositor_DisplayReconnected = 1413, - VREvent_Compositor_HDCPError = 1414, // data is hdcpError - VREvent_Compositor_ApplicationNotResponding = 1415, - VREvent_Compositor_ApplicationResumed = 1416, - VREvent_Compositor_OutOfVideoMemory = 1417, - VREvent_Compositor_DisplayModeNotSupported = 1418, // k_pch_SteamVR_PreferredRefreshRate - VREvent_Compositor_StageOverrideReady = 1419, - - VREvent_TrackedCamera_StartVideoStream = 1500, - VREvent_TrackedCamera_StopVideoStream = 1501, - VREvent_TrackedCamera_PauseVideoStream = 1502, - VREvent_TrackedCamera_ResumeVideoStream = 1503, - VREvent_TrackedCamera_EditingSurface = 1550, - - VREvent_PerformanceTest_EnableCapture = 1600, - VREvent_PerformanceTest_DisableCapture = 1601, - VREvent_PerformanceTest_FidelityLevel = 1602, - - VREvent_MessageOverlay_Closed = 1650, - VREvent_MessageOverlayCloseRequested = 1651, - - VREvent_Input_HapticVibration = 1700, // data is hapticVibration - VREvent_Input_BindingLoadFailed = 1701, // data is inputBinding - VREvent_Input_BindingLoadSuccessful = 1702, // data is inputBinding - VREvent_Input_ActionManifestReloaded = 1703, // no data - VREvent_Input_ActionManifestLoadFailed = 1704, // data is actionManifest - VREvent_Input_ProgressUpdate = 1705, // data is progressUpdate - VREvent_Input_TrackerActivated = 1706, - VREvent_Input_BindingsUpdated = 1707, - VREvent_Input_BindingSubscriptionChanged = 1708, - - VREvent_SpatialAnchors_PoseUpdated = 1800, // data is spatialAnchor. broadcast - VREvent_SpatialAnchors_DescriptorUpdated = 1801, // data is spatialAnchor. broadcast - VREvent_SpatialAnchors_RequestPoseUpdate = 1802, // data is spatialAnchor. sent to specific driver - VREvent_SpatialAnchors_RequestDescriptorUpdate = 1803, // data is spatialAnchor. sent to specific driver - - VREvent_SystemReport_Started = 1900, // user or system initiated generation of a system report. broadcast - - VREvent_Monitor_ShowHeadsetView = 2000, // data is process - VREvent_Monitor_HideHeadsetView = 2001, // data is process - - // Vendors are free to expose private events in this reserved region - VREvent_VendorSpecific_Reserved_Start = 10000, - VREvent_VendorSpecific_Reserved_End = 19999, -}; - - -/** Level of Hmd activity */ -// UserInteraction_Timeout means the device is in the process of timing out. -// InUse = ( k_EDeviceActivityLevel_UserInteraction || k_EDeviceActivityLevel_UserInteraction_Timeout ) -// VREvent_TrackedDeviceUserInteractionStarted fires when the devices transitions from Standby -> UserInteraction or Idle -> UserInteraction. -// VREvent_TrackedDeviceUserInteractionEnded fires when the devices transitions from UserInteraction_Timeout -> Idle -enum EDeviceActivityLevel -{ - k_EDeviceActivityLevel_Unknown = -1, - k_EDeviceActivityLevel_Idle = 0, // No activity for the last 10 seconds - k_EDeviceActivityLevel_UserInteraction = 1, // Activity (movement or prox sensor) is happening now - k_EDeviceActivityLevel_UserInteraction_Timeout = 2, // No activity for the last 0.5 seconds - k_EDeviceActivityLevel_Standby = 3, // Idle for at least 5 seconds (configurable in Settings -> Power Management) - k_EDeviceActivityLevel_Idle_Timeout = 4, -}; - - -/** VR controller button and axis IDs */ -enum EVRButtonId -{ - k_EButton_System = 0, - k_EButton_ApplicationMenu = 1, - k_EButton_Grip = 2, - k_EButton_DPad_Left = 3, - k_EButton_DPad_Up = 4, - k_EButton_DPad_Right = 5, - k_EButton_DPad_Down = 6, - k_EButton_A = 7, - - k_EButton_ProximitySensor = 31, - - k_EButton_Axis0 = 32, - k_EButton_Axis1 = 33, - k_EButton_Axis2 = 34, - k_EButton_Axis3 = 35, - k_EButton_Axis4 = 36, - - // aliases for well known controllers - k_EButton_SteamVR_Touchpad = k_EButton_Axis0, - k_EButton_SteamVR_Trigger = k_EButton_Axis1, - - k_EButton_Dashboard_Back = k_EButton_Grip, - - k_EButton_IndexController_A = k_EButton_Grip, - k_EButton_IndexController_B = k_EButton_ApplicationMenu, - k_EButton_IndexController_JoyStick = k_EButton_Axis3, - - k_EButton_Max = 64 -}; - -inline uint64_t ButtonMaskFromId( EVRButtonId id ) { return 1ull << id; } - -/** used for controller button events */ -struct VREvent_Controller_t -{ - uint32_t button; // EVRButtonId enum -}; - - -/** used for simulated mouse events in overlay space */ -enum EVRMouseButton -{ - VRMouseButton_Left = 0x0001, - VRMouseButton_Right = 0x0002, - VRMouseButton_Middle = 0x0004, -}; - - -/** used for simulated mouse events in overlay space */ -struct VREvent_Mouse_t -{ - float x, y; // co-ords are in GL space, bottom left of the texture is 0,0 - uint32_t button; // EVRMouseButton enum -}; - -/** used for simulated mouse wheel scroll */ -struct VREvent_Scroll_t -{ - float xdelta, ydelta; - uint32_t unused; - float viewportscale; // For scrolling on an overlay with laser mouse, this is the overlay's vertical size relative to the overlay height. Range: [0,1] -}; - -/** 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. -**/ -struct VREvent_TouchPadMove_t -{ - // true if the users finger is detected on the touch pad - bool bFingerDown; - - // How long the finger has been down in seconds - float flSecondsFingerDown; - - // These values indicate the starting finger position (so you can do some basic swipe stuff) - float fValueXFirst; - float fValueYFirst; - - // This is the raw sampled coordinate without deadzoning - float fValueXRaw; - float fValueYRaw; -}; - -/** notification related events. Details will still change at this point */ -struct VREvent_Notification_t -{ - uint64_t ulUserValue; - uint32_t notificationId; -}; - -/** Used for events about processes */ -struct VREvent_Process_t -{ - uint32_t pid; - uint32_t oldPid; - bool bForced; - // If the associated event was triggered by a connection loss - bool bConnectionLost; -}; - - -/** Used for a few events about overlays */ -struct VREvent_Overlay_t -{ - uint64_t overlayHandle; - uint64_t devicePath; - uint64_t memoryBlockId; -}; - - -/** Used for a few events about overlays */ -struct VREvent_Status_t -{ - uint32_t statusState; // EVRState enum -}; - -/** Used for keyboard events **/ -struct VREvent_Keyboard_t -{ - char cNewInput[8]; // Up to 11 bytes of new input - uint64_t uUserValue; // Possible flags about the new input -}; - -struct VREvent_Ipd_t -{ - float ipdMeters; -}; - -struct VREvent_Chaperone_t -{ - uint64_t m_nPreviousUniverse; - uint64_t m_nCurrentUniverse; -}; - -/** Not actually used for any events */ -struct VREvent_Reserved_t -{ - uint64_t reserved0; - uint64_t reserved1; - uint64_t reserved2; - uint64_t reserved3; - uint64_t reserved4; - uint64_t reserved5; -}; - -struct VREvent_PerformanceTest_t -{ - uint32_t m_nFidelityLevel; -}; - -struct VREvent_SeatedZeroPoseReset_t -{ - bool bResetBySystemMenu; -}; - -struct VREvent_Screenshot_t -{ - uint32_t handle; - uint32_t type; -}; - -struct VREvent_ScreenshotProgress_t -{ - float progress; -}; - -struct VREvent_ApplicationLaunch_t -{ - uint32_t pid; - uint32_t unArgsHandle; -}; - -struct VREvent_EditingCameraSurface_t -{ - uint64_t overlayHandle; - uint32_t nVisualMode; -}; - -struct VREvent_MessageOverlay_t -{ - uint32_t unVRMessageOverlayResponse; // vr::VRMessageOverlayResponse enum -}; - -struct VREvent_Property_t -{ - PropertyContainerHandle_t container; - ETrackedDeviceProperty prop; -}; - -struct VREvent_HapticVibration_t -{ - uint64_t containerHandle; // property container handle of the device with the haptic component - uint64_t componentHandle; // Which haptic component needs to vibrate - float fDurationSeconds; - float fFrequency; - float fAmplitude; -}; - -struct VREvent_WebConsole_t -{ - WebConsoleHandle_t webConsoleHandle; -}; - -struct VREvent_InputBindingLoad_t -{ - vr::PropertyContainerHandle_t ulAppContainer; - uint64_t pathMessage; - uint64_t pathUrl; - uint64_t pathControllerType; -}; - -struct VREvent_InputActionManifestLoad_t -{ - uint64_t pathAppKey; - uint64_t pathMessage; - uint64_t pathMessageParam; - uint64_t pathManifestPath; -}; - -struct VREvent_SpatialAnchor_t -{ - SpatialAnchorHandle_t unHandle; -}; - -struct VREvent_ProgressUpdate_t -{ - uint64_t ulApplicationPropertyContainer; - uint64_t pathDevice; - uint64_t pathInputSource; - uint64_t pathProgressAction; - uint64_t pathIcon; - float fProgress; -}; - -enum EShowUIType -{ - ShowUI_ControllerBinding = 0, - ShowUI_ManageTrackers = 1, - // ShowUI_QuickStart = 2, // Deprecated - ShowUI_Pairing = 3, - ShowUI_Settings = 4, - ShowUI_DebugCommands = 5, - ShowUI_FullControllerBinding = 6, - ShowUI_ManageDrivers = 7, -}; - -struct VREvent_ShowUI_t -{ - EShowUIType eType; -}; - -struct VREvent_ShowDevTools_t -{ - int32_t nBrowserIdentifier; -}; - -enum EHDCPError -{ - HDCPError_None = 0, - HDCPError_LinkLost = 1, - HDCPError_Tampered = 2, - HDCPError_DeviceRevoked = 3, - HDCPError_Unknown = 4 -}; - -struct VREvent_HDCPError_t -{ - EHDCPError eCode; -}; - -typedef union -{ - VREvent_Reserved_t reserved; - VREvent_Controller_t controller; - VREvent_Mouse_t mouse; - VREvent_Scroll_t scroll; - VREvent_Process_t process; - VREvent_Notification_t notification; - VREvent_Overlay_t overlay; - VREvent_Status_t status; - VREvent_Keyboard_t keyboard; - VREvent_Ipd_t ipd; - VREvent_Chaperone_t chaperone; - VREvent_PerformanceTest_t performanceTest; - VREvent_TouchPadMove_t touchPadMove; - VREvent_SeatedZeroPoseReset_t seatedZeroPoseReset; - VREvent_Screenshot_t screenshot; - VREvent_ScreenshotProgress_t screenshotProgress; - VREvent_ApplicationLaunch_t applicationLaunch; - VREvent_EditingCameraSurface_t cameraSurface; - VREvent_MessageOverlay_t messageOverlay; - VREvent_Property_t property; - VREvent_HapticVibration_t hapticVibration; - VREvent_WebConsole_t webConsole; - VREvent_InputBindingLoad_t inputBinding; - VREvent_InputActionManifestLoad_t actionManifest; - VREvent_SpatialAnchor_t spatialAnchor; - VREvent_ProgressUpdate_t progressUpdate; - VREvent_ShowUI_t showUi; - VREvent_ShowDevTools_t showDevTools; - VREvent_HDCPError_t hdcpError; - /** NOTE!!! If you change this you MUST manually update openvr_interop.cs.py */ -} VREvent_Data_t; - - -#if defined(__linux__) || defined(__APPLE__) -// This structure was originally defined mis-packed on Linux, preserved for -// compatibility. -#pragma pack( push, 4 ) -#endif - -/** An event posted by the server to all running applications */ -struct VREvent_t -{ - uint32_t eventType; // EVREventType enum - TrackedDeviceIndex_t trackedDeviceIndex; - float eventAgeSeconds; - // event data must be the end of the struct as its size is variable - VREvent_Data_t data; -}; - -#if defined(__linux__) || defined(__APPLE__) -#pragma pack( pop ) -#endif - -typedef uint32_t VRComponentProperties; - -enum EVRComponentProperty -{ - VRComponentProperty_IsStatic = (1 << 0), - VRComponentProperty_IsVisible = (1 << 1), - VRComponentProperty_IsTouched = (1 << 2), - VRComponentProperty_IsPressed = (1 << 3), - VRComponentProperty_IsScrolled = (1 << 4), - VRComponentProperty_IsHighlighted = (1 << 5), -}; - - -/** Describes state information about a render-model component, including transforms and other dynamic properties */ -struct RenderModel_ComponentState_t -{ - HmdMatrix34_t mTrackingToComponentRenderModel; // Transform required when drawing the component render model - HmdMatrix34_t mTrackingToComponentLocal; // Transform available for attaching to a local component coordinate system (-Z out from surface ) - VRComponentProperties uProperties; -}; - - -enum EVRInputError -{ - VRInputError_None = 0, - VRInputError_NameNotFound = 1, - VRInputError_WrongType = 2, - VRInputError_InvalidHandle = 3, - VRInputError_InvalidParam = 4, - VRInputError_NoSteam = 5, - VRInputError_MaxCapacityReached = 6, - VRInputError_IPCError = 7, - VRInputError_NoActiveActionSet = 8, - VRInputError_InvalidDevice = 9, - VRInputError_InvalidSkeleton = 10, - VRInputError_InvalidBoneCount = 11, - VRInputError_InvalidCompressedData = 12, - VRInputError_NoData = 13, - VRInputError_BufferTooSmall = 14, - VRInputError_MismatchedActionManifest = 15, - VRInputError_MissingSkeletonData = 16, - VRInputError_InvalidBoneIndex = 17, - VRInputError_InvalidPriority = 18, - VRInputError_PermissionDenied = 19, - VRInputError_InvalidRenderModel = 20, -}; - -enum EVRSpatialAnchorError -{ - VRSpatialAnchorError_Success = 0, - VRSpatialAnchorError_Internal = 1, - VRSpatialAnchorError_UnknownHandle = 2, - VRSpatialAnchorError_ArrayTooSmall = 3, - VRSpatialAnchorError_InvalidDescriptorChar = 4, - VRSpatialAnchorError_NotYetAvailable = 5, - VRSpatialAnchorError_NotAvailableInThisUniverse = 6, - VRSpatialAnchorError_PermanentlyUnavailable = 7, - VRSpatialAnchorError_WrongDriver = 8, - VRSpatialAnchorError_DescriptorTooLong = 9, - VRSpatialAnchorError_Unknown = 10, - VRSpatialAnchorError_NoRoomCalibration = 11, - VRSpatialAnchorError_InvalidArgument = 12, - VRSpatialAnchorError_UnknownDriver = 13, -}; - -/** 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. */ -struct HiddenAreaMesh_t -{ - const HmdVector2_t *pVertexData; - uint32_t unTriangleCount; -}; - - -enum EHiddenAreaMeshType -{ - k_eHiddenAreaMesh_Standard = 0, - k_eHiddenAreaMesh_Inverse = 1, - k_eHiddenAreaMesh_LineLoop = 2, - - k_eHiddenAreaMesh_Max = 3, -}; - - -/** Identifies what kind of axis is on the controller at index n. Read this type -* with pVRSystem->Get( nControllerDeviceIndex, Prop_Axis0Type_Int32 + n ); -*/ -enum EVRControllerAxisType -{ - k_eControllerAxis_None = 0, - k_eControllerAxis_TrackPad = 1, - k_eControllerAxis_Joystick = 2, - k_eControllerAxis_Trigger = 3, // Analog trigger data is in the X axis -}; - - -/** contains information about one axis on the controller */ -struct VRControllerAxis_t -{ - float x; // Ranges from -1.0 to 1.0 for joysticks and track pads. Ranges from 0.0 to 1.0 for triggers were 0 is fully released. - float y; // Ranges from -1.0 to 1.0 for joysticks and track pads. Is always 0.0 for triggers. -}; - - -/** the number of axes in the controller state */ -static const uint32_t k_unControllerStateAxisCount = 5; - - -#if defined(__linux__) || defined(__APPLE__) -// This structure was originally defined mis-packed on Linux, preserved for -// compatibility. -#pragma pack( push, 4 ) -#endif - -/** Holds all the state of a controller at one moment in time. */ -struct VRControllerState001_t -{ - // If packet num matches that on your prior call, then the controller state hasn't been changed since - // your last call and there is no need to process it - uint32_t unPacketNum; - - // bit flags for each of the buttons. Use ButtonMaskFromId to turn an ID into a mask - uint64_t ulButtonPressed; - uint64_t ulButtonTouched; - - // Axis data for the controller's analog inputs - VRControllerAxis_t rAxis[ k_unControllerStateAxisCount ]; -}; -#if defined(__linux__) || defined(__APPLE__) -#pragma pack( pop ) -#endif - - -typedef VRControllerState001_t VRControllerState_t; - - -/** determines how to provide output to the application of various event processing functions. */ -enum EVRControllerEventOutputType -{ - ControllerEventOutput_OSEvents = 0, - ControllerEventOutput_VREvents = 1, -}; - - - -/** Collision Bounds Style */ -enum ECollisionBoundsStyle -{ - COLLISION_BOUNDS_STYLE_BEGINNER = 0, - COLLISION_BOUNDS_STYLE_INTERMEDIATE, - COLLISION_BOUNDS_STYLE_SQUARES, - COLLISION_BOUNDS_STYLE_ADVANCED, - COLLISION_BOUNDS_STYLE_NONE, - - COLLISION_BOUNDS_STYLE_COUNT -}; - -/** used to refer to a single VR overlay */ -typedef uint64_t VROverlayHandle_t; - -static const VROverlayHandle_t k_ulOverlayHandleInvalid = 0; - -/** Errors that can occur around VR overlays */ -enum EVROverlayError -{ - VROverlayError_None = 0, - - VROverlayError_UnknownOverlay = 10, - VROverlayError_InvalidHandle = 11, - VROverlayError_PermissionDenied = 12, - VROverlayError_OverlayLimitExceeded = 13, // No more overlays could be created because the maximum number already exist - VROverlayError_WrongVisibilityType = 14, - VROverlayError_KeyTooLong = 15, - VROverlayError_NameTooLong = 16, - VROverlayError_KeyInUse = 17, - VROverlayError_WrongTransformType = 18, - VROverlayError_InvalidTrackedDevice = 19, - VROverlayError_InvalidParameter = 20, - VROverlayError_ThumbnailCantBeDestroyed = 21, - VROverlayError_ArrayTooSmall = 22, - VROverlayError_RequestFailed = 23, - VROverlayError_InvalidTexture = 24, - VROverlayError_UnableToLoadFile = 25, - VROverlayError_KeyboardAlreadyInUse = 26, - VROverlayError_NoNeighbor = 27, - VROverlayError_TooManyMaskPrimitives = 29, - VROverlayError_BadMaskPrimitive = 30, - VROverlayError_TextureAlreadyLocked = 31, - VROverlayError_TextureLockCapacityReached = 32, - VROverlayError_TextureNotLocked = 33, -}; - -/** enum values to pass in to VR_Init to identify whether the application will -* draw a 3D scene. */ -enum EVRApplicationType -{ - VRApplication_Other = 0, // Some other kind of application that isn't covered by the other entries - VRApplication_Scene = 1, // Application will submit 3D frames - VRApplication_Overlay = 2, // Application only interacts with overlays - VRApplication_Background = 3, // Application should not start SteamVR if it's not already running, and should not - // keep it running if everything else quits. - VRApplication_Utility = 4, // Init should not try to load any drivers. The application needs access to utility - // interfaces (like IVRSettings and IVRApplications) but not hardware. - VRApplication_VRMonitor = 5, // Reserved for vrmonitor - VRApplication_SteamWatchdog = 6,// Reserved for Steam - VRApplication_Bootstrapper = 7, // reserved for vrstartup - VRApplication_WebHelper = 8, // reserved for vrwebhelper - VRApplication_OpenXRInstance = 9, // reserved for openxr (created instance, but not session yet) - VRApplication_OpenXRScene = 10, // reserved for openxr (started session) - VRApplication_OpenXROverlay = 11, // reserved for openxr (started overlay session) - VRApplication_Prism = 12, // reserved for the vrprismhost process - - VRApplication_Max -}; - - -/** returns true if the specified application type is one of the -* OpenXR types */ -inline bool IsOpenXRAppType( EVRApplicationType eType ) -{ - return eType == VRApplication_OpenXRInstance - || eType == VRApplication_OpenXRScene - || eType == VRApplication_OpenXROverlay; -} - - -/** error codes for firmware */ -enum EVRFirmwareError -{ - VRFirmwareError_None = 0, - VRFirmwareError_Success = 1, - VRFirmwareError_Fail = 2, -}; - - -/** error codes for notifications */ -enum EVRNotificationError -{ - VRNotificationError_OK = 0, - VRNotificationError_InvalidNotificationId = 100, - VRNotificationError_NotificationQueueFull = 101, - VRNotificationError_InvalidOverlayHandle = 102, - VRNotificationError_SystemWithUserValueAlreadyExists = 103, -}; - - -enum EVRSkeletalMotionRange -{ - // The range of motion of the skeleton takes into account any physical limits imposed by - // the controller itself. This will tend to be the most accurate pose compared to the user's - // actual hand pose, but might not allow a closed fist for example - VRSkeletalMotionRange_WithController = 0, - - // Retarget the range of motion provided by the input device to make the hand appear to move - // as if it was not holding a controller. eg: map "hand grasping controller" to "closed fist" - VRSkeletalMotionRange_WithoutController = 1, -}; - -enum EVRSkeletalTrackingLevel -{ - // body part location can't be directly determined by the device. Any skeletal pose provided by - // the device is estimated by assuming the position required to active buttons, triggers, joysticks, - // or other input sensors. - // E.g. Vive Controller, Gamepad - VRSkeletalTracking_Estimated = 0, - - // body part location can be measured directly but with fewer degrees of freedom than the actual body - // part. Certain body part positions may be unmeasured by the device and estimated from other input data. - // E.g. Index Controllers, gloves that only measure finger curl - VRSkeletalTracking_Partial = 1, - - // Body part location can be measured directly throughout the entire range of motion of the body part. - // E.g. Mocap suit for the full body, gloves that measure rotation of each finger segment - VRSkeletalTracking_Full = 2, - - VRSkeletalTrackingLevel_Count, - VRSkeletalTrackingLevel_Max = VRSkeletalTrackingLevel_Count - 1 -}; - - -/** Type used for referring to bones by their index */ -typedef int32_t BoneIndex_t; -const BoneIndex_t k_unInvalidBoneIndex = -1; - - -/** error codes returned by Vr_Init */ - -// Please add adequate error description to https://developer.valvesoftware.com/w/index.php?title=Category:SteamVRHelp -enum EVRInitError -{ - VRInitError_None = 0, - VRInitError_Unknown = 1, - - VRInitError_Init_InstallationNotFound = 100, - VRInitError_Init_InstallationCorrupt = 101, - VRInitError_Init_VRClientDLLNotFound = 102, - VRInitError_Init_FileNotFound = 103, - VRInitError_Init_FactoryNotFound = 104, - VRInitError_Init_InterfaceNotFound = 105, - VRInitError_Init_InvalidInterface = 106, - VRInitError_Init_UserConfigDirectoryInvalid = 107, - VRInitError_Init_HmdNotFound = 108, - VRInitError_Init_NotInitialized = 109, - VRInitError_Init_PathRegistryNotFound = 110, - VRInitError_Init_NoConfigPath = 111, - VRInitError_Init_NoLogPath = 112, - VRInitError_Init_PathRegistryNotWritable = 113, - VRInitError_Init_AppInfoInitFailed = 114, - VRInitError_Init_Retry = 115, // Used internally to cause retries to vrserver - VRInitError_Init_InitCanceledByUser = 116, // The calling application should silently exit. The user canceled app startup - VRInitError_Init_AnotherAppLaunching = 117, - VRInitError_Init_SettingsInitFailed = 118, - VRInitError_Init_ShuttingDown = 119, - VRInitError_Init_TooManyObjects = 120, - VRInitError_Init_NoServerForBackgroundApp = 121, - VRInitError_Init_NotSupportedWithCompositor = 122, - VRInitError_Init_NotAvailableToUtilityApps = 123, - VRInitError_Init_Internal = 124, - VRInitError_Init_HmdDriverIdIsNone = 125, - VRInitError_Init_HmdNotFoundPresenceFailed = 126, - VRInitError_Init_VRMonitorNotFound = 127, - VRInitError_Init_VRMonitorStartupFailed = 128, - VRInitError_Init_LowPowerWatchdogNotSupported = 129, - VRInitError_Init_InvalidApplicationType = 130, - VRInitError_Init_NotAvailableToWatchdogApps = 131, - VRInitError_Init_WatchdogDisabledInSettings = 132, - VRInitError_Init_VRDashboardNotFound = 133, - VRInitError_Init_VRDashboardStartupFailed = 134, - VRInitError_Init_VRHomeNotFound = 135, - VRInitError_Init_VRHomeStartupFailed = 136, - VRInitError_Init_RebootingBusy = 137, - VRInitError_Init_FirmwareUpdateBusy = 138, - VRInitError_Init_FirmwareRecoveryBusy = 139, - VRInitError_Init_USBServiceBusy = 140, - VRInitError_Init_VRWebHelperStartupFailed = 141, - VRInitError_Init_TrackerManagerInitFailed = 142, - VRInitError_Init_AlreadyRunning = 143, - VRInitError_Init_FailedForVrMonitor = 144, - VRInitError_Init_PropertyManagerInitFailed = 145, - VRInitError_Init_WebServerFailed = 146, - VRInitError_Init_IllegalTypeTransition = 147, - VRInitError_Init_MismatchedRuntimes = 148, - VRInitError_Init_InvalidProcessId = 149, - VRInitError_Init_VRServiceStartupFailed = 150, - VRInitError_Init_PrismNeedsNewDrivers = 151, - VRInitError_Init_PrismStartupTimedOut = 152, - VRInitError_Init_CouldNotStartPrism = 153, - VRInitError_Init_CreateDriverDirectDeviceFailed = 154, - VRInitError_Init_PrismExitedUnexpectedly = 155, - - VRInitError_Driver_Failed = 200, - VRInitError_Driver_Unknown = 201, - VRInitError_Driver_HmdUnknown = 202, - VRInitError_Driver_NotLoaded = 203, - VRInitError_Driver_RuntimeOutOfDate = 204, - VRInitError_Driver_HmdInUse = 205, - VRInitError_Driver_NotCalibrated = 206, - VRInitError_Driver_CalibrationInvalid = 207, - VRInitError_Driver_HmdDisplayNotFound = 208, - VRInitError_Driver_TrackedDeviceInterfaceUnknown = 209, - // VRInitError_Driver_HmdDisplayNotFoundAfterFix = 210, // not needed: here for historic reasons - VRInitError_Driver_HmdDriverIdOutOfBounds = 211, - VRInitError_Driver_HmdDisplayMirrored = 212, - VRInitError_Driver_HmdDisplayNotFoundLaptop = 213, - // Never make error 259 because we return it from main and it would conflict with STILL_ACTIVE - - VRInitError_IPC_ServerInitFailed = 300, - VRInitError_IPC_ConnectFailed = 301, - VRInitError_IPC_SharedStateInitFailed = 302, - VRInitError_IPC_CompositorInitFailed = 303, - VRInitError_IPC_MutexInitFailed = 304, - VRInitError_IPC_Failed = 305, - VRInitError_IPC_CompositorConnectFailed = 306, - VRInitError_IPC_CompositorInvalidConnectResponse = 307, - VRInitError_IPC_ConnectFailedAfterMultipleAttempts = 308, - VRInitError_IPC_ConnectFailedAfterTargetExited = 309, - VRInitError_IPC_NamespaceUnavailable = 310, - - VRInitError_Compositor_Failed = 400, - VRInitError_Compositor_D3D11HardwareRequired = 401, - VRInitError_Compositor_FirmwareRequiresUpdate = 402, - VRInitError_Compositor_OverlayInitFailed = 403, - VRInitError_Compositor_ScreenshotsInitFailed = 404, - VRInitError_Compositor_UnableToCreateDevice = 405, - VRInitError_Compositor_SharedStateIsNull = 406, - VRInitError_Compositor_NotificationManagerIsNull = 407, - VRInitError_Compositor_ResourceManagerClientIsNull = 408, - VRInitError_Compositor_MessageOverlaySharedStateInitFailure = 409, - VRInitError_Compositor_PropertiesInterfaceIsNull = 410, - VRInitError_Compositor_CreateFullscreenWindowFailed = 411, - VRInitError_Compositor_SettingsInterfaceIsNull = 412, - VRInitError_Compositor_FailedToShowWindow = 413, - VRInitError_Compositor_DistortInterfaceIsNull = 414, - VRInitError_Compositor_DisplayFrequencyFailure = 415, - VRInitError_Compositor_RendererInitializationFailed = 416, - VRInitError_Compositor_DXGIFactoryInterfaceIsNull = 417, - VRInitError_Compositor_DXGIFactoryCreateFailed = 418, - VRInitError_Compositor_DXGIFactoryQueryFailed = 419, - VRInitError_Compositor_InvalidAdapterDesktop = 420, - VRInitError_Compositor_InvalidHmdAttachment = 421, - VRInitError_Compositor_InvalidOutputDesktop = 422, - VRInitError_Compositor_InvalidDeviceProvided = 423, - VRInitError_Compositor_D3D11RendererInitializationFailed = 424, - VRInitError_Compositor_FailedToFindDisplayMode = 425, - VRInitError_Compositor_FailedToCreateSwapChain = 426, - VRInitError_Compositor_FailedToGetBackBuffer = 427, - VRInitError_Compositor_FailedToCreateRenderTarget = 428, - VRInitError_Compositor_FailedToCreateDXGI2SwapChain = 429, - VRInitError_Compositor_FailedtoGetDXGI2BackBuffer = 430, - VRInitError_Compositor_FailedToCreateDXGI2RenderTarget = 431, - VRInitError_Compositor_FailedToGetDXGIDeviceInterface = 432, - VRInitError_Compositor_SelectDisplayMode = 433, - VRInitError_Compositor_FailedToCreateNvAPIRenderTargets = 434, - VRInitError_Compositor_NvAPISetDisplayMode = 435, - VRInitError_Compositor_FailedToCreateDirectModeDisplay = 436, - VRInitError_Compositor_InvalidHmdPropertyContainer = 437, - VRInitError_Compositor_UpdateDisplayFrequency = 438, - VRInitError_Compositor_CreateRasterizerState = 439, - VRInitError_Compositor_CreateWireframeRasterizerState = 440, - VRInitError_Compositor_CreateSamplerState = 441, - VRInitError_Compositor_CreateClampToBorderSamplerState = 442, - VRInitError_Compositor_CreateAnisoSamplerState = 443, - VRInitError_Compositor_CreateOverlaySamplerState = 444, - VRInitError_Compositor_CreatePanoramaSamplerState = 445, - VRInitError_Compositor_CreateFontSamplerState = 446, - VRInitError_Compositor_CreateNoBlendState = 447, - VRInitError_Compositor_CreateBlendState = 448, - VRInitError_Compositor_CreateAlphaBlendState = 449, - VRInitError_Compositor_CreateBlendStateMaskR = 450, - VRInitError_Compositor_CreateBlendStateMaskG = 451, - VRInitError_Compositor_CreateBlendStateMaskB = 452, - VRInitError_Compositor_CreateDepthStencilState = 453, - VRInitError_Compositor_CreateDepthStencilStateNoWrite = 454, - VRInitError_Compositor_CreateDepthStencilStateNoDepth = 455, - VRInitError_Compositor_CreateFlushTexture = 456, - VRInitError_Compositor_CreateDistortionSurfaces = 457, - VRInitError_Compositor_CreateConstantBuffer = 458, - VRInitError_Compositor_CreateHmdPoseConstantBuffer = 459, - VRInitError_Compositor_CreateHmdPoseStagingConstantBuffer = 460, - VRInitError_Compositor_CreateSharedFrameInfoConstantBuffer = 461, - VRInitError_Compositor_CreateOverlayConstantBuffer = 462, - VRInitError_Compositor_CreateSceneTextureIndexConstantBuffer = 463, - VRInitError_Compositor_CreateReadableSceneTextureIndexConstantBuffer = 464, - VRInitError_Compositor_CreateLayerGraphicsTextureIndexConstantBuffer = 465, - VRInitError_Compositor_CreateLayerComputeTextureIndexConstantBuffer = 466, - VRInitError_Compositor_CreateLayerComputeSceneTextureIndexConstantBuffer = 467, - VRInitError_Compositor_CreateComputeHmdPoseConstantBuffer = 468, - VRInitError_Compositor_CreateGeomConstantBuffer = 469, - VRInitError_Compositor_CreatePanelMaskConstantBuffer = 470, - VRInitError_Compositor_CreatePixelSimUBO = 471, - VRInitError_Compositor_CreateMSAARenderTextures = 472, - VRInitError_Compositor_CreateResolveRenderTextures = 473, - VRInitError_Compositor_CreateComputeResolveRenderTextures = 474, - VRInitError_Compositor_CreateDriverDirectModeResolveTextures = 475, - VRInitError_Compositor_OpenDriverDirectModeResolveTextures = 476, - VRInitError_Compositor_CreateFallbackSyncTexture = 477, - VRInitError_Compositor_ShareFallbackSyncTexture = 478, - VRInitError_Compositor_CreateOverlayIndexBuffer = 479, - VRInitError_Compositor_CreateOverlayVertexBuffer = 480, - VRInitError_Compositor_CreateTextVertexBuffer = 481, - VRInitError_Compositor_CreateTextIndexBuffer = 482, - VRInitError_Compositor_CreateMirrorTextures = 483, - VRInitError_Compositor_CreateLastFrameRenderTexture = 484, - VRInitError_Compositor_CreateMirrorOverlay = 485, - VRInitError_Compositor_FailedToCreateVirtualDisplayBackbuffer = 486, - VRInitError_Compositor_DisplayModeNotSupported = 487, - VRInitError_Compositor_CreateOverlayInvalidCall = 488, - VRInitError_Compositor_CreateOverlayAlreadyInitialized = 489, - VRInitError_Compositor_FailedToCreateMailbox = 490, - VRInitError_Compositor_WindowInterfaceIsNull = 491, - VRInitError_Compositor_SystemLayerCreateInstance = 492, - VRInitError_Compositor_SystemLayerCreateSession = 493, - - VRInitError_VendorSpecific_UnableToConnectToOculusRuntime = 1000, - VRInitError_VendorSpecific_WindowsNotInDevMode = 1001, - - VRInitError_VendorSpecific_HmdFound_CantOpenDevice = 1101, - VRInitError_VendorSpecific_HmdFound_UnableToRequestConfigStart = 1102, - VRInitError_VendorSpecific_HmdFound_NoStoredConfig = 1103, - VRInitError_VendorSpecific_HmdFound_ConfigTooBig = 1104, - VRInitError_VendorSpecific_HmdFound_ConfigTooSmall = 1105, - VRInitError_VendorSpecific_HmdFound_UnableToInitZLib = 1106, - VRInitError_VendorSpecific_HmdFound_CantReadFirmwareVersion = 1107, - VRInitError_VendorSpecific_HmdFound_UnableToSendUserDataStart = 1108, - VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataStart = 1109, - VRInitError_VendorSpecific_HmdFound_UnableToGetUserDataNext = 1110, - VRInitError_VendorSpecific_HmdFound_UserDataAddressRange = 1111, - VRInitError_VendorSpecific_HmdFound_UserDataError = 1112, - VRInitError_VendorSpecific_HmdFound_ConfigFailedSanityCheck = 1113, - VRInitError_VendorSpecific_OculusRuntimeBadInstall = 1114, - - VRInitError_Steam_SteamInstallationNotFound = 2000, - - // Strictly a placeholder - VRInitError_LastError -}; - -enum EVRScreenshotType -{ - VRScreenshotType_None = 0, - VRScreenshotType_Mono = 1, // left eye only - VRScreenshotType_Stereo = 2, - VRScreenshotType_Cubemap = 3, - VRScreenshotType_MonoPanorama = 4, - VRScreenshotType_StereoPanorama = 5 -}; - -enum EVRScreenshotPropertyFilenames -{ - VRScreenshotPropertyFilenames_Preview = 0, - VRScreenshotPropertyFilenames_VR = 1, -}; - -enum EVRTrackedCameraError -{ - VRTrackedCameraError_None = 0, - VRTrackedCameraError_OperationFailed = 100, - VRTrackedCameraError_InvalidHandle = 101, - VRTrackedCameraError_InvalidFrameHeaderVersion = 102, - VRTrackedCameraError_OutOfHandles = 103, - VRTrackedCameraError_IPCFailure = 104, - VRTrackedCameraError_NotSupportedForThisDevice = 105, - VRTrackedCameraError_SharedMemoryFailure = 106, - VRTrackedCameraError_FrameBufferingFailure = 107, - VRTrackedCameraError_StreamSetupFailure = 108, - VRTrackedCameraError_InvalidGLTextureId = 109, - VRTrackedCameraError_InvalidSharedTextureHandle = 110, - VRTrackedCameraError_FailedToGetGLTextureId = 111, - VRTrackedCameraError_SharedTextureFailure = 112, - VRTrackedCameraError_NoFrameAvailable = 113, - VRTrackedCameraError_InvalidArgument = 114, - VRTrackedCameraError_InvalidFrameBufferSize = 115, -}; - -enum EVRTrackedCameraFrameLayout -{ - EVRTrackedCameraFrameLayout_Mono = 0x0001, - EVRTrackedCameraFrameLayout_Stereo = 0x0002, - EVRTrackedCameraFrameLayout_VerticalLayout = 0x0010, // Stereo frames are Top/Bottom (left/right) - EVRTrackedCameraFrameLayout_HorizontalLayout = 0x0020, // Stereo frames are Left/Right -}; - -enum EVRTrackedCameraFrameType -{ - VRTrackedCameraFrameType_Distorted = 0, // This is the camera video frame size in pixels, still distorted. - VRTrackedCameraFrameType_Undistorted, // In pixels, an undistorted inscribed rectangle region without invalid regions. This size is subject to changes shortly. - VRTrackedCameraFrameType_MaximumUndistorted, // In pixels, maximum undistorted with invalid regions. Non zero alpha component identifies valid regions. - MAX_CAMERA_FRAME_TYPES -}; - -enum EVRDistortionFunctionType -{ - VRDistortionFunctionType_None, - VRDistortionFunctionType_FTheta, - VRDistortionFunctionType_Extended_FTheta, - MAX_DISTORTION_FUNCTION_TYPES, -}; - -static const uint32_t k_unMaxDistortionFunctionParameters = 8; - -typedef uint64_t TrackedCameraHandle_t; -#define INVALID_TRACKED_CAMERA_HANDLE ((vr::TrackedCameraHandle_t)0) - -struct CameraVideoStreamFrameHeader_t -{ - EVRTrackedCameraFrameType eFrameType; - - uint32_t nWidth; - uint32_t nHeight; - uint32_t nBytesPerPixel; - - uint32_t nFrameSequence; - - TrackedDevicePose_t trackedDevicePose; - - uint64_t ulFrameExposureTime; // mid-point of the exposure of the image in host system ticks -}; - -// Screenshot types -typedef uint32_t ScreenshotHandle_t; - -static const uint32_t k_unScreenshotHandleInvalid = 0; - -/** Compositor frame timing reprojection flags. */ -const uint32_t VRCompositor_ReprojectionReason_Cpu = 0x01; -const uint32_t VRCompositor_ReprojectionReason_Gpu = 0x02; -const uint32_t VRCompositor_ReprojectionAsync = 0x04; // This flag indicates the async reprojection mode is active, - // but does not indicate if reprojection actually happened or not. - // Use the ReprojectionReason flags above to check if reprojection - // was actually applied (i.e. scene texture was reused). - // NumFramePresents > 1 also indicates the scene texture was reused, - // and also the number of times that it was presented in total. - -const uint32_t VRCompositor_ReprojectionMotion = 0x08; // This flag indicates whether or not motion smoothing was triggered for this frame - -const uint32_t VRCompositor_PredictionMask = 0xF0; // The runtime may predict more than one frame (up to four) ahead if - // it detects the application is taking too long to render. These two - // bits will contain the count of additional frames (normally zero). - // Use the VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES macro to read from - // the latest frame timing entry. - -const uint32_t VRCompositor_ThrottleMask = 0xF00; // Number of frames the compositor is throttling the application. - // Use the VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES macro to read from - // the latest frame timing entry. - -#define VR_COMPOSITOR_ADDITIONAL_PREDICTED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_PredictionMask ) >> 4 ) -#define VR_COMPOSITOR_NUMBER_OF_THROTTLED_FRAMES( timing ) ( ( ( timing ).m_nReprojectionFlags & vr::VRCompositor_ThrottleMask ) >> 8 ) - -/** Provides a single frame's timing information to the app */ -struct Compositor_FrameTiming -{ - uint32_t m_nSize; // Set to sizeof( Compositor_FrameTiming ) - uint32_t m_nFrameIndex; - uint32_t m_nNumFramePresents; // number of times this frame was presented - uint32_t m_nNumMisPresented; // number of times this frame was presented on a vsync other than it was originally predicted to - uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out - uint32_t m_nReprojectionFlags; - - /** Absolute time reference for comparing frames. This aligns with the vsync that running start is relative to. */ - double m_flSystemTimeInSeconds; - - /** These times may include work from other processes due to OS scheduling. - * The fewer packets of work these are broken up into, the less likely this will happen. - * GPU work can be broken up by calling Flush. This can sometimes be useful to get the GPU started - * processing that work earlier in the frame. */ - float m_flPreSubmitGpuMs; // time spent rendering the scene (gpu work submitted between WaitGetPoses and second Submit) - float m_flPostSubmitGpuMs; // additional time spent rendering by application (e.g. companion window) - float m_flTotalRenderGpuMs; // time between work submitted immediately after present (ideally vsync) until the end of compositor submitted work - float m_flCompositorRenderGpuMs; // time spend performing distortion correction, rendering chaperone, overlays, etc. - float m_flCompositorRenderCpuMs; // time spent on cpu submitting the above work for this frame - float m_flCompositorIdleCpuMs; // time spent waiting for running start (application could have used this much more time) - - /** Miscellaneous measured intervals. */ - float m_flClientFrameIntervalMs; // time between calls to WaitGetPoses - float m_flPresentCallCpuMs; // time blocked on call to present (usually 0.0, but can go long) - float m_flWaitForPresentCpuMs; // time spent spin-waiting for frame index to change (not near-zero indicates wait object failure) - float m_flSubmitFrameMs; // time spent in IVRCompositor::Submit (not near-zero indicates driver issue) - - /** The following are all relative to this frame's SystemTimeInSeconds */ - float m_flWaitGetPosesCalledMs; - float m_flNewPosesReadyMs; - float m_flNewFrameReadyMs; // second call to IVRCompositor::Submit - float m_flCompositorUpdateStartMs; - float m_flCompositorUpdateEndMs; - float m_flCompositorRenderStartMs; - - vr::TrackedDevicePose_t m_HmdPose; // pose used by app to render this frame - - uint32_t m_nNumVSyncsReadyForUse; - uint32_t m_nNumVSyncsToFirstView; -}; - -/** Provides compositor benchmark results to the app */ -struct Compositor_BenchmarkResults -{ - float m_flMegaPixelsPerSecond; // Measurement of GPU MP/s performed by compositor benchmark - float m_flHmdRecommendedMegaPixelsPerSecond; // Recommended default MP/s given the HMD resolution, refresh, and panel mask. -}; - -/** Frame timing data provided by direct mode drivers. */ -struct DriverDirectMode_FrameTiming -{ - uint32_t m_nSize; // Set to sizeof( DriverDirectMode_FrameTiming ) - uint32_t m_nNumFramePresents; // number of times frame was presented - uint32_t m_nNumMisPresented; // number of times frame was presented on a vsync other than it was originally predicted to - uint32_t m_nNumDroppedFrames; // number of additional times previous frame was scanned out (i.e. compositor missed vsync) - uint32_t m_nReprojectionFlags; -}; - -/** These flags will be set on DriverDirectMode_FrameTiming::m_nReprojectionFlags when IVRDriverDirectModeComponent::GetFrameTiming is called for drivers to optionally respond to. */ -const uint32_t VRCompositor_ReprojectionMotion_Enabled = 0x100; // Motion Smoothing is enabled in the UI for the currently running application -const uint32_t VRCompositor_ReprojectionMotion_ForcedOn = 0x200; // Motion Smoothing is forced on in the UI for the currently running application -const uint32_t VRCompositor_ReprojectionMotion_AppThrottled = 0x400; // Application is requesting throttling via ForceInterleavedReprojectionOn - - -enum EVSync -{ - VSync_None, - VSync_WaitRender, // block following render work until vsync - VSync_NoWaitRender, // do not block following render work (allow to get started early) -}; - -enum EVRMuraCorrectionMode -{ - EVRMuraCorrectionMode_Default = 0, - EVRMuraCorrectionMode_NoCorrection -}; - -/** raw IMU data provided by IVRIOBuffer from paths to tracked devices with IMUs */ -enum Imu_OffScaleFlags -{ - OffScale_AccelX = 0x01, - OffScale_AccelY = 0x02, - OffScale_AccelZ = 0x04, - OffScale_GyroX = 0x08, - OffScale_GyroY = 0x10, - OffScale_GyroZ = 0x20, -}; - -struct ImuSample_t -{ - double fSampleTime; - HmdVector3d_t vAccel; - HmdVector3d_t vGyro; - uint32_t unOffScaleFlags; -}; - -#pragma pack( pop ) - -// figure out how to import from the VR API dll -#if defined(_WIN32) - - #if !defined(OPENVR_BUILD_STATIC) - #ifdef VR_API_EXPORT - #define VR_INTERFACE extern "C" __declspec( dllexport ) - #else - #define VR_INTERFACE extern "C" __declspec( dllimport ) - #endif - #else - #define VR_INTERFACE extern "C" - #endif - -#elif defined(__GNUC__) || defined(COMPILER_GCC) || defined(__APPLE__) - -#ifdef VR_API_EXPORT - #define VR_INTERFACE extern "C" __attribute__((visibility("default"))) -#else - #define VR_INTERFACE extern "C" -#endif - -#else - #error "Unsupported Platform." -#endif - - -#if defined( _WIN32 ) - #define VR_CALLTYPE __cdecl -#else - #define VR_CALLTYPE -#endif - -} // namespace vr -#endif // _INCLUDE_VRTYPES_H - -// vrannotation.h - -#ifdef API_GEN -# define VR_CLANG_ATTR(ATTR) __attribute__((annotate( ATTR ))) -#else -# define VR_CLANG_ATTR(ATTR) -#endif - -#define VR_METHOD_DESC(DESC) VR_CLANG_ATTR( "desc:" #DESC ";" ) -#define VR_IGNOREATTR() VR_CLANG_ATTR( "ignore" ) -#define VR_OUT_STRUCT() VR_CLANG_ATTR( "out_struct: ;" ) -#define VR_OUT_STRING() VR_CLANG_ATTR( "out_string: ;" ) -#define VR_OUT_ARRAY_CALL(COUNTER,FUNCTION,PARAMS) VR_CLANG_ATTR( "out_array_call:" #COUNTER "," #FUNCTION "," #PARAMS ";" ) -#define VR_OUT_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "out_array_count:" #COUNTER ";" ) -#define VR_ARRAY_COUNT(COUNTER) VR_CLANG_ATTR( "array_count:" #COUNTER ";" ) -#define VR_ARRAY_COUNT_D(COUNTER, DESC) VR_CLANG_ATTR( "array_count:" #COUNTER ";desc:" #DESC ) -#define VR_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "buffer_count:" #COUNTER ";" ) -#define VR_OUT_BUFFER_COUNT(COUNTER) VR_CLANG_ATTR( "out_buffer_count:" #COUNTER ";" ) -#define VR_OUT_STRING_COUNT(COUNTER) VR_CLANG_ATTR( "out_string_count:" #COUNTER ";" ) - -// vrtrackedcameratypes.h - -#ifndef _VRTRACKEDCAMERATYPES_H -#define _VRTRACKEDCAMERATYPES_H - -namespace vr -{ - -#pragma pack( push, 8 ) - -enum ECameraVideoStreamFormat -{ - CVS_FORMAT_UNKNOWN = 0, - CVS_FORMAT_RAW10 = 1, // 10 bits per pixel - CVS_FORMAT_NV12 = 2, // 12 bits per pixel - CVS_FORMAT_RGB24 = 3, // 24 bits per pixel - CVS_FORMAT_NV12_2 = 4, // 12 bits per pixel, 2x height - CVS_FORMAT_YUYV16 = 5, // 16 bits per pixel - CVS_FORMAT_BAYER16BG = 6, // 16 bits per pixel, 10-bit BG-format Bayer, see https://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html - CVS_FORMAT_MJPEG = 7, // variable-sized MJPEG Open DML format, see https://www.loc.gov/preservation/digital/formats/fdd/fdd000063.shtml - CVS_MAX_FORMATS -}; - -enum ECameraCompatibilityMode -{ - CAMERA_COMPAT_MODE_BULK_DEFAULT = 0, - CAMERA_COMPAT_MODE_BULK_64K_DMA = 1, - CAMERA_COMPAT_MODE_BULK_16K_DMA = 2, - CAMERA_COMPAT_MODE_BULK_8K_DMA = 3, - CAMERA_COMPAT_MODE_ISO_52FPS = 4, - CAMERA_COMPAT_MODE_ISO_50FPS = 5, - CAMERA_COMPAT_MODE_ISO_48FPS = 6, - CAMERA_COMPAT_MODE_ISO_46FPS = 7, - CAMERA_COMPAT_MODE_ISO_44FPS = 8, - CAMERA_COMPAT_MODE_ISO_42FPS = 9, - CAMERA_COMPAT_MODE_ISO_40FPS = 10, - CAMERA_COMPAT_MODE_ISO_35FPS = 11, - CAMERA_COMPAT_MODE_ISO_30FPS = 12, - CAMERA_COMPAT_MODE_ISO_15FPS = 13, - MAX_CAMERA_COMPAT_MODES -}; - -enum ECameraRoomViewStyle -{ - CAMERA_ROOMVIEW_STYLE_DEFAULT = 0, - CAMERA_ROOMVIEW_STYLE_EDGE_A = 1, - CAMERA_ROOMVIEW_STYLE_EDGE_B = 2, - CAMERA_ROOMVIEW_STYLE_VIDEO_TRANSLUSCENT = 3, - CAMERA_ROOMVIEW_STYLE_VIDEO_OPAQUE = 4, - CAMERA_ROOMVIEW_STYLE_COUNT = 5, -}; - -#ifdef _MSC_VER -#define VR_CAMERA_DECL_ALIGN( x ) __declspec( align( x ) ) -#else -#define VR_CAMERA_DECL_ALIGN( x ) // -#endif - -static const uint32_t k_unMaxCameras = 4; -static const uint32_t k_unMaxCameraFrameSharedHandles = 4; - -VR_CAMERA_DECL_ALIGN( 8 ) struct CameraVideoStreamFrame_t -{ - ECameraVideoStreamFormat m_nStreamFormat; - - uint32_t m_nWidth; - uint32_t m_nHeight; - - uint32_t m_nImageDataSize; // Based on stream format, width, height - - uint32_t m_nFrameSequence; // Starts from 0 when stream starts. - - uint32_t m_nBufferIndex; // Identifies which buffer the image data is hosted - uint32_t m_nBufferCount; // Total number of configured buffers - - uint32_t m_nExposureTime; - - uint32_t m_nISPFrameTimeStamp; // Driver provided time stamp per driver centric time base - uint32_t m_nISPReferenceTimeStamp; - uint32_t m_nSyncCounter; - - uint32_t m_nCamSyncEvents; - uint32_t m_nISPSyncEvents; - - double m_flReferenceCamSyncTime; - - double m_flFrameElapsedTime; // Starts from 0 when stream starts. In seconds. - double m_flFrameDeliveryRate; - - double m_flFrameCaptureTime_DriverAbsolute; // In USB time, via AuxEvent - double m_flFrameCaptureTime_ServerRelative; // In System time within the server - uint64_t m_nFrameCaptureTicks_ServerAbsolute; // In system ticks within the server - double m_flFrameCaptureTime_ClientRelative; // At the client, relative to when the frame was exposed/captured. - - double m_flSyncMarkerError; - - TrackedDevicePose_t m_RawTrackedDevicePose; // Raw-and-uncalibrated pose, supplied by HMD layer when used as a tracked camera - - uint64_t m_pImageData; -}; - -#pragma pack( pop ) - -} - -#endif // _VRTRACKEDCAMERATYPES_H - -// ivrsettings.h - -#include - -namespace vr -{ - enum EVRSettingsError - { - VRSettingsError_None = 0, - VRSettingsError_IPCFailed = 1, - VRSettingsError_WriteFailed = 2, - VRSettingsError_ReadFailed = 3, - VRSettingsError_JsonParseFailed = 4, - VRSettingsError_UnsetSettingHasNoDefault = 5, // This will be returned if the setting does not appear in the appropriate default file and has not been set - }; - - // The maximum length of a settings key - static const uint32_t k_unMaxSettingsKeyLength = 128; - - class IVRSettings - { - public: - virtual const char *GetSettingsErrorNameFromEnum( EVRSettingsError eError ) = 0; - - virtual void SetBool( const char *pchSection, const char *pchSettingsKey, bool bValue, EVRSettingsError *peError = nullptr ) = 0; - virtual void SetInt32( const char *pchSection, const char *pchSettingsKey, int32_t nValue, EVRSettingsError *peError = nullptr ) = 0; - virtual void SetFloat( const char *pchSection, const char *pchSettingsKey, float flValue, EVRSettingsError *peError = nullptr ) = 0; - virtual void SetString( const char *pchSection, const char *pchSettingsKey, const char *pchValue, EVRSettingsError *peError = nullptr ) = 0; - - // 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 "" - virtual bool GetBool( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; - virtual int32_t GetInt32( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; - virtual float GetFloat( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; - virtual void GetString( const char *pchSection, const char *pchSettingsKey, VR_OUT_STRING() char *pchValue, uint32_t unValueLen, EVRSettingsError *peError = nullptr ) = 0; - - virtual void RemoveSection( const char *pchSection, EVRSettingsError *peError = nullptr ) = 0; - virtual void RemoveKeyInSection( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) = 0; - }; - - //----------------------------------------------------------------------------- - static const char * const IVRSettings_Version = "IVRSettings_003"; - - class CVRSettingHelper - { - IVRSettings *m_pSettings; - public: - CVRSettingHelper( IVRSettings *pSettings ) - { - m_pSettings = pSettings; - } - - const char *GetSettingsErrorNameFromEnum( EVRSettingsError eError ) - { - return m_pSettings->GetSettingsErrorNameFromEnum( eError ); - } - - void SetBool( const char *pchSection, const char *pchSettingsKey, bool bValue, EVRSettingsError *peError = nullptr ) - { - m_pSettings->SetBool( pchSection, pchSettingsKey, bValue, peError ); - } - - void SetInt32( const char *pchSection, const char *pchSettingsKey, int32_t nValue, EVRSettingsError *peError = nullptr ) - { - m_pSettings->SetInt32( pchSection, pchSettingsKey, nValue, peError ); - } - void SetFloat( const char *pchSection, const char *pchSettingsKey, float flValue, EVRSettingsError *peError = nullptr ) - { - m_pSettings->SetFloat( pchSection, pchSettingsKey, flValue, peError ); - } - void SetString( const char *pchSection, const char *pchSettingsKey, const char *pchValue, EVRSettingsError *peError = nullptr ) - { - m_pSettings->SetString( pchSection, pchSettingsKey, pchValue, peError ); - } - void SetString( const std::string & sSection, const std::string & sSettingsKey, const std::string & sValue, EVRSettingsError *peError = nullptr ) - { - m_pSettings->SetString( sSection.c_str(), sSettingsKey.c_str(), sValue.c_str(), peError ); - } - - bool GetBool( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) - { - return m_pSettings->GetBool( pchSection, pchSettingsKey, peError ); - } - int32_t GetInt32( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) - { - return m_pSettings->GetInt32( pchSection, pchSettingsKey, peError ); - } - float GetFloat( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) - { - return m_pSettings->GetFloat( pchSection, pchSettingsKey, peError ); - } - void GetString( const char *pchSection, const char *pchSettingsKey, VR_OUT_STRING() char *pchValue, uint32_t unValueLen, EVRSettingsError *peError = nullptr ) - { - m_pSettings->GetString( pchSection, pchSettingsKey, pchValue, unValueLen, peError ); - } - std::string GetString( const std::string & sSection, const std::string & sSettingsKey, EVRSettingsError *peError = nullptr ) - { - char buf[4096]; - vr::EVRSettingsError eError; - m_pSettings->GetString( sSection.c_str(), sSettingsKey.c_str(), buf, sizeof( buf ), &eError ); - if ( peError ) - *peError = eError; - if ( eError == vr::VRSettingsError_None ) - return buf; - else - return ""; - } - - void RemoveSection( const char *pchSection, EVRSettingsError *peError = nullptr ) - { - m_pSettings->RemoveSection( pchSection, peError ); - } - void RemoveKeyInSection( const char *pchSection, const char *pchSettingsKey, EVRSettingsError *peError = nullptr ) - { - m_pSettings->RemoveKeyInSection( pchSection, pchSettingsKey, peError ); - } - }; - - - //----------------------------------------------------------------------------- - // steamvr keys - static const char * const k_pch_SteamVR_Section = "steamvr"; - static const char * const k_pch_SteamVR_RequireHmd_String = "requireHmd"; - static const char * const k_pch_SteamVR_ForcedDriverKey_String = "forcedDriver"; - static const char * const k_pch_SteamVR_ForcedHmdKey_String = "forcedHmd"; - static const char * const k_pch_SteamVR_DisplayDebug_Bool = "displayDebug"; - static const char * const k_pch_SteamVR_DebugProcessPipe_String = "debugProcessPipe"; - static const char * const k_pch_SteamVR_DisplayDebugX_Int32 = "displayDebugX"; - static const char * const k_pch_SteamVR_DisplayDebugY_Int32 = "displayDebugY"; - static const char * const k_pch_SteamVR_SendSystemButtonToAllApps_Bool= "sendSystemButtonToAllApps"; - static const char * const k_pch_SteamVR_LogLevel_Int32 = "loglevel"; - static const char * const k_pch_SteamVR_IPD_Float = "ipd"; - static const char * const k_pch_SteamVR_Background_String = "background"; - static const char * const k_pch_SteamVR_BackgroundUseDomeProjection_Bool = "backgroundUseDomeProjection"; - static const char * const k_pch_SteamVR_BackgroundCameraHeight_Float = "backgroundCameraHeight"; - static const char * const k_pch_SteamVR_BackgroundDomeRadius_Float = "backgroundDomeRadius"; - static const char * const k_pch_SteamVR_GridColor_String = "gridColor"; - static const char * const k_pch_SteamVR_PlayAreaColor_String = "playAreaColor"; - static const char * const k_pch_SteamVR_TrackingLossColor_String = "trackingLossColor"; - static const char * const k_pch_SteamVR_ShowStage_Bool = "showStage"; - static const char * const k_pch_SteamVR_DrawTrackingReferences_Bool = "drawTrackingReferences"; - static const char * const k_pch_SteamVR_ActivateMultipleDrivers_Bool = "activateMultipleDrivers"; - static const char * const k_pch_SteamVR_UsingSpeakers_Bool = "usingSpeakers"; - static const char * const k_pch_SteamVR_SpeakersForwardYawOffsetDegrees_Float = "speakersForwardYawOffsetDegrees"; - static const char * const k_pch_SteamVR_BaseStationPowerManagement_Int32 = "basestationPowerManagement"; - static const char * const k_pch_SteamVR_ShowBaseStationPowerManagementTip_Int32 = "ShowBaseStationPowerManagementTip"; - static const char * const k_pch_SteamVR_NeverKillProcesses_Bool = "neverKillProcesses"; - static const char * const k_pch_SteamVR_SupersampleScale_Float = "supersampleScale"; - static const char * const k_pch_SteamVR_MaxRecommendedResolution_Int32 = "maxRecommendedResolution"; - static const char * const k_pch_SteamVR_MotionSmoothing_Bool = "motionSmoothing"; - static const char * const k_pch_SteamVR_MotionSmoothingOverride_Int32 = "motionSmoothingOverride"; - static const char * const k_pch_SteamVR_FramesToThrottle_Int32 = "framesToThrottle"; - static const char * const k_pch_SteamVR_AdditionalFramesToPredict_Int32 = "additionalFramesToPredict"; - static const char * const k_pch_SteamVR_DisableAsyncReprojection_Bool = "disableAsync"; - static const char * const k_pch_SteamVR_ForceFadeOnBadTracking_Bool = "forceFadeOnBadTracking"; - static const char * const k_pch_SteamVR_DefaultMirrorView_Int32 = "mirrorView"; - static const char * const k_pch_SteamVR_ShowLegacyMirrorView_Bool = "showLegacyMirrorView"; - static const char * const k_pch_SteamVR_MirrorViewVisibility_Bool = "showMirrorView"; - static const char * const k_pch_SteamVR_MirrorViewDisplayMode_Int32 = "mirrorViewDisplayMode"; - static const char * const k_pch_SteamVR_MirrorViewEye_Int32 = "mirrorViewEye"; - static const char * const k_pch_SteamVR_MirrorViewGeometry_String = "mirrorViewGeometry"; - static const char * const k_pch_SteamVR_MirrorViewGeometryMaximized_String = "mirrorViewGeometryMaximized"; - static const char * const k_pch_SteamVR_PerfGraphVisibility_Bool = "showPerfGraph"; - static const char * const k_pch_SteamVR_StartMonitorFromAppLaunch = "startMonitorFromAppLaunch"; - static const char * const k_pch_SteamVR_StartCompositorFromAppLaunch_Bool = "startCompositorFromAppLaunch"; - static const char * const k_pch_SteamVR_StartDashboardFromAppLaunch_Bool = "startDashboardFromAppLaunch"; - static const char * const k_pch_SteamVR_StartOverlayAppsFromDashboard_Bool = "startOverlayAppsFromDashboard"; - static const char * const k_pch_SteamVR_EnableHomeApp = "enableHomeApp"; - static const char * const k_pch_SteamVR_CycleBackgroundImageTimeSec_Int32 = "CycleBackgroundImageTimeSec"; - static const char * const k_pch_SteamVR_RetailDemo_Bool = "retailDemo"; - static const char * const k_pch_SteamVR_IpdOffset_Float = "ipdOffset"; - static const char * const k_pch_SteamVR_AllowSupersampleFiltering_Bool = "allowSupersampleFiltering"; - static const char * const k_pch_SteamVR_SupersampleManualOverride_Bool = "supersampleManualOverride"; - static const char * const k_pch_SteamVR_EnableLinuxVulkanAsync_Bool = "enableLinuxVulkanAsync"; - static const char * const k_pch_SteamVR_AllowDisplayLockedMode_Bool = "allowDisplayLockedMode"; - static const char * const k_pch_SteamVR_HaveStartedTutorialForNativeChaperoneDriver_Bool = "haveStartedTutorialForNativeChaperoneDriver"; - static const char * const k_pch_SteamVR_ForceWindows32bitVRMonitor = "forceWindows32BitVRMonitor"; - static const char * const k_pch_SteamVR_DebugInputBinding = "debugInputBinding"; - static const char * const k_pch_SteamVR_DoNotFadeToGrid = "doNotFadeToGrid"; - static const char * const k_pch_SteamVR_RenderCameraMode = "renderCameraMode"; - static const char * const k_pch_SteamVR_EnableSharedResourceJournaling = "enableSharedResourceJournaling"; - static const char * const k_pch_SteamVR_EnableSafeMode = "enableSafeMode"; - static const char * const k_pch_SteamVR_PreferredRefreshRate = "preferredRefreshRate"; - static const char * const k_pch_SteamVR_LastVersionNotice = "lastVersionNotice"; - static const char * const k_pch_SteamVR_LastVersionNoticeDate = "lastVersionNoticeDate"; - static const char * const k_pch_SteamVR_HmdDisplayColorGainR_Float = "hmdDisplayColorGainR"; - static const char * const k_pch_SteamVR_HmdDisplayColorGainG_Float = "hmdDisplayColorGainG"; - static const char * const k_pch_SteamVR_HmdDisplayColorGainB_Float = "hmdDisplayColorGainB"; - static const char * const k_pch_SteamVR_CustomIconStyle_String = "customIconStyle"; - static const char * const k_pch_SteamVR_CustomOffIconStyle_String = "customOffIconStyle"; - static const char * const k_pch_SteamVR_CustomIconForceUpdate_String = "customIconForceUpdate"; - static const char * const k_pch_SteamVR_AllowGlobalActionSetPriority = "globalActionSetPriority"; - static const char * const k_pch_SteamVR_OverlayRenderQuality = "overlayRenderQuality_2"; - static const char * const k_pch_SteamVR_BlockOculusSDKOnOpenVRLaunchOption_Bool = "blockOculusSDKOnOpenVRLaunchOption"; - static const char * const k_pch_SteamVR_BlockOculusSDKOnAllLaunches_Bool = "blockOculusSDKOnAllLaunches"; - static const char * const k_pch_SteamVR_HDCPLegacyCompatibility_Bool = "hdcp14legacyCompatibility"; - static const char * const k_pch_SteamVR_UsePrism_Bool = "usePrism"; - - //----------------------------------------------------------------------------- - // direct mode keys - static const char * const k_pch_DirectMode_Section = "direct_mode"; - static const char * const k_pch_DirectMode_Enable_Bool = "enable"; - static const char * const k_pch_DirectMode_Count_Int32 = "count"; - static const char * const k_pch_DirectMode_EdidVid_Int32 = "edidVid"; - static const char * const k_pch_DirectMode_EdidPid_Int32 = "edidPid"; - - //----------------------------------------------------------------------------- - // lighthouse keys - static const char * const k_pch_Lighthouse_Section = "driver_lighthouse"; - static const char * const k_pch_Lighthouse_DisableIMU_Bool = "disableimu"; - static const char * const k_pch_Lighthouse_DisableIMUExceptHMD_Bool = "disableimuexcepthmd"; - static const char * const k_pch_Lighthouse_UseDisambiguation_String = "usedisambiguation"; - static const char * const k_pch_Lighthouse_DisambiguationDebug_Int32 = "disambiguationdebug"; - static const char * const k_pch_Lighthouse_PrimaryBasestation_Int32 = "primarybasestation"; - static const char * const k_pch_Lighthouse_DBHistory_Bool = "dbhistory"; - static const char * const k_pch_Lighthouse_EnableBluetooth_Bool = "enableBluetooth"; - static const char * const k_pch_Lighthouse_PowerManagedBaseStations_String = "PowerManagedBaseStations"; - static const char * const k_pch_Lighthouse_PowerManagedBaseStations2_String = "PowerManagedBaseStations2"; - static const char * const k_pch_Lighthouse_InactivityTimeoutForBaseStations_Int32 = "InactivityTimeoutForBaseStations"; - static const char * const k_pch_Lighthouse_EnableImuFallback_Bool = "enableImuFallback"; - - //----------------------------------------------------------------------------- - // null keys - static const char * const k_pch_Null_Section = "driver_null"; - static const char * const k_pch_Null_SerialNumber_String = "serialNumber"; - static const char * const k_pch_Null_ModelNumber_String = "modelNumber"; - static const char * const k_pch_Null_WindowX_Int32 = "windowX"; - static const char * const k_pch_Null_WindowY_Int32 = "windowY"; - static const char * const k_pch_Null_WindowWidth_Int32 = "windowWidth"; - static const char * const k_pch_Null_WindowHeight_Int32 = "windowHeight"; - static const char * const k_pch_Null_RenderWidth_Int32 = "renderWidth"; - static const char * const k_pch_Null_RenderHeight_Int32 = "renderHeight"; - static const char * const k_pch_Null_SecondsFromVsyncToPhotons_Float = "secondsFromVsyncToPhotons"; - static const char * const k_pch_Null_DisplayFrequency_Float = "displayFrequency"; - - //----------------------------------------------------------------------------- - // Windows MR keys - static const char * const k_pch_WindowsMR_Section = "driver_holographic"; - - //----------------------------------------------------------------------------- - // user interface keys - static const char * const k_pch_UserInterface_Section = "userinterface"; - static const char * const k_pch_UserInterface_StatusAlwaysOnTop_Bool = "StatusAlwaysOnTop"; - static const char * const k_pch_UserInterface_MinimizeToTray_Bool = "MinimizeToTray"; - static const char * const k_pch_UserInterface_HidePopupsWhenStatusMinimized_Bool = "HidePopupsWhenStatusMinimized"; - static const char * const k_pch_UserInterface_Screenshots_Bool = "screenshots"; - static const char * const k_pch_UserInterface_ScreenshotType_Int = "screenshotType"; - - //----------------------------------------------------------------------------- - // notification keys - static const char * const k_pch_Notifications_Section = "notifications"; - static const char * const k_pch_Notifications_DoNotDisturb_Bool = "DoNotDisturb"; - - //----------------------------------------------------------------------------- - // keyboard keys - static const char * const k_pch_Keyboard_Section = "keyboard"; - static const char * const k_pch_Keyboard_TutorialCompletions = "TutorialCompletions"; - static const char * const k_pch_Keyboard_ScaleX = "ScaleX"; - static const char * const k_pch_Keyboard_ScaleY = "ScaleY"; - static const char * const k_pch_Keyboard_OffsetLeftX = "OffsetLeftX"; - static const char * const k_pch_Keyboard_OffsetRightX = "OffsetRightX"; - static const char * const k_pch_Keyboard_OffsetY = "OffsetY"; - static const char * const k_pch_Keyboard_Smoothing = "Smoothing"; - - //----------------------------------------------------------------------------- - // perf keys - static const char * const k_pch_Perf_Section = "perfcheck"; - static const char * const k_pch_Perf_PerfGraphInHMD_Bool = "perfGraphInHMD"; - static const char * const k_pch_Perf_AllowTimingStore_Bool = "allowTimingStore"; - static const char * const k_pch_Perf_SaveTimingsOnExit_Bool = "saveTimingsOnExit"; - static const char * const k_pch_Perf_TestData_Float = "perfTestData"; - static const char * const k_pch_Perf_GPUProfiling_Bool = "GPUProfiling"; - - //----------------------------------------------------------------------------- - // collision bounds keys - static const char * const k_pch_CollisionBounds_Section = "collisionBounds"; - static const char * const k_pch_CollisionBounds_Style_Int32 = "CollisionBoundsStyle"; - static const char * const k_pch_CollisionBounds_GroundPerimeterOn_Bool = "CollisionBoundsGroundPerimeterOn"; - static const char * const k_pch_CollisionBounds_CenterMarkerOn_Bool = "CollisionBoundsCenterMarkerOn"; - static const char * const k_pch_CollisionBounds_PlaySpaceOn_Bool = "CollisionBoundsPlaySpaceOn"; - static const char * const k_pch_CollisionBounds_FadeDistance_Float = "CollisionBoundsFadeDistance"; - static const char * const k_pch_CollisionBounds_WallHeight_Float = "CollisionBoundsWallHeight"; - static const char * const k_pch_CollisionBounds_ColorGammaR_Int32 = "CollisionBoundsColorGammaR"; - static const char * const k_pch_CollisionBounds_ColorGammaG_Int32 = "CollisionBoundsColorGammaG"; - static const char * const k_pch_CollisionBounds_ColorGammaB_Int32 = "CollisionBoundsColorGammaB"; - static const char * const k_pch_CollisionBounds_ColorGammaA_Int32 = "CollisionBoundsColorGammaA"; - static const char * const k_pch_CollisionBounds_EnableDriverImport = "enableDriverBoundsImport"; - - //----------------------------------------------------------------------------- - // camera keys - static const char * const k_pch_Camera_Section = "camera"; - static const char * const k_pch_Camera_EnableCamera_Bool = "enableCamera"; - static const char * const k_pch_Camera_ShowOnController_Bool = "showOnController"; - static const char * const k_pch_Camera_EnableCameraForCollisionBounds_Bool = "enableCameraForCollisionBounds"; - static const char * const k_pch_Camera_RoomView_Int32 = "roomView"; - static const char * const k_pch_Camera_BoundsColorGammaR_Int32 = "cameraBoundsColorGammaR"; - static const char * const k_pch_Camera_BoundsColorGammaG_Int32 = "cameraBoundsColorGammaG"; - static const char * const k_pch_Camera_BoundsColorGammaB_Int32 = "cameraBoundsColorGammaB"; - static const char * const k_pch_Camera_BoundsColorGammaA_Int32 = "cameraBoundsColorGammaA"; - static const char * const k_pch_Camera_BoundsStrength_Int32 = "cameraBoundsStrength"; - static const char * const k_pch_Camera_RoomViewStyle_Int32 = "roomViewStyle"; - - //----------------------------------------------------------------------------- - // audio keys - static const char * const k_pch_audio_Section = "audio"; - static const char * const k_pch_audio_SetOsDefaultPlaybackDevice_Bool = "setOsDefaultPlaybackDevice"; - static const char * const k_pch_audio_EnablePlaybackDeviceOverride_Bool = "enablePlaybackDeviceOverride"; - static const char * const k_pch_audio_PlaybackDeviceOverride_String = "playbackDeviceOverride"; - static const char * const k_pch_audio_PlaybackDeviceOverrideName_String = "playbackDeviceOverrideName"; - static const char * const k_pch_audio_SetOsDefaultRecordingDevice_Bool = "setOsDefaultRecordingDevice"; - static const char * const k_pch_audio_EnableRecordingDeviceOverride_Bool = "enableRecordingDeviceOverride"; - static const char * const k_pch_audio_RecordingDeviceOverride_String = "recordingDeviceOverride"; - static const char * const k_pch_audio_RecordingDeviceOverrideName_String = "recordingDeviceOverrideName"; - static const char * const k_pch_audio_EnablePlaybackMirror_Bool = "enablePlaybackMirror"; - static const char * const k_pch_audio_PlaybackMirrorDevice_String = "playbackMirrorDevice"; - static const char * const k_pch_audio_PlaybackMirrorDeviceName_String = "playbackMirrorDeviceName"; - static const char * const k_pch_audio_OldPlaybackMirrorDevice_String = "onPlaybackMirrorDevice"; - static const char * const k_pch_audio_ActiveMirrorDevice_String = "activePlaybackMirrorDevice"; - static const char * const k_pch_audio_EnablePlaybackMirrorIndependentVolume_Bool = "enablePlaybackMirrorIndependentVolume"; - static const char * const k_pch_audio_LastHmdPlaybackDeviceId_String = "lastHmdPlaybackDeviceId"; - static const char * const k_pch_audio_VIVEHDMIGain = "viveHDMIGain"; - static const char * const k_pch_audio_DualSpeakerAndJackOutput_Bool = "dualSpeakerAndJackOutput"; - static const char * const k_pch_audio_MuteMicMonitor_Bool = "muteMicMonitor"; - - //----------------------------------------------------------------------------- - // power management keys - static const char * const k_pch_Power_Section = "power"; - static const char * const k_pch_Power_PowerOffOnExit_Bool = "powerOffOnExit"; - static const char * const k_pch_Power_TurnOffScreensTimeout_Float = "turnOffScreensTimeout"; - static const char * const k_pch_Power_TurnOffControllersTimeout_Float = "turnOffControllersTimeout"; - static const char * const k_pch_Power_ReturnToWatchdogTimeout_Float = "returnToWatchdogTimeout"; - static const char * const k_pch_Power_AutoLaunchSteamVROnButtonPress = "autoLaunchSteamVROnButtonPress"; - static const char * const k_pch_Power_PauseCompositorOnStandby_Bool = "pauseCompositorOnStandby"; - - //----------------------------------------------------------------------------- - // dashboard keys - static const char * const k_pch_Dashboard_Section = "dashboard"; - static const char * const k_pch_Dashboard_EnableDashboard_Bool = "enableDashboard"; - static const char * const k_pch_Dashboard_ArcadeMode_Bool = "arcadeMode"; - static const char * const k_pch_Dashboard_Position = "position"; - static const char * const k_pch_Dashboard_DesktopScale = "desktopScale"; - static const char * const k_pch_Dashboard_DashboardScale = "dashboardScale"; - static const char * const k_pch_Dashboard_UseStandaloneSystemLayer = "standaloneSystemLayer"; - - //----------------------------------------------------------------------------- - // model skin keys - static const char * const k_pch_modelskin_Section = "modelskins"; - - //----------------------------------------------------------------------------- - // driver keys - These could be checked in any driver_ section - static const char * const k_pch_Driver_Enable_Bool = "enable"; - static const char * const k_pch_Driver_BlockedBySafemode_Bool = "blocked_by_safe_mode"; - static const char * const k_pch_Driver_LoadPriority_Int32 = "loadPriority"; - - //----------------------------------------------------------------------------- - // web interface keys - static const char* const k_pch_WebInterface_Section = "WebInterface"; - - //----------------------------------------------------------------------------- - // vrwebhelper keys - static const char* const k_pch_VRWebHelper_Section = "VRWebHelper"; - static const char* const k_pch_VRWebHelper_DebuggerEnabled_Bool = "DebuggerEnabled"; - static const char* const k_pch_VRWebHelper_DebuggerPort_Int32 = "DebuggerPort"; - - //----------------------------------------------------------------------------- - // tracking overrides - keys are device paths, values are the device paths their - // tracking/pose information overrides - static const char* const k_pch_TrackingOverride_Section = "TrackingOverrides"; - - //----------------------------------------------------------------------------- - // per-app keys - the section name for these is the app key itself. Some of these are prefixed by the controller type - static const char* const k_pch_App_BindingAutosaveURLSuffix_String = "AutosaveURL"; - static const char* const k_pch_App_BindingLegacyAPISuffix_String = "_legacy"; - static const char* const k_pch_App_BindingSteamVRInputAPISuffix_String = "_steamvrinput"; - static const char* const k_pch_App_BindingCurrentURLSuffix_String = "CurrentURL"; - static const char* const k_pch_App_BindingPreviousURLSuffix_String = "PreviousURL"; - static const char* const k_pch_App_NeedToUpdateAutosaveSuffix_Bool = "NeedToUpdateAutosave"; - static const char* const k_pch_App_DominantHand_Int32 = "DominantHand"; - static const char* const k_pch_App_BlockOculusSDK_Bool = "blockOculusSDK"; - - //----------------------------------------------------------------------------- - // configuration for trackers - static const char * const k_pch_Trackers_Section = "trackers"; - - //----------------------------------------------------------------------------- - // configuration for desktop UI windows - static const char * const k_pch_DesktopUI_Section = "DesktopUI"; - - //----------------------------------------------------------------------------- - // Last known keys for righting recovery - static const char * const k_pch_LastKnown_Section = "LastKnown"; - static const char* const k_pch_LastKnown_HMDManufacturer_String = "HMDManufacturer"; - static const char* const k_pch_LastKnown_HMDModel_String = "HMDModel"; - - //----------------------------------------------------------------------------- - // Dismissed warnings - static const char * const k_pch_DismissedWarnings_Section = "DismissedWarnings"; - - //----------------------------------------------------------------------------- - // Input Settings - static const char * const k_pch_Input_Section = "input"; - static const char* const k_pch_Input_LeftThumbstickRotation_Float = "leftThumbstickRotation"; - static const char* const k_pch_Input_RightThumbstickRotation_Float = "rightThumbstickRotation"; - static const char* const k_pch_Input_ThumbstickDeadzone_Float = "thumbstickDeadzone"; - - //----------------------------------------------------------------------------- - // Log of GPU performance - static const char * const k_pch_GpuSpeed_Section = "GpuSpeed"; - -} // namespace vr - -// iservertrackeddevicedriver.h - -namespace vr -{ - - -struct DriverPoseQuaternion_t -{ - double w, x, y, z; -}; - -struct DriverPose_t -{ - /* Time offset of this pose, in seconds from the actual time of the pose, - * relative to the time of the PoseUpdated() call made by the driver. - */ - double poseTimeOffset; - - /* Generally, the pose maintained by a driver - * is in an inertial coordinate system different - * from the world system of x+ right, y+ up, z+ back. - * Also, the driver is not usually tracking the "head" position, - * but instead an internal IMU or another reference point in the HMD. - * The following two transforms transform positions and orientations - * to app world space from driver world space, - * and to HMD head space from driver local body space. - * - * We maintain the driver pose state in its internal coordinate system, - * so we can do the pose prediction math without having to - * use angular acceleration. A driver's angular acceleration is generally not measured, - * and is instead calculated from successive samples of angular velocity. - * This leads to a noisy angular acceleration values, which are also - * lagged due to the filtering required to reduce noise to an acceptable level. - */ - vr::HmdQuaternion_t qWorldFromDriverRotation; - double vecWorldFromDriverTranslation[ 3 ]; - - vr::HmdQuaternion_t qDriverFromHeadRotation; - double vecDriverFromHeadTranslation[ 3 ]; - - /* State of driver pose, in meters and radians. */ - /* Position of the driver tracking reference in driver world space - * +[0] (x) is right - * +[1] (y) is up - * -[2] (z) is forward - */ - double vecPosition[ 3 ]; - - /* Velocity of the pose in meters/second */ - double vecVelocity[ 3 ]; - - /* Acceleration of the pose in meters/second */ - double vecAcceleration[ 3 ]; - - /* Orientation of the tracker, represented as a quaternion */ - vr::HmdQuaternion_t qRotation; - - /* Angular velocity of the pose in axis-angle - * representation. The direction is the angle of - * rotation and the magnitude is the angle around - * that axis in radians/second. */ - double vecAngularVelocity[ 3 ]; - - /* Angular acceleration of the pose in axis-angle - * representation. The direction is the angle of - * rotation and the magnitude is the angle around - * that axis in radians/second^2. */ - double vecAngularAcceleration[ 3 ]; - - ETrackingResult result; - - bool poseIsValid; - bool willDriftInYaw; - bool shouldApplyHeadModel; - bool deviceIsConnected; -}; - - -// ---------------------------------------------------------------------------------------------- -// Purpose: Represents a single tracked device in a driver -// ---------------------------------------------------------------------------------------------- -class ITrackedDeviceServerDriver -{ -public: - - // ------------------------------------ - // Management Methods - // ------------------------------------ - /** This is called before an HMD is returned to the application. It will always be - * called before any display or tracking methods. Memory and processor use by the - * ITrackedDeviceServerDriver object should be kept to a minimum until it is activated. - * The pose listener is guaranteed to be valid until Deactivate is called, but - * should not be used after that point. */ - virtual EVRInitError Activate( uint32_t unObjectId ) = 0; - - /** This is called when The VR system is switching from this Hmd being the active display - * to another Hmd being the active display. The driver should clean whatever memory - * and thread use it can when it is deactivated */ - virtual void Deactivate() = 0; - - /** Handles a request from the system to put this device into standby mode. What that means is defined per-device. */ - virtual void EnterStandby() = 0; - - /** Requests a component interface of the driver for device-specific functionality. The driver should return NULL - * if the requested interface or version is not supported. */ - virtual void *GetComponent( const char *pchComponentNameAndVersion ) = 0; - - /** A VR Client has made this debug request of the driver. The set of valid requests is entirely - * up to the driver and the client to figure out, as is the format of the response. Responses that - * exceed the length of the supplied buffer should be truncated and null terminated */ - virtual void DebugRequest( const char *pchRequest, char *pchResponseBuffer, uint32_t unResponseBufferSize ) = 0; - - // ------------------------------------ - // Tracking Methods - // ------------------------------------ - virtual DriverPose_t GetPose() = 0; -}; - - - -static const char *ITrackedDeviceServerDriver_Version = "ITrackedDeviceServerDriver_005"; - -} - -// ivrdisplaycomponent.h - -namespace vr -{ - - - // ---------------------------------------------------------------------------------------------- - // Purpose: The display component on a single tracked device - // ---------------------------------------------------------------------------------------------- - class IVRDisplayComponent - { - public: - - // ------------------------------------ - // Display Methods - // ------------------------------------ - - /** Size and position that the window needs to be on the VR display. */ - virtual void GetWindowBounds( int32_t *pnX, int32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0; - - /** Returns true if the display is extending the desktop. */ - virtual bool IsDisplayOnDesktop( ) = 0; - - /** Returns true if the display is real and not a fictional display. */ - virtual bool IsDisplayRealDisplay( ) = 0; - - /** Suggested size for the intermediate render target that the distortion pulls from. */ - virtual void GetRecommendedRenderTargetSize( uint32_t *pnWidth, uint32_t *pnHeight ) = 0; - - /** Gets the viewport in the frame buffer to draw the output of the distortion into */ - virtual void GetEyeOutputViewport( EVREye eEye, uint32_t *pnX, uint32_t *pnY, uint32_t *pnWidth, uint32_t *pnHeight ) = 0; - - /** The components necessary to build your own projection matrix in case your - * application is doing something fancy like infinite Z */ - virtual void GetProjectionRaw( EVREye eEye, float *pfLeft, float *pfRight, float *pfTop, float *pfBottom ) = 0; - - /** Returns 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. */ - virtual DistortionCoordinates_t ComputeDistortion( EVREye eEye, float fU, float fV ) = 0; - - }; - - static const char *IVRDisplayComponent_Version = "IVRDisplayComponent_002"; - -} - -// ivrdriverdirectmodecomponent.h - -namespace vr -{ - enum VRSwapTextureFlag - { - // Specify that the shared texture resource was created with the SHARED_NTHANDLE option (Windows) - VRSwapTextureFlag_Shared_NTHandle = 1 << 0, - }; - - // ---------------------------------------------------------------------------------------------- - // Purpose: This component is used for drivers that implement direct mode entirely on their own - // without allowing the VR Compositor to own the window/device. - // ---------------------------------------------------------------------------------------------- - class IVRDriverDirectModeComponent - { - public: - - // ----------------------------------- - // Direct mode methods - // ----------------------------------- - - struct SwapTextureSetDesc_t - { - uint32_t nWidth; - uint32_t nHeight; - uint32_t nFormat; - uint32_t nSampleCount; - }; - - struct SwapTextureSet_t - { - vr::SharedTextureHandle_t rSharedTextureHandles[ 3 ]; - uint32_t unTextureFlags; - }; - - /** Called to allocate textures for applications to render into. One of these per eye will be passed back to SubmitLayer each frame. */ - virtual void CreateSwapTextureSet( uint32_t unPid, const SwapTextureSetDesc_t *pSwapTextureSetDesc, SwapTextureSet_t *pOutSwapTextureSet ) {} - - /** Used to textures created using CreateSwapTextureSet. Only one of the set's handles needs to be used to destroy the entire set. */ - virtual void DestroySwapTextureSet( vr::SharedTextureHandle_t sharedTextureHandle ) {} - - /** Used to purge all texture sets for a given process. */ - virtual void DestroyAllSwapTextureSets( uint32_t unPid ) {} - - /** After Present returns, calls this to get the next index to use for rendering. */ - virtual void GetNextSwapTextureSetIndex( vr::SharedTextureHandle_t sharedTextureHandles[ 2 ], uint32_t( *pIndices )[ 2 ] ) {} - - /** Call once per layer to draw for this frame. One shared texture handle per eye. Textures must be created - * using CreateSwapTextureSet and should be alternated per frame. Call Present once all layers have been submitted. */ - struct SubmitLayerPerEye_t - { - // Shared texture handles (depth not always provided). - vr::SharedTextureHandle_t hTexture, hDepthTexture; - - // Valid region of provided texture (and depth). - vr::VRTextureBounds_t bounds; - - // Projection matrix used to render the depth buffer. - vr::HmdMatrix44_t mProjection; - - // Hmd pose used to render this layer. - vr::HmdMatrix34_t mHmdPose; - }; - virtual void SubmitLayer( const SubmitLayerPerEye_t( &perEye )[ 2 ] ) {} - - /** Submits queued layers for display. */ - virtual void Present( vr::SharedTextureHandle_t syncTexture ) {} - - /** Called after Present to allow driver to take more time until vsync after they've successfully acquired the sync texture in Present.*/ - virtual void PostPresent() {} - - /** Called to get additional frame timing stats from driver. Check m_nSize for versioning (new members will be added to end only). */ - virtual void GetFrameTiming( DriverDirectMode_FrameTiming *pFrameTiming ) {} - }; - - static const char *IVRDriverDirectModeComponent_Version = "IVRDriverDirectModeComponent_007"; - -} - -// ivrcameracomponent.h - -namespace vr -{ - //----------------------------------------------------------------------------- - //----------------------------------------------------------------------------- - class ICameraVideoSinkCallback - { - public: - virtual void OnCameraVideoSinkCallback() = 0; - }; - - // ---------------------------------------------------------------------------------------------- - // Purpose: The camera on a single tracked device - // ---------------------------------------------------------------------------------------------- - class IVRCameraComponent - { - public: - // ------------------------------------ - // Camera Methods - // ------------------------------------ - virtual bool GetCameraFrameDimensions( vr::ECameraVideoStreamFormat nVideoStreamFormat, uint32_t *pWidth, uint32_t *pHeight ) = 0; - virtual bool GetCameraFrameBufferingRequirements( int *pDefaultFrameQueueSize, uint32_t *pFrameBufferDataSize ) = 0; - virtual bool SetCameraFrameBuffering( int nFrameBufferCount, void **ppFrameBuffers, uint32_t nFrameBufferDataSize ) = 0; - virtual bool SetCameraVideoStreamFormat( vr::ECameraVideoStreamFormat nVideoStreamFormat ) = 0; - virtual vr::ECameraVideoStreamFormat GetCameraVideoStreamFormat() = 0; - virtual bool StartVideoStream() = 0; - virtual void StopVideoStream() = 0; - virtual bool IsVideoStreamActive( bool *pbPaused, float *pflElapsedTime ) = 0; - virtual const vr::CameraVideoStreamFrame_t *GetVideoStreamFrame() = 0; - virtual void ReleaseVideoStreamFrame( const vr::CameraVideoStreamFrame_t *pFrameImage ) = 0; - virtual bool SetAutoExposure( bool bEnable ) = 0; - virtual bool PauseVideoStream() = 0; - virtual bool ResumeVideoStream() = 0; - virtual bool GetCameraDistortion( uint32_t nCameraIndex, float flInputU, float flInputV, float *pflOutputU, float *pflOutputV ) = 0; - virtual bool GetCameraProjection( uint32_t nCameraIndex, vr::EVRTrackedCameraFrameType eFrameType, float flZNear, float flZFar, vr::HmdMatrix44_t *pProjection ) = 0; - virtual bool SetFrameRate( int nISPFrameRate, int nSensorFrameRate ) = 0; - virtual bool SetCameraVideoSinkCallback( vr::ICameraVideoSinkCallback *pCameraVideoSinkCallback ) = 0; - virtual bool GetCameraCompatibilityMode( vr::ECameraCompatibilityMode *pCameraCompatibilityMode ) = 0; - virtual bool SetCameraCompatibilityMode( vr::ECameraCompatibilityMode nCameraCompatibilityMode ) = 0; - virtual bool GetCameraFrameBounds( vr::EVRTrackedCameraFrameType eFrameType, uint32_t *pLeft, uint32_t *pTop, uint32_t *pWidth, uint32_t *pHeight ) = 0; - virtual bool GetCameraIntrinsics( uint32_t nCameraIndex, vr::EVRTrackedCameraFrameType eFrameType, HmdVector2_t *pFocalLength, HmdVector2_t *pCenter, vr::EVRDistortionFunctionType *peDistortionType, double rCoefficients[ k_unMaxDistortionFunctionParameters ] ) = 0; - }; - - static const char *IVRCameraComponent_Version = "IVRCameraComponent_003"; -} - -// itrackeddevicedriverprovider.h - -namespace vr -{ - -class ITrackedDeviceServerDriver; -struct TrackedDeviceDriverInfo_t; -struct DriverPose_t; - -/** This interface is provided by vrserver to allow the driver to notify -* the system when something changes about a device. These changes must -* not change the serial number or class of the device because those values -* are permanently associated with the device's index. */ -class IVRDriverContext -{ -public: - /** Returns the requested interface. If the interface was not available it will return NULL and fill - * out the error. */ - virtual void *GetGenericInterface( const char *pchInterfaceVersion, EVRInitError *peError = nullptr ) = 0; - - /** Returns the property container handle for this driver */ - virtual DriverHandle_t GetDriverHandle() = 0; -}; - - -/** This interface must be implemented in each driver. It will be loaded in vrserver.exe */ -class IServerTrackedDeviceProvider -{ -public: - /** initializes the driver. This will be called before any other methods are called. - * If Init returns anything other than VRInitError_None the driver DLL will be unloaded. - * - * pDriverHost will never be NULL, and will always be a pointer to a IServerDriverHost interface - * - * pchUserDriverConfigDir - The absolute path of the directory where the driver should store user - * config files. - * pchDriverInstallDir - The absolute path of the root directory for the driver. - */ - virtual EVRInitError Init( IVRDriverContext *pDriverContext ) = 0; - - /** cleans up the driver right before it is unloaded */ - virtual void Cleanup() = 0; - - /** Returns the version of the ITrackedDeviceServerDriver interface used by this driver */ - virtual const char * const *GetInterfaceVersions() = 0; - - /** Allows the driver do to some work in the main loop of the server. */ - virtual void RunFrame() = 0; - - - // ------------ Power State Functions ----------------------- // - - /** Returns true if the driver wants to block Standby mode. */ - virtual bool ShouldBlockStandbyMode() = 0; - - /** Called when the system is entering Standby mode. The driver should switch itself into whatever sort of low-power - * state it has. */ - virtual void EnterStandby() = 0; - - /** Called when the system is leaving Standby mode. The driver should switch itself back to - full operation. */ - virtual void LeaveStandby() = 0; - -}; - - -static const char *IServerTrackedDeviceProvider_Version = "IServerTrackedDeviceProvider_004"; - - - - -/** This interface must be implemented in each driver. It will be loaded in vrclient.dll */ -class IVRWatchdogProvider -{ -public: - /** initializes the driver in watchdog mode. */ - virtual EVRInitError Init( IVRDriverContext *pDriverContext ) = 0; - - /** cleans up the driver right before it is unloaded */ - virtual void Cleanup() = 0; -}; - -static const char *IVRWatchdogProvider_Version = "IVRWatchdogProvider_001"; - - - - -/** This is an optional interface drivers may implement. It will be loaded in vrcompositor.exe */ -class IVRCompositorPluginProvider -{ -public: - /** initializes the driver when used to load compositor plugins */ - virtual EVRInitError Init( IVRDriverContext *pDriverContext ) = 0; - - /** cleans up the driver right before it is unloaded */ - virtual void Cleanup() = 0; - - /** Returns the versions of interfaces used by this driver */ - virtual const char * const *GetInterfaceVersions() = 0; - - /** Requests a component interface of the driver for specific functionality. The driver should return NULL - * if the requested interface or version is not supported. */ - virtual void *GetComponent( const char *pchComponentNameAndVersion ) = 0; -}; - -static const char *IVRCompositorPluginProvider_Version = "IVRCompositorPluginProvider_001"; - -} - -// ivrproperties.h - -#include -#include - -namespace vr -{ - - /** This container is automatically created before a display redirect device is activated. - * Any properties in this container will be returned when that property is read from the HMD's - * property container. */ - static const PropertyContainerHandle_t k_ulDisplayRedirectContainer = 0x600000003; - - enum EPropertyWriteType - { - PropertyWrite_Set = 0, - PropertyWrite_Erase = 1, - PropertyWrite_SetError = 2 - }; - - struct PropertyWrite_t - { - ETrackedDeviceProperty prop; - EPropertyWriteType writeType; - ETrackedPropertyError eSetError; - void *pvBuffer; - uint32_t unBufferSize; - PropertyTypeTag_t unTag; - ETrackedPropertyError eError; - }; - - struct PropertyRead_t - { - ETrackedDeviceProperty prop; - void *pvBuffer; - uint32_t unBufferSize; - PropertyTypeTag_t unTag; - uint32_t unRequiredBufferSize; - ETrackedPropertyError eError; - }; - - -class IVRProperties -{ -public: - - /** Reads a set of properties atomically. See the PropertyReadBatch_t struct for more information. */ - virtual ETrackedPropertyError ReadPropertyBatch( PropertyContainerHandle_t ulContainerHandle, PropertyRead_t *pBatch, uint32_t unBatchEntryCount ) = 0; - - /** Writes a set of properties atomically. See the PropertyWriteBatch_t struct for more information. */ - virtual ETrackedPropertyError WritePropertyBatch( PropertyContainerHandle_t ulContainerHandle, PropertyWrite_t *pBatch, uint32_t unBatchEntryCount ) = 0; - - /** 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 */ - virtual const char *GetPropErrorNameFromEnum( ETrackedPropertyError error ) = 0; - - /** Returns a container handle given a tracked device index */ - virtual PropertyContainerHandle_t TrackedDeviceToPropertyContainer( TrackedDeviceIndex_t nDevice ) = 0; -}; - -static const char * const IVRProperties_Version = "IVRProperties_001"; - -class CVRPropertyHelpers -{ -public: - CVRPropertyHelpers( IVRProperties * pProperties ) : m_pProperties( pProperties ) {} - - /** Returns a scaler property. If the device index is not valid or the property value type does not match, - * this function will return false. */ - bool GetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); - float GetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); - int32_t GetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); - uint64_t GetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); - HmdVector2_t GetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); - HmdVector3_t GetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); - HmdVector4_t GetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); - double GetDoubleProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError = 0L ); - - /** Returns a single typed 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. */ - uint32_t GetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() void *pvBuffer, uint32_t unBufferSize, PropertyTypeTag_t *punTag, ETrackedPropertyError *pError = 0L ); - - - /** 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. */ - uint32_t GetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, ETrackedPropertyError *pError = 0L ); - - /** Returns a string property as a std::string. If the device index is not valid or the property is not a string type this function will - * return an empty string. */ - std::string GetStringProperty( vr::PropertyContainerHandle_t ulContainer, vr::ETrackedDeviceProperty prop, vr::ETrackedPropertyError *peError = nullptr ); - - /** Reads a std::vector of data from a property. */ - template< typename T> - ETrackedPropertyError GetPropertyVector( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, PropertyTypeTag_t unExpectedTag, std::vector *pvecResults ); - - /** Sets a scaler property. The new value will be returned on any subsequent call to get this property in any process. */ - ETrackedPropertyError SetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, bool bNewValue ); - ETrackedPropertyError SetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, float fNewValue ); - ETrackedPropertyError SetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, int32_t nNewValue ); - ETrackedPropertyError SetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, uint64_t ulNewValue ); - ETrackedPropertyError SetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector2_t & vNewValue ); - ETrackedPropertyError SetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector3_t & vNewValue ); - ETrackedPropertyError SetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector4_t & vNewValue ); - ETrackedPropertyError SetDoubleProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, double vNewValue ); - - /** Sets a string property. The new value will be returned on any subsequent call to get this property in any process. */ - ETrackedPropertyError SetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const char *pchNewValue ); - - /** Sets a single typed property. The new value will be returned on any subsequent call to get this property in any process. */ - ETrackedPropertyError SetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, void *pvNewValue, uint32_t unNewValueSize, PropertyTypeTag_t unTag ); - - /** Sets the error return value for a property. This value will be returned on all subsequent requests to get the property */ - ETrackedPropertyError SetPropertyError( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError eError ); - - /** Clears any value or error set for the property. */ - ETrackedPropertyError EraseProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop ); - - /* Turns a device index into a property container handle. */ - PropertyContainerHandle_t TrackedDeviceToPropertyContainer( TrackedDeviceIndex_t nDevice ) { return m_pProperties->TrackedDeviceToPropertyContainer( nDevice ); } - - /** Sets a std::vector of typed data to a property. */ - template< typename T> - ETrackedPropertyError SetPropertyVector( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, PropertyTypeTag_t unExpectedTag, std::vector *vecProperties ); - - /** Returns true if the specified property is set on the specified container */ - bool IsPropertySet( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, ETrackedPropertyError *peError = nullptr ); -private: - template - T GetPropertyHelper( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError, T bDefault, PropertyTypeTag_t unTypeTag ); - - IVRProperties *m_pProperties; -}; - - -inline uint32_t CVRPropertyHelpers::GetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() void *pvBuffer, uint32_t unBufferSize, PropertyTypeTag_t *punTag, ETrackedPropertyError *pError ) -{ - PropertyRead_t batch; - batch.prop = prop; - batch.pvBuffer = pvBuffer; - batch.unBufferSize = unBufferSize; - - m_pProperties->ReadPropertyBatch( ulContainerHandle, &batch, 1 ); - - if ( pError ) - { - *pError = batch.eError; - } - - if ( punTag ) - { - *punTag = batch.unTag; - } - - return batch.unRequiredBufferSize; -} - - -/** Sets a single typed property. The new value will be returned on any subsequent call to get this property in any process. */ -inline ETrackedPropertyError CVRPropertyHelpers::SetProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, void *pvNewValue, uint32_t unNewValueSize, PropertyTypeTag_t unTag ) -{ - PropertyWrite_t batch; - batch.writeType = PropertyWrite_Set; - batch.prop = prop; - batch.pvBuffer = pvNewValue; - batch.unBufferSize = unNewValueSize; - batch.unTag = unTag; - - m_pProperties->WritePropertyBatch( ulContainerHandle, &batch, 1 ); - - return batch.eError; -} - - -/** 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. */ -inline uint32_t CVRPropertyHelpers::GetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize, ETrackedPropertyError *pError ) -{ - PropertyTypeTag_t unTag; - ETrackedPropertyError error; - uint32_t unRequiredSize = GetProperty( ulContainerHandle, prop, pchValue, unBufferSize, &unTag, &error ); - if ( unTag != k_unStringPropertyTag && error == TrackedProp_Success ) - { - error = TrackedProp_WrongDataType; - } - - if ( pError ) - { - *pError = error; - } - - if ( error != TrackedProp_Success ) - { - if ( pchValue && unBufferSize ) - { - *pchValue = '\0'; - } - } - - return unRequiredSize; -} - - -/** Returns a string property as a std::string. If the device index is not valid or the property is not a string type this function will -* return an empty string. */ -inline std::string CVRPropertyHelpers::GetStringProperty( vr::PropertyContainerHandle_t ulContainer, vr::ETrackedDeviceProperty prop, vr::ETrackedPropertyError *peError ) -{ - char buf[1024]; - vr::ETrackedPropertyError err; - uint32_t unRequiredBufferLen = GetStringProperty( ulContainer, prop, buf, sizeof(buf), &err ); - - std::string sResult; - - if ( err == TrackedProp_Success ) - { - sResult = buf; - } - else if ( err == TrackedProp_BufferTooSmall ) - { - char *pchBuffer = new char[unRequiredBufferLen]; - unRequiredBufferLen = GetStringProperty( ulContainer, prop, pchBuffer, unRequiredBufferLen, &err ); - sResult = pchBuffer; - delete[] pchBuffer; - } - - if ( peError ) - { - *peError = err; - } - - return sResult; -} - - -/** Sets a string property. The new value will be returned on any subsequent call to get this property in any process. */ -inline ETrackedPropertyError CVRPropertyHelpers::SetStringProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const char *pchNewValue ) -{ - if ( !pchNewValue ) - return TrackedProp_InvalidOperation; - - // this is strlen without the dependency on string.h - const char *pchCurr = pchNewValue; - while ( *pchCurr ) - { - pchCurr++; - } - - return SetProperty( ulContainerHandle, prop, (void *)pchNewValue, (uint32_t)(pchCurr - pchNewValue) + 1, k_unStringPropertyTag ); -} - - -template -inline T CVRPropertyHelpers::GetPropertyHelper( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError, T bDefault, PropertyTypeTag_t unTypeTag ) -{ - T bValue; - ETrackedPropertyError eError; - PropertyTypeTag_t unReadTag; - GetProperty( ulContainerHandle, prop, &bValue, sizeof( bValue ), &unReadTag, &eError ); - if ( unReadTag != unTypeTag && eError == TrackedProp_Success ) - { - eError = TrackedProp_WrongDataType; - }; - - if ( pError ) - *pError = eError; - if ( eError != TrackedProp_Success ) - { - return bDefault; - } - else - { - return bValue; - } -} - - -inline bool CVRPropertyHelpers::GetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) -{ - return GetPropertyHelper( ulContainerHandle, prop, pError, false, k_unBoolPropertyTag ); -} - -inline float CVRPropertyHelpers::GetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) -{ - return GetPropertyHelper( ulContainerHandle, prop, pError, 0.f, k_unFloatPropertyTag ); -} - -inline double CVRPropertyHelpers::GetDoubleProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) -{ - return GetPropertyHelper( ulContainerHandle, prop, pError, 0., k_unDoublePropertyTag ); -} - -inline int32_t CVRPropertyHelpers::GetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) -{ - return GetPropertyHelper( ulContainerHandle, prop, pError, 0, k_unInt32PropertyTag ); -} - -inline uint64_t CVRPropertyHelpers::GetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) -{ - return GetPropertyHelper( ulContainerHandle, prop, pError, 0, k_unUint64PropertyTag ); -} - -inline HmdVector2_t CVRPropertyHelpers::GetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) -{ - HmdVector2_t defaultval = { 0 }; - return GetPropertyHelper( ulContainerHandle, prop, pError, defaultval, k_unHmdVector2PropertyTag ); -} - -inline HmdVector3_t CVRPropertyHelpers::GetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) -{ - HmdVector3_t defaultval = { 0 }; - return GetPropertyHelper( ulContainerHandle, prop, pError, defaultval, k_unHmdVector3PropertyTag ); -} - -inline HmdVector4_t CVRPropertyHelpers::GetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError *pError ) -{ - HmdVector4_t defaultval = { 0 }; - return GetPropertyHelper( ulContainerHandle, prop, pError, defaultval, k_unHmdVector4PropertyTag ); -} - -inline ETrackedPropertyError CVRPropertyHelpers::SetBoolProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, bool bNewValue ) -{ - return SetProperty( ulContainerHandle, prop, &bNewValue, sizeof( bNewValue ), k_unBoolPropertyTag ); -} - -inline ETrackedPropertyError CVRPropertyHelpers::SetFloatProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, float fNewValue ) -{ - return SetProperty( ulContainerHandle, prop, &fNewValue, sizeof( fNewValue ), k_unFloatPropertyTag ); -} - -inline ETrackedPropertyError CVRPropertyHelpers::SetDoubleProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, double fNewValue ) -{ - return SetProperty( ulContainerHandle, prop, &fNewValue, sizeof( fNewValue ), k_unDoublePropertyTag ); -} - -inline ETrackedPropertyError CVRPropertyHelpers::SetInt32Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, int32_t nNewValue ) -{ - return SetProperty( ulContainerHandle, prop, &nNewValue, sizeof( nNewValue ), k_unInt32PropertyTag ); -} - -inline ETrackedPropertyError CVRPropertyHelpers::SetUint64Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, uint64_t ulNewValue ) -{ - return SetProperty( ulContainerHandle, prop, &ulNewValue, sizeof( ulNewValue ), k_unUint64PropertyTag ); -} - -inline ETrackedPropertyError CVRPropertyHelpers::SetVec2Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector2_t & vNewValue ) -{ - return SetProperty( ulContainerHandle, prop, ( void * ) &vNewValue, sizeof( HmdVector2_t ), k_unHmdVector2PropertyTag ); -} - -inline ETrackedPropertyError CVRPropertyHelpers::SetVec3Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector3_t & vNewValue ) -{ - return SetProperty( ulContainerHandle, prop, ( void * ) &vNewValue, sizeof( HmdVector3_t ), k_unHmdVector3PropertyTag ); -} - -inline ETrackedPropertyError CVRPropertyHelpers::SetVec4Property( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, const HmdVector4_t & vNewValue ) -{ - return SetProperty( ulContainerHandle, prop, ( void * ) &vNewValue, sizeof( HmdVector4_t ), k_unHmdVector4PropertyTag ); -} - -/** Sets the error return value for a property. This value will be returned on all subsequent requests to get the property */ -inline ETrackedPropertyError CVRPropertyHelpers::SetPropertyError( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop, ETrackedPropertyError eError ) -{ - PropertyWrite_t batch; - batch.writeType = PropertyWrite_SetError; - batch.prop = prop; - batch.eSetError = eError; - - m_pProperties->WritePropertyBatch( ulContainerHandle, &batch, 1 ); - - return batch.eError; -} - -/** Clears any value or error set for the property. */ -inline ETrackedPropertyError CVRPropertyHelpers::EraseProperty( PropertyContainerHandle_t ulContainerHandle, ETrackedDeviceProperty prop ) -{ - PropertyWrite_t batch; - batch.writeType = PropertyWrite_Erase; - batch.prop = prop; - - m_pProperties->WritePropertyBatch( ulContainerHandle, &batch, 1 ); - - return batch.eError; - -} - -template< typename T > -ETrackedPropertyError CVRPropertyHelpers::SetPropertyVector(PropertyContainerHandle_t ulContainer, vr::ETrackedDeviceProperty prop, PropertyTypeTag_t unTag, std::vector *pvecProperties) -{ - return SetProperty( ulContainer, prop, &(*pvecProperties)[0], (uint32_t)(pvecProperties->size() * sizeof( T )), unTag ); -} - -template< typename T > -ETrackedPropertyError CVRPropertyHelpers::GetPropertyVector( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, PropertyTypeTag_t unExpectedTag, std::vector *pvecResults ) -{ - ETrackedPropertyError err; - PropertyTypeTag_t unTag; - uint32_t unNeeded; - if ( pvecResults->empty() ) - unNeeded = GetProperty( ulContainer, prop, nullptr, 0, &unTag, &err ); - else - unNeeded = GetProperty( ulContainer, prop, &(*pvecResults)[0], (uint32_t)(pvecResults->size() * sizeof( T )), &unTag, &err ); - uint32_t unFound = unNeeded / sizeof( T ); - if ( err == TrackedProp_Success ) - { - if ( unTag != unExpectedTag && unFound > 0 ) - { - return TrackedProp_WrongDataType; - } - - pvecResults->resize( unFound ); - return TrackedProp_Success; - } - else if ( err == TrackedProp_BufferTooSmall ) - { - pvecResults->resize( unFound ); - unNeeded = GetProperty( ulContainer, prop, &(*pvecResults)[0], (uint32_t)(pvecResults->size() * sizeof( T )), &unTag, &err ); - unFound = unNeeded / sizeof( T ); - - if ( err == TrackedProp_Success ) - { - if ( unTag != unExpectedTag ) - { - return TrackedProp_WrongDataType; - } - - pvecResults->resize( unFound ); - return TrackedProp_Success; - } - } - return err; -} - -inline bool CVRPropertyHelpers::IsPropertySet( PropertyContainerHandle_t ulContainer, ETrackedDeviceProperty prop, ETrackedPropertyError *peError ) -{ - ETrackedPropertyError error; - GetProperty( ulContainer, prop, nullptr, 0, nullptr, &error ); - if ( peError ) - *peError = error; - return error == TrackedProp_Success || error == TrackedProp_BufferTooSmall; -} - -} - - - -// ivrdriverinput.h - -namespace vr -{ - - typedef uint64_t VRInputComponentHandle_t; - static const VRInputComponentHandle_t k_ulInvalidInputComponentHandle = 0; - - enum EVRScalarType - { - VRScalarType_Absolute = 0, - VRScalarType_Relative = 1, - }; - - - enum EVRScalarUnits - { - VRScalarUnits_NormalizedOneSided = 0, // Value ranges from 0 to 1 - VRScalarUnits_NormalizedTwoSided = 1, // Value ranges from -1 to 1 - }; - - class IVRDriverInput - { - public: - - /** Creates a boolean input component for the device */ - virtual EVRInputError CreateBooleanComponent( PropertyContainerHandle_t ulContainer, const char *pchName, VRInputComponentHandle_t *pHandle ) = 0; - - /** Updates a boolean component */ - virtual EVRInputError UpdateBooleanComponent( VRInputComponentHandle_t ulComponent, bool bNewValue, double fTimeOffset ) = 0; - - /** Creates a scalar input component for the device */ - virtual EVRInputError CreateScalarComponent( PropertyContainerHandle_t ulContainer, const char *pchName, VRInputComponentHandle_t *pHandle, EVRScalarType eType, EVRScalarUnits eUnits ) = 0; - - /** Updates a boolean component */ - virtual EVRInputError UpdateScalarComponent( VRInputComponentHandle_t ulComponent, float fNewValue, double fTimeOffset ) = 0; - - /** Creates a haptic component for the device */ - virtual EVRInputError CreateHapticComponent( PropertyContainerHandle_t ulContainer, const char *pchName, VRInputComponentHandle_t *pHandle ) = 0; - - /** Creates a skeleton component. */ - virtual EVRInputError CreateSkeletonComponent( PropertyContainerHandle_t ulContainer, const char *pchName, const char *pchSkeletonPath, const char *pchBasePosePath, EVRSkeletalTrackingLevel eSkeletalTrackingLevel, const VRBoneTransform_t *pGripLimitTransforms, uint32_t unGripLimitTransformCount, VRInputComponentHandle_t *pHandle ) = 0; - - /** Updates a skeleton component. */ - virtual EVRInputError UpdateSkeletonComponent( VRInputComponentHandle_t ulComponent, EVRSkeletalMotionRange eMotionRange, const VRBoneTransform_t *pTransforms, uint32_t unTransformCount ) = 0; - - }; - - static const char * const IVRDriverInput_Version = "IVRDriverInput_003"; - -} // namespace vr - -// ivrdriverlog.h - -namespace vr -{ - -class IVRDriverLog -{ -public: - /** Writes a log message to the log file prefixed with the driver name */ - virtual void Log( const char *pchLogMessage ) = 0; -}; - - -static const char *IVRDriverLog_Version = "IVRDriverLog_001"; - -} - -// ivrserverdriverhost.h - -namespace vr -{ - -class ITrackedDeviceServerDriver; -struct TrackedDeviceDriverInfo_t; -struct DriverPose_t; - -/** This interface is provided by vrserver to allow the driver to notify -* the system when something changes about a device. These changes must -* not change the serial number or class of the device because those values -* are permanently associated with the device's index. */ -class IVRServerDriverHost -{ -public: - /** Notifies the server that a tracked device has been added. If this function returns true - * the server will call Activate on the device. If it returns false some kind of error - * has occurred and the device will not be activated. */ - virtual bool TrackedDeviceAdded( const char *pchDeviceSerialNumber, ETrackedDeviceClass eDeviceClass, ITrackedDeviceServerDriver *pDriver ) = 0; - - /** Notifies the server that a tracked device's pose has been updated */ - virtual void TrackedDevicePoseUpdated( uint32_t unWhichDevice, const DriverPose_t & newPose, uint32_t unPoseStructSize ) = 0; - - /** Notifies the server that vsync has occurred on the the display attached to the device. This is - * only permitted on devices of the HMD class. */ - virtual void VsyncEvent( double vsyncTimeOffsetSeconds ) = 0; - - /** Sends a vendor specific event (VREvent_VendorSpecific_Reserved_Start..VREvent_VendorSpecific_Reserved_End */ - virtual void VendorSpecificEvent( uint32_t unWhichDevice, vr::EVREventType eventType, const VREvent_Data_t & eventData, double eventTimeOffset ) = 0; - - /** Returns true if SteamVR is exiting */ - virtual bool IsExiting() = 0; - - /** 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 */ - virtual bool PollNextEvent( VREvent_t *pEvent, uint32_t uncbVREvent ) = 0; - - /** Provides access to device poses for drivers. Poses are in their "raw" tracking space which is uniquely - * defined by each driver providing poses for its devices. It is up to clients of this function to correlate - * poses across different drivers. Poses are indexed by their device id, and their associated driver and - * other properties can be looked up via IVRProperties. */ - virtual void GetRawTrackedDevicePoses( float fPredictedSecondsFromNow, TrackedDevicePose_t *pTrackedDevicePoseArray, uint32_t unTrackedDevicePoseArrayCount ) = 0; - - /** Requests that SteamVR be restarted. The provided reason will be displayed to the user and should be in the current locale. */ - virtual void RequestRestart( const char *pchLocalizedReason, const char *pchExecutableToStart, const char *pchArguments, const char *pchWorkingDirectory ) = 0; - - /** 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. */ - virtual uint32_t GetFrameTimings( Compositor_FrameTiming *pTiming, uint32_t nFrames ) = 0; - - /** Notifies the server that a tracked device's display component transforms have been updated. - * only permitted on devices of the HMD class. */ - virtual void SetDisplayEyeToHead( uint32_t unWhichDevice, const HmdMatrix34_t & eyeToHeadLeft, const HmdMatrix34_t & eyeToHeadRight ) = 0; - - /** Notifies the server that a tracked device's display projection has changed. - * only permitted on devices of the HMD class. */ - virtual void SetDisplayProjectionRaw( uint32_t unWhichDevice, const HmdRect2_t & eyeLeft, const HmdRect2_t & eyeRight ) = 0; - - /** Notifies the server that a tracked device's recommended render target resolution has changed. - * only permitted on devices of the HMD class. */ - virtual void SetRecommendedRenderTargetSize( uint32_t unWhichDevice, uint32_t nWidth, uint32_t nHeight ) = 0; -}; - -static const char *IVRServerDriverHost_Version = "IVRServerDriverHost_006"; - -} - -// ivrcompositordriverhost.h - -namespace vr -{ - -class IVRCompositorDriverHost -{ -public: - /** 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 */ - virtual bool PollNextEvent( VREvent_t *pEvent, uint32_t uncbVREvent ) = 0; -}; - -static const char *IVRCompositorDriverHost_Version = "IVRCompositorDriverHost_001"; - -} - -// ivrhiddenarea.h - -namespace vr -{ - -class CVRHiddenAreaHelpers -{ -public: - CVRHiddenAreaHelpers( IVRProperties *pProperties ) : m_pProperties( pProperties ) {} - - /** Stores a hidden area mesh in a property */ - ETrackedPropertyError SetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount ); - - /** retrieves a hidden area mesh from a property. Returns the vert count read out of the property. */ - uint32_t GetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount, ETrackedPropertyError *peError ); - -private: - ETrackedDeviceProperty GetPropertyEnum( EVREye eEye, EHiddenAreaMeshType type ) - { - return (ETrackedDeviceProperty)(Prop_DisplayHiddenArea_Binary_Start + ((int)type * 2) + (int)eEye); - } - - IVRProperties *m_pProperties; -}; - - -inline ETrackedPropertyError CVRHiddenAreaHelpers::SetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount ) -{ - ETrackedDeviceProperty prop = GetPropertyEnum( eEye, type ); - CVRPropertyHelpers propHelpers( m_pProperties ); - return propHelpers.SetProperty( propHelpers.TrackedDeviceToPropertyContainer( k_unTrackedDeviceIndex_Hmd ), prop, pVerts, sizeof( HmdVector2_t ) * unVertCount, k_unHiddenAreaPropertyTag ); -} - - -inline uint32_t CVRHiddenAreaHelpers::GetHiddenArea( EVREye eEye, EHiddenAreaMeshType type, HmdVector2_t *pVerts, uint32_t unVertCount, ETrackedPropertyError *peError ) -{ - ETrackedDeviceProperty prop = GetPropertyEnum( eEye, type ); - CVRPropertyHelpers propHelpers( m_pProperties ); - ETrackedPropertyError propError; - PropertyTypeTag_t unTag; - uint32_t unBytesNeeded = propHelpers.GetProperty( propHelpers.TrackedDeviceToPropertyContainer( k_unTrackedDeviceIndex_Hmd ), prop, pVerts, sizeof( HmdVector2_t )*unVertCount, &unTag, &propError ); - if ( propError == TrackedProp_Success && unTag != k_unHiddenAreaPropertyTag ) - { - propError = TrackedProp_WrongDataType; - unBytesNeeded = 0; - } - - if ( peError ) - { - *peError = propError; - } - - return unBytesNeeded / sizeof( HmdVector2_t ); -} - -} - -// ivrwatchdoghost.h - -namespace vr -{ - -/** This interface is provided by vrclient to allow the driver to make everything wake up */ -class IVRWatchdogHost -{ -public: - /** Client drivers in watchdog mode should call this when they have received a signal from hardware that should - * cause SteamVR to start */ - virtual void WatchdogWakeUp( vr::ETrackedDeviceClass eDeviceClass ) = 0; -}; - -static const char *IVRWatchdogHost_Version = "IVRWatchdogHost_002"; - -}; - - - -// ivrvirtualdisplay.h - -namespace vr -{ - struct PresentInfo_t - { - SharedTextureHandle_t backbufferTextureHandle; - EVSync vsync; - uint64_t nFrameId; - double flVSyncTimeInSeconds; - }; - - // ---------------------------------------------------------------------------------------------- - // Purpose: This component is used for drivers that implement a virtual display (e.g. wireless). - // ---------------------------------------------------------------------------------------------- - class IVRVirtualDisplay - { - public: - - /** Submits final backbuffer for display. */ - virtual void Present( const PresentInfo_t *pPresentInfo, uint32_t unPresentInfoSize ) = 0; - - /** Block until the last presented buffer start scanning out. */ - virtual void WaitForPresent() = 0; - - /** Provides timing data for synchronizing with display. */ - virtual bool GetTimeSinceLastVsync( float *pfSecondsSinceLastVsync, uint64_t *pulFrameCounter ) = 0; - }; - - static const char *IVRVirtualDisplay_Version = "IVRVirtualDisplay_002"; -} - - -// ivrresources.h - -namespace vr -{ - -class IVRResources -{ -public: - - // ------------------------------------ - // Shared Resource Methods - // ------------------------------------ - - /** 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. */ - virtual uint32_t LoadSharedResource( const char *pchResourceName, char *pchBuffer, uint32_t unBufferLen ) = 0; - - /** 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. */ - virtual uint32_t GetResourceFullPath( const char *pchResourceName, const char *pchResourceTypeDirectory, VR_OUT_STRING() char *pchPathBuffer, uint32_t unBufferLen ) = 0; -}; - -static const char * const IVRResources_Version = "IVRResources_001"; - - -} - -// ivriobuffer.h - -namespace vr -{ - -typedef uint64_t IOBufferHandle_t; -static const uint64_t k_ulInvalidIOBufferHandle = 0; - - enum EIOBufferError - { - IOBuffer_Success = 0, - IOBuffer_OperationFailed = 100, - IOBuffer_InvalidHandle = 101, - IOBuffer_InvalidArgument = 102, - IOBuffer_PathExists = 103, - IOBuffer_PathDoesNotExist = 104, - IOBuffer_Permission = 105, - }; - - enum EIOBufferMode - { - IOBufferMode_Read = 0x0001, - IOBufferMode_Write = 0x0002, - IOBufferMode_Create = 0x0200, - }; - - // ---------------------------------------------------------------------------------------------- - // Purpose: - // ---------------------------------------------------------------------------------------------- - class IVRIOBuffer - { - public: - /** opens an existing or creates a new IOBuffer of unSize bytes */ - virtual vr::EIOBufferError Open( const char *pchPath, vr::EIOBufferMode mode, uint32_t unElementSize, uint32_t unElements, vr::IOBufferHandle_t *pulBuffer ) = 0; - - /** closes a previously opened or created buffer */ - virtual vr::EIOBufferError Close( vr::IOBufferHandle_t ulBuffer ) = 0; - - /** reads up to unBytes from buffer into *pDst, returning number of bytes read in *punRead */ - virtual vr::EIOBufferError Read( vr::IOBufferHandle_t ulBuffer, void *pDst, uint32_t unBytes, uint32_t *punRead ) = 0; - - /** writes unBytes of data from *pSrc into a buffer. */ - virtual vr::EIOBufferError Write( vr::IOBufferHandle_t ulBuffer, void *pSrc, uint32_t unBytes ) = 0; - - /** retrieves the property container of an buffer. */ - virtual vr::PropertyContainerHandle_t PropertyContainer( vr::IOBufferHandle_t ulBuffer ) = 0; - - /** inexpensively checks for readers to allow writers to fast-fail potentially expensive copies and writes. */ - virtual bool HasReaders( vr::IOBufferHandle_t ulBuffer ) = 0; - }; - - static const char *IVRIOBuffer_Version = "IVRIOBuffer_002"; -} - -// ivrdrivermanager.h - -namespace vr -{ - -class IVRDriverManager -{ -public: - virtual uint32_t GetDriverCount() const = 0; - - /** Returns the length of the number of bytes necessary to hold this string including the trailing null. */ - virtual uint32_t GetDriverName( vr::DriverId_t nDriver, VR_OUT_STRING() char *pchValue, uint32_t unBufferSize ) = 0; - - virtual DriverHandle_t GetDriverHandle( const char *pchDriverName ) = 0; - - virtual bool IsEnabled( vr::DriverId_t nDriver ) const = 0; -}; - -static const char * const IVRDriverManager_Version = "IVRDriverManager_001"; - -} // namespace vr - - - -// ivrdriverspatialanchors.h - -namespace vr -{ - struct SpatialAnchorDriverPose_t - { - /** This position is in the same "world" space (+Y up) as provided by DriverPose_t. */ - vr::HmdQuaternion_t qWorldRotation; - vr::HmdVector3d_t vWorldTranslation; - - /** The pose will automatically start returning VRSpatialAnchorError_NotAvailableInThisUniverse - * if this is nonzero and does not match the current universe ID. */ - uint64_t ulRequiredUniverseId; - - /** When this time expires, SteamVR will start generating - * VREvent_SpatialAnchors_RequestPoseUpdate when the pose is read by an application - * to let the driver know it is still worth updating. - * You can use this facility in several ways: - * 1. Set to -1 to never receive an update request for this pose. The driver - * may still update poses at any time. - * 2. Set to 0 to always receive an update request *after* each time the pose - * is read. The rate of requests could be very high if the application gets - * the pose at framerate. - * 3. If the driver knows there is no reason to update the pose for some amount of - * time, it can set that time here and receive the update request reminder later. - * 4. If the driver plans to automatically update this pose for some amount of time - * (as it gets better information about the virtual location of this anchor) it can - * set that duration here to indicate that no "update requested" reminders are needed. - * When that automatic update period expires, any future interest in the pose will - * be indicated by a pose update request. - * The driver may always update the pose, including during the valid duration. */ - double fValidDuration; // seconds - }; - - class IVRDriverSpatialAnchors - { - public: - - /* NOTE: You must declare support for spatial anchors in your driver manifest. Add - * "spatialAnchorsSupport": true to your manifest. Without that setting, SteamVR - * will short-circuit anchor requests from applications and provide a generic descriptor - * that does not have any of the advantages of true spatial anchors. */ - - /* The driver should monitor for events VREvent_SpatialAnchors_RequestPoseUpdate (for new - * descriptors from applications that need UpdateSpatialAnchorPose()) and for - * VREvent_SpatialAnchors_RequestDescriptorUpdate (for new poses that need UpdateSpatialAnchorDescriptor()). - * For automatic pose updates over time, the driver should keep track of the handles it - * has seen and provide updates when conditions change. If the driver uses fValidDuration, - * it may wait for VREvent_SpatialAnchors_RequestPoseUpdate instead of keeping track itself. */ - - /** Update a pose for a spatial anchor. Should be called when an event notifies the driver that a - * new descriptor has been registered by an application. May be called for any anchor whenever the - * driver has better information about the best virtual coordinate to represent the anchor. Should - * be called on all active handles whenever driver state changes in a way that changes how physical - * world locations map to virtual coordinates (e.g. anything that would cause a universe ID change). - * This fires an event when it is called for the first time (to alert whoever submitted the descriptor). */ - virtual EVRSpatialAnchorError UpdateSpatialAnchorPose( SpatialAnchorHandle_t unHandle, const SpatialAnchorDriverPose_t *pPose ) = 0; - - /** Invalidate any pose associated with the handle and cause future calls to GetSpatialAnchorPose (on - * both the client and driver side) to return the specified error. eError must be one of - * VRSpatialAnchorError_NotYetAvailable, VRSpatialAnchorError_NotAvailableInThisUniverse, or - * VRSpatialAnchorError_PermanentlyUnavailable */ - virtual EVRSpatialAnchorError SetSpatialAnchorPoseError( SpatialAnchorHandle_t unHandle, EVRSpatialAnchorError eError, double fValidDuration ) = 0; - - /** Update the descriptor for a spatial anchor. Should be called when an event notifies the driver - * that a new pose has been registered by an application. May be called for any anchor whenever the - * driver has better or additional information it wants to include in the anchor descriptor. Note, - * however, that the application may never fetch the updated anchor descriptor and may request the - * original descriptor in a future session having ignored the update. - * The supplied descriptor should be only the driver's opaque internal data, not the decorated form that - * is used by clients (wrapped by runtime metadata). The descriptor must not contain non-ASCII characters or - * the two special characters ~ or " - * This fires an event every time it is called. */ - virtual EVRSpatialAnchorError UpdateSpatialAnchorDescriptor( SpatialAnchorHandle_t unHandle, const char *pchDescriptor ) = 0; - - /** Get the pose for a given handle. */ - virtual EVRSpatialAnchorError GetSpatialAnchorPose( SpatialAnchorHandle_t unHandle, SpatialAnchorDriverPose_t *pDriverPoseOut ) = 0; - - /** Get the descriptor for a given handle. This will be VRSpatialAnchorError_NotYetAvailable 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. - * If bDecorated, returns the descriptor wrapped with runtime metadata suitable for a client to save. Else returns only - * the driver's opaque internal data. - */ - virtual EVRSpatialAnchorError GetSpatialAnchorDescriptor( SpatialAnchorHandle_t unHandle, VR_OUT_STRING() char *pchDescriptorOut, uint32_t *punDescriptorBufferLenInOut, bool bDecorated ) = 0; - - }; - - static const char * const IVRDriverSpatialAnchors_Version = "IVRDriverSpatialAnchors_001"; - -} // namespace vr - - - -namespace vr -{ -#if !defined( OPENVR_INTERFACE_INTERNAL ) - static const char * const k_InterfaceVersions[] = - { - IVRSettings_Version, - ITrackedDeviceServerDriver_Version, - IVRDisplayComponent_Version, - IVRDriverDirectModeComponent_Version, - IVRCameraComponent_Version, - IServerTrackedDeviceProvider_Version, - IVRWatchdogProvider_Version, - IVRVirtualDisplay_Version, - IVRDriverManager_Version, - IVRResources_Version, - IVRCompositorPluginProvider_Version, - nullptr - }; - - inline IVRDriverContext *&VRDriverContext() - { - static IVRDriverContext *pHost; - return pHost; - } - - class COpenVRDriverContext - { - public: - COpenVRDriverContext() : m_propertyHelpers(nullptr), m_hiddenAreaHelpers(nullptr) { Clear(); } - void Clear(); - - EVRInitError InitServer(); - EVRInitError InitWatchdog(); - EVRInitError InitCompositor(); - - IVRSettings *VRSettings() - { - if ( m_pVRSettings == nullptr ) - { - EVRInitError eError; - m_pVRSettings = (IVRSettings *)VRDriverContext()->GetGenericInterface( IVRSettings_Version, &eError ); - } - return m_pVRSettings; - } - - IVRProperties *VRPropertiesRaw() - { - if ( m_pVRProperties == nullptr ) - { - EVRInitError eError; - m_pVRProperties = (IVRProperties *)VRDriverContext()->GetGenericInterface( IVRProperties_Version, &eError ); - m_propertyHelpers = CVRPropertyHelpers( m_pVRProperties ); - m_hiddenAreaHelpers = CVRHiddenAreaHelpers( m_pVRProperties ); - } - return m_pVRProperties; - } - - CVRPropertyHelpers *VRProperties() - { - VRPropertiesRaw(); - return &m_propertyHelpers; - } - - CVRHiddenAreaHelpers *VRHiddenArea() - { - VRPropertiesRaw(); - return &m_hiddenAreaHelpers; - } - - IVRServerDriverHost *VRServerDriverHost() - { - if ( m_pVRServerDriverHost == nullptr ) - { - EVRInitError eError; - m_pVRServerDriverHost = (IVRServerDriverHost *)VRDriverContext()->GetGenericInterface( IVRServerDriverHost_Version, &eError ); - } - return m_pVRServerDriverHost; - } - - IVRWatchdogHost *VRWatchdogHost() - { - if ( m_pVRWatchdogHost == nullptr ) - { - EVRInitError eError; - m_pVRWatchdogHost = (IVRWatchdogHost *)VRDriverContext()->GetGenericInterface( IVRWatchdogHost_Version, &eError ); - } - return m_pVRWatchdogHost; - } - - IVRCompositorDriverHost *VRCompositorDriverHost() - { - if ( m_pVRCompositorDriverHost == nullptr ) - { - EVRInitError eError; - m_pVRCompositorDriverHost = ( IVRCompositorDriverHost * )VRDriverContext()->GetGenericInterface( IVRCompositorDriverHost_Version, &eError ); - } - return m_pVRCompositorDriverHost; - } - - IVRDriverLog *VRDriverLog() - { - if ( m_pVRDriverLog == nullptr ) - { - EVRInitError eError; - m_pVRDriverLog = (IVRDriverLog *)VRDriverContext()->GetGenericInterface( IVRDriverLog_Version, &eError ); - } - return m_pVRDriverLog; - } - - DriverHandle_t VR_CALLTYPE VRDriverHandle() - { - return VRDriverContext()->GetDriverHandle(); - } - - IVRDriverManager *VRDriverManager() - { - if ( !m_pVRDriverManager ) - { - EVRInitError eError; - m_pVRDriverManager = (IVRDriverManager *)VRDriverContext()->GetGenericInterface( IVRDriverManager_Version, &eError ); - } - return m_pVRDriverManager; - } - - IVRResources *VRResources() - { - if ( !m_pVRResources ) - { - EVRInitError eError; - m_pVRResources = (IVRResources *)VRDriverContext()->GetGenericInterface( IVRResources_Version, &eError ); - } - return m_pVRResources; - } - - IVRDriverInput *VRDriverInput() - { - if ( !m_pVRDriverInput ) - { - EVRInitError eError; - m_pVRDriverInput = (IVRDriverInput *)VRDriverContext()->GetGenericInterface( IVRDriverInput_Version, &eError ); - } - return m_pVRDriverInput; - } - - IVRIOBuffer *VRIOBuffer() - { - if ( !m_pVRIOBuffer ) - { - EVRInitError eError; - m_pVRIOBuffer = (IVRIOBuffer *)VRDriverContext()->GetGenericInterface( IVRIOBuffer_Version, &eError ); - } - return m_pVRIOBuffer; - } - - IVRDriverSpatialAnchors *VRDriverSpatialAnchors() - { - if ( !m_pVRDriverSpatialAnchors ) - { - EVRInitError eError; - m_pVRDriverSpatialAnchors = (IVRDriverSpatialAnchors *)VRDriverContext()->GetGenericInterface( IVRDriverSpatialAnchors_Version, &eError ); - } - return m_pVRDriverSpatialAnchors; - } - - private: - CVRPropertyHelpers m_propertyHelpers; - CVRHiddenAreaHelpers m_hiddenAreaHelpers; - - IVRSettings *m_pVRSettings; - IVRProperties *m_pVRProperties; - IVRServerDriverHost *m_pVRServerDriverHost; - IVRWatchdogHost *m_pVRWatchdogHost; - IVRCompositorDriverHost *m_pVRCompositorDriverHost; - IVRDriverLog *m_pVRDriverLog; - IVRDriverManager *m_pVRDriverManager; - IVRResources *m_pVRResources; - IVRDriverInput *m_pVRDriverInput; - IVRIOBuffer *m_pVRIOBuffer; - IVRDriverSpatialAnchors *m_pVRDriverSpatialAnchors; - }; - - inline COpenVRDriverContext &OpenVRInternal_ModuleServerDriverContext() - { - static void *ctx[sizeof( COpenVRDriverContext ) / sizeof( void * )]; - return *(COpenVRDriverContext *)ctx; // bypass zero-init constructor - } - - inline IVRSettings *VR_CALLTYPE VRSettings() { return OpenVRInternal_ModuleServerDriverContext().VRSettings(); } - inline IVRProperties *VR_CALLTYPE VRPropertiesRaw() { return OpenVRInternal_ModuleServerDriverContext().VRPropertiesRaw(); } - inline CVRPropertyHelpers *VR_CALLTYPE VRProperties() { return OpenVRInternal_ModuleServerDriverContext().VRProperties(); } - inline CVRHiddenAreaHelpers *VR_CALLTYPE VRHiddenArea() { return OpenVRInternal_ModuleServerDriverContext().VRHiddenArea(); } - inline IVRDriverLog *VR_CALLTYPE VRDriverLog() { return OpenVRInternal_ModuleServerDriverContext().VRDriverLog(); } - inline IVRServerDriverHost *VR_CALLTYPE VRServerDriverHost() { return OpenVRInternal_ModuleServerDriverContext().VRServerDriverHost(); } - inline IVRWatchdogHost *VR_CALLTYPE VRWatchdogHost() { return OpenVRInternal_ModuleServerDriverContext().VRWatchdogHost(); } - inline IVRCompositorDriverHost *VR_CALLTYPE VRCompositorDriverHost() { return OpenVRInternal_ModuleServerDriverContext().VRCompositorDriverHost(); } - inline DriverHandle_t VR_CALLTYPE VRDriverHandle() { return OpenVRInternal_ModuleServerDriverContext().VRDriverHandle(); } - inline IVRDriverManager *VR_CALLTYPE VRDriverManager() { return OpenVRInternal_ModuleServerDriverContext().VRDriverManager(); } - inline IVRResources *VR_CALLTYPE VRResources() { return OpenVRInternal_ModuleServerDriverContext().VRResources(); } - inline IVRDriverInput *VR_CALLTYPE VRDriverInput() { return OpenVRInternal_ModuleServerDriverContext().VRDriverInput(); } - inline IVRIOBuffer *VR_CALLTYPE VRIOBuffer() { return OpenVRInternal_ModuleServerDriverContext().VRIOBuffer(); } - inline IVRDriverSpatialAnchors *VR_CALLTYPE VRDriverSpatialAnchors() { return OpenVRInternal_ModuleServerDriverContext().VRDriverSpatialAnchors(); } - - inline void COpenVRDriverContext::Clear() - { - m_pVRSettings = nullptr; - m_pVRProperties = nullptr; - m_pVRServerDriverHost = nullptr; - m_pVRWatchdogHost = nullptr; - m_pVRCompositorDriverHost = nullptr; - m_pVRDriverLog = nullptr; - m_pVRDriverManager = nullptr; - m_pVRResources = nullptr; - m_pVRDriverInput = nullptr; - m_pVRIOBuffer = nullptr; - m_pVRDriverSpatialAnchors = nullptr; - } - - inline EVRInitError COpenVRDriverContext::InitServer() - { - Clear(); - if ( !VRServerDriverHost() - || !VRSettings() - || !VRProperties() - || !VRDriverLog() - || !VRDriverManager() - || !VRResources() ) - return VRInitError_Init_InterfaceNotFound; - return VRInitError_None; - } - - inline EVRInitError COpenVRDriverContext::InitWatchdog() - { - Clear(); - if ( !VRWatchdogHost() - || !VRSettings() - || !VRDriverLog() ) - return VRInitError_Init_InterfaceNotFound; - return VRInitError_None; - } - - inline EVRInitError COpenVRDriverContext::InitCompositor() - { - Clear(); - if ( !VRCompositorDriverHost() - || !VRSettings() - || !VRProperties() - || !VRDriverLog() - || !VRDriverManager() - || !VRResources() ) - return VRInitError_Init_InterfaceNotFound; - return VRInitError_None; - } - - inline EVRInitError InitServerDriverContext( IVRDriverContext *pContext ) - { - VRDriverContext() = pContext; - return OpenVRInternal_ModuleServerDriverContext().InitServer(); - } - - inline EVRInitError InitWatchdogDriverContext( IVRDriverContext *pContext ) - { - VRDriverContext() = pContext; - return OpenVRInternal_ModuleServerDriverContext().InitWatchdog(); - } - - inline EVRInitError InitCompositorDriverContext( IVRDriverContext *pContext ) - { - VRDriverContext() = pContext; - return OpenVRInternal_ModuleServerDriverContext().InitCompositor(); - } - - inline void CleanupDriverContext() - { - VRDriverContext() = nullptr; - OpenVRInternal_ModuleServerDriverContext().Clear(); - } - - #define VR_INIT_SERVER_DRIVER_CONTEXT( pContext ) \ - { \ - vr::EVRInitError eError = vr::InitServerDriverContext( pContext ); \ - if( eError != vr::VRInitError_None ) \ - return eError; \ - } - - #define VR_CLEANUP_SERVER_DRIVER_CONTEXT() \ - vr::CleanupDriverContext(); - - #define VR_INIT_WATCHDOG_DRIVER_CONTEXT( pContext ) \ - { \ - vr::EVRInitError eError = vr::InitWatchdogDriverContext( pContext ); \ - if( eError != vr::VRInitError_None ) \ - return eError; \ - } - - #define VR_CLEANUP_WATCHDOG_DRIVER_CONTEXT() \ - vr::CleanupDriverContext(); - -#define VR_INIT_COMPOSITOR_DRIVER_CONTEXT( pContext ) \ - { \ - vr::EVRInitError eError = vr::InitCompositorDriverContext( pContext ); \ - if( eError != vr::VRInitError_None ) \ - return eError; \ - } - -#define VR_CLEANUP_COMPOSITOR_DRIVER_CONTEXT() \ - vr::CleanupDriverContext(); - - -#endif // OPENVR_INTERFACE_INTERNAL - -} -// End - -#endif // _OPENVR_DRIVER_API - - diff --git a/alvr/server/cpp/openvr/lib/libopenvr_api.a b/alvr/server/cpp/openvr/lib/libopenvr_api.a deleted file mode 100644 index 3bacefb3d815e74199ba423502da7fda208fa663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1712110 zcmeFaeT-z;bstu zUU%0{eQkYo&k!a;g{G~|WDy~<0Kv|O;3$ZYe*y%tB3q8dNQNl^N=bn4+x##Pi`|-cfo%JsM(uY3zy89FD zMjLy3o7>Um>#uL{Bm4iazaCw`abt(S`l%1KTHkTM^~x82tnuGhf98$W%iotYc*z4V zdEg}vyyStGJn)hSUh=?89(c(EFL~f454_}ompt&22VU~POCEU1121{tB@evhftNh+ zk_TS$z)K$Z{~`~3SNHF<^zZBkTHodS{kgx@`mUG1FKO^C!UNy^ga2Dg|Gx3>wZ0p_ z-}B%6z{}s4H29|Sz@PjZKh}Er`;rDPdEg}vd=q&f{)q>jMYJPad)`c+JF0vS#tJ99G^dZ z8c&nie1fkBi)ZoWh6KJrpyKmoch*1jVA8%FwU0X+F}=NcIosSu7xyOJ{=ul8aOoPezF-FxF zkAT_HESV?ch4_5D94`i=Roha@nY5;Ear#3_U@%YWz`ErB>u`lOSwsal|e86#FoPP4|5=2{` z#q+^uk`ZVM{Kj~;6(3IK@tx7)Y}h@YGYvb7$t?7wH_1F< zn=r{XaHiabv|-Pf_2BxQZV%*rmeZAb#owiR$}-o7lYYTP;ZAqHczZ_jBh$5cWV+mS z-c=(vZ>GAp9yr}@b{5YdpdDbEyv{@Jy0h55Oo%>*;0+~vqD?T!fR_QJ?;(~{l#+Ly zE`(mYjej~jal7r}=Jb;HNFomK+heRP>`?J=Fd~WCZ|@DpXOJ_CXL|K#-?{Pba*!as z3D(gLFZjdGW=vGs1XbEfROpAPHu611BD_`}v>b*8EwI@Y%jyR2m51ZA2~QCrqo_f1 z8Se|(gk^hJzMULkVFR1M5+Bof`4QfZh_^1WCuu>Tp!s_^zWbmP>lw8cmY@mgVEJ$C zOtEPu{8sg)aE#6+FPx?kmVmJ#fiFtDc-$GJ-zq)NJH27jmAlv7Djc10}cX>3oI^NaRF&?8N(8#C+-Vo_ygKDs`CGML_;jA$cfZGGMbr8eRn{$S=@%mh|% zvXF1roL0%*a zJ#a_YxxToVO|GOe&XS;J59z6iHeq1RK!DKnY|z}v@!IHVKyqG4_jq`AhX3CqdEX}O z$dxMuNRZSEM@oWdv!C=Jnjb7jr^(FE3aM9xdgy;uUJEl_>K{5R9Emgbi90ohg`ep5?MAI!_i4 zlBWw&x;&40$|O;;>n);rP%9|=m>WytXP)kix{Ds0L~MQV$kk+AXSl4YgrW2JZ%?NM zuWeu*DIh|`h8L}agk&BMM}XYbcYrhxN4s!HOfHkzo!Mk0mLZ9%8$6@l3D03?V5GJe z>c*S^kkzw?A2)4zXif zTR@6X?s|Kgg5B-3rCY{*@0os2F>JU)dbK*YK)V62Lc2MMJFv6wcD86E>?~l02i5Ix zHz)DQMtl-M%{#garRgC+HUfYXq;+`Tia{BM&BLdb>EZ6Lk474OYe6v?fHQV4~VQZuuS zjp*K_2OrI3d~YyLAd7BKhRe~IoH54(u>z!ID{P}=9hwpgI6XysR!^Pr04|D!`~K?d zj8+CFg4dbb`zDPO9!uN>Hl>PihKg>%pq zV~~gny)oupCP9wB#k`qgqiS6|`?kl%_Pkx>@UYZxlXJu z%6m_&MiMWNKhWnFuo~(WyKWDOy;;FId_NJM%hgP0Yan4qMF9oE4LvKhrjc&&T*Xc| zP|QZC_P^A+v|jM+*G>beSrU}i}ZCeOglZCKjI^+I9iOGz`g0Dy@ohpg-Z00q{mX`QiEG!>0K z=QU9CKor@id2N+Nmg-(E(STuC2A~oHD}ZouQU==!01XJ&?5sAP8g2a&FT)IqW+~B` zeXk_EfFRAlQ}Q$|o+=ozWk~1~!D&0T3><}SicF0fi=LgfQTUEAY6hLLN3HZJhdUzs zfu9}J>{r<(1Eh7nj<#U_n#3`nb?P@Yb+VJ&z*wPaNC@}(AxY!hh2t2cMUQVcnp1*^HDQLsvUz9^!rEx2LvWWXA2TZFf2Y@$k>8c=ClrUuX) z>!t>@0E(JN4C*UW0sQ>1b6pDk2H_e|L|rUKnPh^k#XMRadxER5*Cx*j6nDtc2tb2j zPzTw&q?1&L|EIMkTe09sm2m$(=#J9a0hWcb!ss3EQ4^y_QWxigz=zeST+>b&uv4Re zw{eI78Jm<91wE*md#%H@kdP5Cr>x>6i%d8*JwBTT&0by};(B>X% zW<#np=4v&YB&*#!$02+cL0ZLjM`H5$B4I{RW+VbENp~dUhL(M)tQ@4<4y>+f+gXrP z8_V&44rNUjIPN0IW_3tsp|<7iy-IYo`bJifZK`JB@+zqhS4r{=U_``m^j8{@MTlF> zZsAUcZ`7=Z=yqc;?#;x}0+kw*OQM{fWX4jkC!|L<)6-~V+t$(b4DF(w-efezN$mXr zjx}-mrIchkyR7CQRfbt;kT{Ofes|d&YSF3Wem>)csVX}R^|#%dOrPn_WICXSB3n-q zbws2-FR8GB4_mQYNFn8WVH;XW*Pgf3GLNv71>dX1%`^_u2? zbuii_*@zwi2VNMJ$m(mkgN-|R>O;UJ{id*2qA|RjEttWVw#QJ%R7lH8AM#9Sv@zoN zEh%vABgd^&^tK^Lw8u;5HYp-XTq{w{gz>)MNLoLH21Kn7@QSiFJS3GowB?8rOYn!V zA%3jV2xHk~Bm-?mo?V zylo!4m_|E%Uhv-Je9$v#nJWY{ZnUl17qzV*6}B+Y%!ti*azAPWTjgA1E;3!HT_yds z6NxadZ(m(>?bDvorhO6yw+-OzP+LyjiL&;b zhkg{&O)Tt810heMNFF<+gZ9q;;CpWG5uWD`^ZA|^w0F)rLlZGaY6UQ@kpa=50tNbq zpK(Q%cOJk7j;`-7r^A6b%5yZqU(eFCG2OAESG^f;5<-*Zg_j-0LurkBACs3Z+}cBI zjqo-d^@UZ?xV&XgO;xQhda@!;(6Q}bD8fif@MaX&tMi~k%?7BQE9Le-#o zya0(3)U$Y!9G<`ggwrX)w<8<~joIf!Cq@PUcG%g)nVCg|olHFK&gX-3?uQ>CPI$>B zCNA6C3pyrzj0T-Ig*!`N_s;ro+YaM~M;_d^<4&8MB)(~(^OiZ*$qGhrGMN;&N?k zgmtRUE!oMc7_)6AFm@?|fmkM+p4f-kZ`B5yeVsOK@$Jf_)na*F`+>3wR>w5Ea3%5( z9;|%W92!OJ966X!f>(Qe`~LOtzK=(qegAsgIk0sSr_`0BDX$Uhy)f2zcO zUL&F_lXtYfsjsi{IRQ%6RW0|a5DC{QCeWQxl`Xl{?M6ZY6e7U>{+ty<`Tfc(&cseT ziy_kaEJ3ENfKr<`@tHPtBbjrTn8z0hcRycD{45h#uWsNCqz zZ_5y1W-{ezV+s$F^IK*YGdZIzHd;CPdMH(O%PCm$IbU-PxRt_B>M3^iZ;7*%T<@@FWS=2{bNA4vi41; zEkQ$g z5W397pcwj!x`Mc$^eulZ8nz`7IWGaFOcy%zx+)+QOSEU*Cae8D zmJRvUvx`GzM_XbvmD#+SmTUvF`cOyQ(q;(KUihm9_-odsa*%Mhh)K)OkAN!yi6X}^ zPB`Pa{qTee#7HmF^|Q(BimHPj`*$0D8+;LARO})`)&VjP5HvqTnIq}=DT#$qeG3t8 zOo@%6;p7U1vQH;VO1IJ^TX9v&GRJxEi}esGCfVuOJymnCV!md2%&xe-L(Bqj5ePPFB62m1fzM(ZU0LiSKJng zZnWR=syNZ+U=EXI&_CpGJ}*t1l!5}JJy@kcHQFVt@!c-!JBb{>tm4Rs3E*Dr)bsGe zdeIsU&k|VCrdZqZ$hW}is40VY2lbieI&C4$^&~`cky03iU#drvVz{74K6dpwPQyg0 z1`@H79~D|FZx>i(O77YGZO-@`9uGbj628fNYFVrv{E({LR3pz-yTUannF`K2Xro;i z|7sIi%W&&S6dQr2eZNgWLtPJ?)VfSWUiHdcXdR1JS$2(VCkSvgP$%9xi)&7%t%jdE z1aGe?C@A&$$=Tm2}?C(RN;|r1lzLFt}%@zKB9COf5qsWR^dkWxT1{< zSmUDlHQ8=~e%vP5nq?DZgqLi&y@2sfcL}&AJd=%wLOFout^u`VJ&$&-=o$poJ@4sa zhi7ZZM%Q9r#}qZ@nMFkVW$WwIyV0h7MTZgv5=-Zi?TF2^GG<2VksUHmJxbp}lIqRg z?=me{-0M>CM4nd2JP#W6(ppXL9UkIwoRpH~&AaJSSiV+P@Y6IDr-*#7(+=e6L<{69 zFcc?b_pS0hE1s_g!?e;eHLpv9Xt~!z)Hsrv{Vr?p#8G~|p zx`rwSab}!Ky_>112F0{fb5hW)LAPuJTN-VX7$c@I;K9}$CwoE4Q`~40X4r_v9Ni7gl%7gB?MU2lij*oZ z;-MG&#gQ9!hdqpUO)q}pR_a#yb`5`(r9GS%c9IrTpUf0;7ct>g$yQp17BzF>+uU2W zjgS801oZd!WTiN-anh zSH>$Ch_)5JV5!Cah+qG-@D-D86y1wh}8*^~!F0;bGk~J&%muykd48)KiK}4bYop(meAP*Np9_hRIku{`pguF}( zD3A%wp;S@`HP@jMQG#b&=YaIUc^++UF+(XIMS@6K;^!_;<6Lg^yuY<+cXsm(r=z*A zhvN>8@X<=iY;YbZtfv?ptMd?ToF2H5Sc_bT*?_miwzJ#T;a#vRSDv!&dJE(6_JFiX zD*04X-3km7Q9TCA^2jU)(yW?e#?lMYGyXl)39wM~yg}z=@1rgnU1P!*zp<)s_E+!h zM$CJXqCEI!q+2FH?mFh8J>xaRy(E6dY6cTafrk<)N{^WdX4S1%XNt>+S8?i~P=~J9 zzmlbE0zVzLhqPD>t^5W+J>*@vyr-SID7*1C-%ktWrOvFFx7)2E89gwCctn_O z;$Lo_CRKMA4~QtcZiPhfy_=^U1zXkLl{^?UxHoyA7w=HPLCU5LZYm!9oUJ8@idVjS zpp}&JzLsTVF5|bkMb$cSX^V`s*o%_5y!sMix0zI@80>a?jN96g7b5<%4KgTcRDDN_ z0os+6{S?H^SX8vpnD#31s9;=my=fK36+~T05b`a`-TJ6A(Sj`4uA&$T!U@TeaDzgD z5^P#msssTxCt8ACl$0+;?VA%a!Je{`CitpP+yq}PCv(EhO9&pdz}?jwTGcAlA*89h z;2qzF`^a{vxE-m&UQ%56u~9FDuu{(*Z+)PjVpLr3jWZC{kxPafw%iMpTlT$U4afJm zM9F1evtryF(H!|;xP;vR0dp2s-J&4;t!X}2$rdhfs`jHms<`Cu`} z^uy`RiGOf~SJ$fA57Ek#o{c_49-md1wsDQi17JfJQgs`!Vu?;*)9I zrRkxPm%K#Dk-m?*GPB9EnobxXeTkF$$hF20a2qj8I#5jK3W}_b8kEnHMBY>995LkB zFxA>qvK)OoH{lh%oexy*bhy<3wd{INKqMAWQis%+9UzIB&?P*82u&r*MoL#tZU@$U zm%utakzkM9evBu);6>L7p9>S$*WAZyWbTQ%z#M3wxi}U?p~DeJL>w3*@DGXXfpYT{ zqK}vcd0nvQnjp;ssic-rJA2_d6A@~lrrYgEvy1-PN@^;Jt=iSo1S-VjI;Mk;_74y( z|4b6&^o>d`t%i+3Ku&*A&t9G>YQ)^b$?I`<5mP3A5%$lWz$=W%!W z^w5AMcm%Gq7!A;uN9cr5HIhgb8!w9wEiP3gSe`tgQcHASbxjo5^IO29+kEr8+(@#r zH8@O~0KTn^Y8az9ktKt{K2%$WaTisw>%f(#jVjSzBL#7EKSnekc|>rqAJNu8%wc)K zw^3k;^+>~gy>_n+?|26dsb)_+8H0mG`Bjm%0$fr`2XEC<>SnH?(u#v=MSF!-BU1dH zZEtHF^*X+;?iQzxc?VU!Tcn_SZH(6DE;h~cG)b4fBy?SdNh$7WBudVLB zzV@02-t4tXfz5wgt9(X{w_GlHZPh?5!K*1+5d`W{l66>GlP!go9+|6Rm1?UGKG&v7 z*wyIzj9I14#i@o?n+LCwkgZNSdlRhQx^eZ^Dh*rRU(|*ly43ZZb|#@ykaCTEvKl8W zfLPqmBqAWH5E3M#uYe2U4X0E!ha3jx)$m#J8s0Hv9g31ZehiTJeSE5G{TR>Ii07nr5r)XrBd$dRYm?aA(Dz2+DjWD+xRxI}67`Z-10VKvG&K+{;hUq4(ePi)wCf?* zbxqf}I`^=lohIjlv5I27m|;@4920;uD8t1RAQj6#y{pwBgbcVEP*RJM@mw7b0CSsn zRtjd)fe{0Wx@(sRFWeTQ4%$$SQPLWQds>AkOz$fVgaXwN&X3`Soy<7$uAG-D7#?2J zwML=2za|yTYHgAN8KrM0RN*h|Y@{ ztF7z7;$$_1E{SArmY(*g#7&W;46s6Q`w;m%4kTLTRJ(#JAgFsJeeVeWOqt$jO$Q*6 z8>JrJkq;*i-kt=g5(EOusjD>6T}@D07I+9FLl$Mb9LRM2$Go4808C|bViZigbML1Kod8b4R6@s?}4O_CAp()%c^nfxE zMB^214bepMX`*H5WRbZ@Dff=Y%u{%au0DfY??5li+GF$Xb>3lUQdOH4jiSB5G}%F( z+T3(MCG_Mqako$^)zuPf>co;FViUa~3hW96Le_3@G=(M!%wfvOMBm!Hra`{IZd9@a zPn)rBETX0Em?##zyj5vXPU2MR=7(Zf9K6%8Mx{l#t1Mchv9_mrGTgl`fRxrXF+qo! zSycgEYbPn)x=C`mnRja%g{`rN4HLaP<~)`)m3GnT&{^2L9cDI(<-Z>vyQdC z!K5pROO?(PP%ks7RC}G2c~3QURP+}4`oe>>rYYH^#7Y!d7f6P zxy*L>K1a$?@(U9v)X|}K0JM>w^vz;03~e)-4w7DSHJDqMO~yE6tVhA=Q@E+-@GYEF zpxY@MV8cybyvaF*~~sJ-sA+tUTK zFc!^3t9!XAQ(1@gWja_BNFyDjW9WYbaU%}t%Tn^F2fi625A6w((dg#b!5Jnk;p??c z)kW-dHL6(QzHo+!5=e9m?2!6yw~?QJbRtDp6XSz(!Vr!x%O(4RLzBMl+bA13Lh7pw zcC1Zfaza{7j5FF)yFF#<<3eB}X8Y3Gtkc}c`%a(+sd+ao{(P-0Uyx~NWv+xe@kVY~ zfQ5ZR()Z|=WzFX5q`I`C7gaDcZkj5spsS~naH3E=#z##GxY%`It;$HbudBFwM(pIZ zs+3)mA}V1?Y2xs*0_Wh7%TTpU3^QAeS?`qHP?gOvvlVqzhus1&ZH5cJqVuLw%oAup z^G*Z_GF?HtEZc1b*scJO@qQ}7RMa5EdIjxDGG7P^h(+wTW3!)j+yokxaObG(?UIAf z2ws{)OYmBv%y*KYS}9-Qb97x)eu-G@=u!rP8mAYI5=NO(l7zBGSy-1WFds&^!62Z{ z*n^MLX1MrF#es6NpHmXaP05S+0H8pW^LpI_fThN5`*}(=fL883S0d0TJXazEw0hev z;vWB`nF^uyac~ZJi&-z6t_pCi$tu9Mo}Q@4jyk8rAYAQKtOId$vS=*L^=ge2Hm<^} z7JLkZ6g0zL4FR+dL73U#n&GwZ)T6YiU!t@nU&V|bn;;VGP??OS4rr69AiNuaqY*U> z5?6NYucB94fhMyqhJf-*R zbs(0q3WGa2D|Qx1sd_Zp{k3}jOR4@y7cG$iQwo-a`wBTQrMd#zrLthk0kiZ~J9UX; zrD_|o%NmidFP%}s22Y7hm~t4E$c1qMmCyXZ2P;f(bi4bIl5y8YD}c6O(8avepsd{ z$=Wg{N&HAx?2H&$9Vje57wYel^+Xe|iTc=^kj8p< zE#1t`?saBFbX2zHj4~xv`e3%5?Et9O(XJu__*o?imvT3Gkg(Q6Xn@M;#CIw_Jsfel z3kvDz&8`~yqy{M$aQ&h>tWEWB@*U@kz08@J^U(M-)1;0R!iJN|S+()e8ZFK7A*8gN zskR6U!BIk$g&a{1Tfdk|=Vg-qQr zn4x^$HdkB`F#;{EJ?-+uLx>)F&Rs#_oPo}ErN(W{ovIWIyNZZl)mavb8^Wtf&Xq); zmyQzbtDY1OQ;ElFcSBW&NNdUr6a1$qM4Ss&$vfG1-7Ug2(;9)-&EmFdx35dQ#AdGQ zDv9MTspvLQQ_r+hg|2u&a{JD2m5yqV3SqgOs@r*d+D})B;(AUfWd)e z?hsMW#j|OGfuRfB2y)e(^$%6(Jv()D5HOVR0ej9Qd{{PAUOgSFT!>RXWsA*H;bC-4 zQi!0EOq_~+mTt!xCGxIdA-5KyXjx8eiY%ctJCJzRn;A<}rOsuzyigWJa2>{{%QIXg zZ$)*>k4zZid<$}nnoc8JI5H@#L#O!D>IBU3XzeU zpMHtwkc0!8SizI(!=K(0mpAzEa2KOq^`nuFe3zCK*zl@Pk*SCPlQUHRtC|ScAVbsc z-#@X&w{UZpDcLnf_0};shT_2@*I>5nEe4Y@?F_=vQ*yOtOCuN^HKoV;UNx3XDqnyD zcXAD78|tOxiEBxa_3^iK1Mj}z@OKusj7~yaFN$ipc5MC-d4;ex8J5DH&KnlSo*wKv zgF%^WQQzk;D@jG9vl6M9O*Svhy7WItRT@*?RyiHFI! zJ(BlT8_E=sQ2HGFPVvz|c{0LFO#83xIY9OA*yjNimuW^j{Q>Pn$rzcJq(hK6!A-Z~ zdLULXb2Td$FFp%2RB8#+|7QV(DtuY)N+uJPlS#gP0O; zQ?p}uZAot%-Cb?Rh8L{y=&8*s@S54UJchovjmEf&FQXVz4R?kYsMe3Fcr?6_^gwI) z4RQgl;5zWa&Fs`(?}5Lmr6dHjR&P5^W!Hz0RYY@^i-8d~6jAbR!`!BI%)?xOY^YbV5WV0uqlByl$87e3P}JF6o1N(GmTOj% z)VGT>pkCle%pB_tv_PR?9(5#|hcGT=P=6l=hW&B?Ywq1~Co8>}Nq0w^YSt(G>SZJlXDrcmX0aawD<-+iqGixx_a*=9dwf`q?3o9C-5RHsR42^kUq@gNw}$ zd+>EcbS;*;xuZv!C2+%{*jPAPg7i)kEpbjP*XRf{=db`iBaSA{UGm>p1(a@wQYw@l zf(XC@n$1r90K;^K4xBNXz=2t+5T~buW9o<;%#+SROykr!gQE6~A51MOa&brm5PUTt zeYn=@1d|>Zp9uP?QH2k|*XkBy+dMq>6N^%SvxP5h53#>pEkyEo^@hc(cK2KtG!za* zBDi62OA|@yw-`dIdQm;}E$>rfAho7kRQadIlBHwJBF?ma+8Fha08Lq*Sc{Lg4CoxR|C(IPJmWN0Kktq-`6YDUn zQ2SLXN$RXu9f)L3@~-4HC)ZWkQZH(M__WSIGQLIR(PLyXVc^BEIprD9oo+I8{bD+W zGvj_doLnKgd^%a8_dpTZz|Q)@)jXY-rPGHzs!lBq(6<%57{VhK6r;{Y`-oEVbeBda zBN2i}D^!aXbvYpL)fIIOD?UOZ1$9lKbT!>4bi5pbnW`N!o5ZOk2||0b`Q36PCUe9T zH?>a)l&alHswju~5K4rBba-#H(SEBEPOOw|aU~U%>2vrg+@NcQxId*_oVL`_jypG0 zE^Fv)LmAB3zOZX^5)&fcQJ)qh)>Ms3dsEz{`|1Yg;{>tQWQ3fk!lIXyRuF<#sFPwT z)10{~Xb}WX_){t&@~{dDz;j|jx^`wgow5isQEO6fn_Ak)y0>X0G&tnJ&~XRDk%=TxGOMVnNjk#5u8ZPrOeu?e z1jQzQN~QBLZz{_hYr)SO7mp-)SB2)&z= z^@E++Rvi4C5rUgOA%aS?t)8Z4Qjk;Ap`n+{Iu5ihN;FP4^HQ`%ZZXsxGp~-QU^Wp5&G*k*CK)PR_&l?x(~s#w48-%2qpyNQpY<}pzPFOf~O=7>6ZlyOWv`O z0%+C^#qdB3Ua=x#F9IqBVCyL5R;P9WRF>)@ajBrwyAAfrC1geBL(%c$2D>#J>dNan zwm{Anhmf05LM)=DG{rjPbhf}__mc773CXJ=t=Gx>JT_897t4W-70KRYp$TsiQJs$`zKZ zmY-7&CP&_a89L=)wAYZMQ?BP~SvuulI+-<4n>S-=t8(S3d#4+4PQ>aQGU`#(Vm~s% zR8{~S(xUVLSC??h|EMiXze7%I%VXfaZA{-(MFRIV4YWoP0vD29cOd=5nAl~;SFXB% z+lL+pHMU}I^Y#&yu7Rwh^^7UZ9Cdf$m;=Y8wasykM@E8F%7vzW-V9YL8{i_K22!h1 zfD0<)b}`<82k7P~^|o^Dn4Km{@13mXX3K&ZUQ=gveeW11$jpH-WU`I)Y?u@>m;RxK zii$XfZc2HGqM;Iv8lzMM0vCC`o06W{VYJ(}>v>zbp8ZflL(0siIRwo4h|bCi0nv2H zapqIrI1OM!C~UAQ%bi3E)Z zyyp6P^6NhGzPX%Va1B1*D-|g1C9A$wV)vyiu`v!PqS6~K7_#aM3re!%MQBBE^>~NOuxp%;!*nGS+b3=Hsc6ptgwcQgdkKfsm3J znrMY;pUpuYxGWEZ0+Rb?h$%B5F;oa(!JF1_!#+kS=rVwi#;i-FD)6;hDMtjs}u0 zF&}uXP}}sjE2(gL+iJF{t#f+87RLq!JNp|u+kn=B@)lJ9jw2jJaU)R?G^Bib;bVQ$;1QGeJ;KDlgBoEi}-5&!W zpD3iXYIDD!@90x4_^Qx<$zj>pXan&@u>`hutJoAQNO@=w_MdeiVvT&@Akf2^Hj3tX zW}3dobP2DDDuC43lyT`JI5RS3oiK8B6A4+4@$o4tYbDm5UbQ$RFQ4Czh+Dnq);GfG zc@sr%5KnB;fi;=0$N+_uc&SGwrR}^hW~4ZjDp0Hs6QzbioG94vg{=_O9a!p^R))3; zp&Z4s#sY@OC4W+(gRc(glmaT!`a6r^B3!`k6uE-IuJ{%JWEtS7$xSID!bd5?U~;PG z(Mo_!4AnO=Ctjp)zGS%$`+Sos*O5KlR1qfE-2tv}WKl`Oi)1)WW_(V{2k0%l=`SWi zW%Q2m)Io?Ucf19TL(LANHx_~}3=+MV!XUc8%7sXXgQ6;xNbbrIzqPXJ9bYEvx7+W} zs#jT4N`%agOP`U0^N(D=+HYowB=!|#-dDv#D7=md1VPGF#6WnUreJIo3ySWSk%SnP z*8xq_ueb10g(29pUgZ)aS)vFwVdcK8%*G8&+5-3$`Z(swvgV3FK6O$!5)`l-O5maYG>BG@vzVH-= zYjO@qqQxUzc{5s$^7PmB4VGfwTy*kn? z$?OdACRCO6tr0pS*jrp%?MwjJ{8tsOo1*!Ltz`B;CFc z(^Sq;ox)4E{c4Ufho zt>L;zl0!lpm?gtWj}qc2)wBkcNG`)jA&0R4G)Xh{7r@|>R@+q10da;p$hIG%RkS-x zxF*Cbk+)G&x~*`{K2*iqqP=X52euZQs3t**h9DM~cc2yD@MPO(XmP3vw4+17M|PrV zPLI4NrH=S%_eIrqDL10bY+>fhKk?zkf)M4LkP7@4Z>vmq>rsc?y;2+ zyi%D4p~m*)Zew!UYY?1VU+Q82vX!!ktQf3n<+p;QQf1s#fI0*Mt;jNfFDn0tbW!_N z4@non_a6l`6ewtKM@9`J()qzqLz50_(YD4B!P_w$1X4+G%MgWnR#QTnsIJq)N&B`T zvNE5T!>AClW!WTkU>d2Ptmn&ubY%}rhej?aP5fvlUKX5m3;@div!@-jJS;?U0lV)pd;Bu@v-{>%sG%tdZzhd&5HJmCr7~ezAad0;%+L9-e5}g$+s)I*)#T`eQZ;C^`$B#BByW$;Iv}IqywLV4Oly? zo_?I_qfMFAm_)(*SXY!>jk86VqB=}#(qf1)lJ=TpJ0#W!8De{-h=aaK~m)&61QrR?Kxu)(`Eh9zoUzo`yKMG#}%V@!6 z`naHeVocb~*&!E5VS2v%y4oM=oC0+r6(`}R-Vfy6JBKvgCKj?r19BX4*^^Z+1Wg^@ zFK~MVEXR00_)MarBz_Np3#8I9Q@5!eL4I<-+lbw!v>!ujaE_FwUMrEpzj6z|0Tt$O zpghP+Ke4yIw7ZGbGY^my8B|iYUbmhm*i2Y6 zuqUw&{;P~#9?zyYL#m>n2VrqUH($d@@sq6&Z^5GF*ph3}LidzM2i&%5Wmw8%(W@!- zv;c7a{q5FFK>ZoaL6?eymD=#ZxCqe7o6c)d-{bt^p);2{ghJSa8Acpk|5k~|lxSyp^hpM*K>&8f81 zTE;!?)R*0%zM>FtZ^VcFWV{$Gp4D?bxS0dR`4+f8+>;DaYc#%7T5!Or(>RUwlXn*9 zrV8G&^mF^xISp*>b2ddDDA*nL5uH+`)Tt{}Fi4dSaWb-McqAd!9KIm66q@@G4l0hd zljtB#748TmSIiO$;B%@pW&J~e^~^6l(8)e)V&)e$>`j$a^#Jzee2f%G>>nf~*50+FRdL72C6M*E(uqGf=>dGw-dUlAI4563lt=lg(}_pY+;&>1 zq$AbFIeb$6@>z2-B0Ywxr$;E)=mL3DI3g*F?`IC!K=m(2mABwHgSl~x*PZc+!!_H^ z;hIb@8*Lxmd=tXX9ZLN{SG37^`mzu5fXB2@YxWYXh89&(dMx{P(h-+hYp7gL;UyC` zY%mR}y}qa~D^o%h99`2ii8RaMWGp3qg?l~uY{9w@5m@)~5<6=um>pP1O8uZ&E;bkQ z=Jvi?sw;e{IcfG-qGb65vf+iV3K!xIdn;wE(>{-w861pA8obFDkKPjDClW?FD;}BC zE9CXkV)dlOubR#cmo}$)q!VW?)e)@YImlhK3|Y94BF0;BCeIH$wWHwq4fX1)U&u7$ zIw5hUc4e^l;V@rJCXmP=#-bf3^PFMuB^D~wCiHM*I(!%CzGG> zG~J=6>X^bPOY;lOa#~*rB|8h91-rjGlhEwsr)LJzr$mA?FXDE52wlTFk9LAq+U;7y ztjJ{MgttJD76Fak)2C4sZNe8l=*6fGIvAgaPk+N4A-!DRHAmVZCdfT{V<@>f|C?@QYWAm7L(6yT=rjvL}BFv$GH&x6|R|GCAr-}ve_HY=J5X>SBPskdqvTVjW{BoYQ zfnK;mk&a?Ojl=#6KSOc4SO}iUsv_-Jah`{T!9Wjl^BUDtQt5mFvJ{t-cZBjDDmYd{ z5YoQX!lN0U;n{3g5CTi1ArdiZEJ84(@BGOK9&h&)?vnDMTDU8P4h795A}ZWKJFsK1 z-W%om9o$?l?0G6J0dUegxw4?$HsyT}ZaZ|4_Js)3yOj5#B&-$v4{k5*hCC21)Fylo z*6xwgO5Eg(+-x29)hh8zw`Dds!OFkPbT`QrkP4}WR!fT7v&LR}XpUcjYHbUJADyIn zsTkADv@Q%|rdp`G6moP&*&>_0;nCo7;(=i>)|yJ6kV#+c!V=4ai78UqS&Rnk8q1_| zxFgprBy>e^L2kwnyG=AQQYnI5IZpF$rAoKJR%&$o{4c4Hw+u9$H>$a zQ0(t%2`yfEWuZfJMiDE{T~@5a4Pmmip@v`!B)wgNAdSa>P?<^4cxZ#D1nWT^D)>yD zapGsw5Gm6POX^LA#|sv?SnRgG_94_0wjom9Z0|x1G;z{ig$uko zyVJWTL~j`kYKfGdI1f1A{AEm4TQ+%MfS=i!0Mciz()_kq!7{`K4suT z*GYxOYt6Nl0Dxi`+BvxXep6<r_xy>9Fnq}SXG>18@DgIvty*IBs0vp?JRMT z@h6k0fR@s#OSiF{RLbOq@I6^hhbWnii%(I7HrI!jLfZnTLu)B;_0xD%;fX4Yp@N^G zs$!h0VVu)-`L9$res+VQXGu5Kj?;CWG<4VqYAK9H^;I07bsS@m43NxKpdVG!}+5VJi0P1}Yp9Cw zZH{kAIAYR3%G;*tmM}+^t2N*vOtqlx9&EL8$QMSZ4Eeh5z*Ki7oPZ*+qai0?x_j16 z1h?4}?CP?4%D5ZcY_Fn@r$Cib$lW$&RdP=&ON*|hl)E6I1y}$}sO4^REHQtq+yGUI zdCpo=K^RqxB)f`o_HZ|}mz8RHO;c^9BbRh;RlUFoHrVcCm8B9AGAYombW#3ydBEO% zm))rwF$98%VP%iimuQp9r;{x_fgW_F!flW}CRWxJ=jGM(WLq+->3Ey*#a+$1Qyt~b zwr=w|D5xtcQ0K(@OrWk77RkFShS2f=muJQg@7L|}V;xews|s3KH7>t-SYs1) zu{`RW%O9R`1(dUVM8u`@#d=si6e_%iN%%2MzG zsJ9xtpuD)`F97YerH3@+BDIc8 z@6nm9c-9@zk*eL(L4PoVKW8u*cZb>=8Y8g^smyK4-5MuXLtKQg+6gRnFTwAHeFR<^ z{0C#Hb6ZYb6^y{ty>TBWuU2s7@@XSJa3&o@X3+$Ex^!9SiXGx`8+(Q^a4>9Vk-Qtc zF9cRIyR-x&@`Z!s=_NkT+2pd)t%#L5g5WV{irN7`go?m%YVGB(7k}XSg6d`9{xduuMgDxV0uZ#{lfgy^ne%PPF3)#jgy2H2d zC)Sg=!w^$n&$U}E~SuH$~F7M?Bp<52uzlPfJoZBlT)2`oVZG@_Az(qM3lb? zksnNPBN=y3Dbja#_^J5}a{=2Bb?Z(C3%-d%LZVl2Ey87c=dwFoCXkL;`=T}mW<~tR zr$aC|avMqeU;}7yJ_M5ttA(7)s74ZcwKxev+`)%Ygfi4nkRQ5>std=KIj#4US386N z2ULW6N?+BGGtqwUVHFKIHO=q?DsQ0Q>(BO8s!>=E7SswGiD^K2s&DGux7cM_(jZK= z)e0_V##Kftd;aQZNv`ipxDbu1qh)mpHKQlF?b!!tnya+(9IkPFKE4$E@{KdRmQK!2 zb!LeX$4#TssNL5=i^_@EB_L4ttmU4f>e&@jxLL=rU>Gk`EnreE6?ue;#gp0~{o6|s z{I+enn0o?fBR#V6u~{XOWR~u@ta%+43c_=g>!^X!@(}Br1bzN{q!jRbRvgC7s3>y)FQUUFg28mwizFe`^nQ-8l<0^3oEVNc@wYEC-U~NW#H8|Yh-@3 zt^0-Y^dZ0TV_9q>;2^4C)6y?%3S=@7?0q+_(FWzFDr1p0^ISEFygm7`JNJF>MrTY( z8L@NQRER^!Nd3GFQB9AX<@ETR3W^SPdwA|04O$t7f@zz!38k1+a- z-l%r+vfYwdXtl1^xp91DE}+TPkZ?VmmY9@06smQfVap;d%32*PBF)gs(jzksX4|z? zD&&&BsF^6;f6-(ZKpv%RrTNH(Y)wgyz#s<3RiC2! zOYya@{8YwR4mloE=5hs>qTV3avTq?N8n-qh6&|_kA>6S~5{>KJazwJ(IW!&Ew)RhY zL-*a@u)jE)#)7$cFHY@X@SL)r+?8)+(BpFWfTPPN&Al79*WY9q9n|m}X@#3du?1fU zqLPYV#PRInw`Bw6SJMVW3=a{gPeWtKm`l3h`yv_QrgUbR5XV5b%Bd;p)cN$0KQMci zY9z2J!&$i+MkP)Wed1mYB=bv6Bf!m0W>5p_g3A&wWNRwy(z^sI(bGeih`o~K^{4>- zvwQc6tiBoD=qymxV)XWmrt#KtFr-6CkR$p9$IE&BPPd19Yo3MQu%B#h5kTDR{cM=@ z?SAMbq1XgpQPoUX@Pyym5XA)w-V)b8*+U|X#F%Y_qm4TV+-ASu&3<*G{j`@%DGKZW zxNeSi`G~poa5*z?7&1ie184B*XZDcO&r$=m(+TW3wZ6A!R7^>0 z%zhwm)ROzc@e+0HM~SD+rt?VR*D08MCaHWWHALqTcr!JTs!@6(<@fePs#k+6K)v9s zfOP+6@z|6+QEdbKpdMQj;Q+S2_ky)%!fEGF+kWD*>*mg_+dzDg>~ksu7W8q_Th8W# z%jD>8ueJa78@MC=4eV}DpT^kQ=9KDyYYO7a4RBGkn{G^PM1p?Q!^y^Yfn15j{IJ)) z-kXf3-5J7&cYDb5qDo1dn{OtI_V{uzn~X=e{orwTHlU#6tsSm8S={~Ro*%%?`K`%h zi1w%Gg-!Hc+tv(FBqbFAh53L0C}B(&!Q;4@2zj2ikut$IaA7wOIxJwrLE<~(r9i7X zNI^$~c(fhwXo(&&tpVk3xe`&ln8b8@*m*J|I$fu#o4wIgzqyAm#^xJA%cJh%A|`q~ z#r!RZj`WSBM{@;RSi?ZV#WDa+Q)ZPm%!li3p#0@XaDyTPoAmoV7$OL;U5-vmpf z+g1IZB%|qM)}1}`^&IW-YuH@|(>sG9rg(&EJmGl@_ene)ZK+N>Na4BQBeu2;=c}1{ zw^ygP_H@`DqQ@F-Z%2nVWBYL;&Axpp(}$qIa*ld*!w^doa|LQy;Mz|Y$#{5 zEn1HTim_iLIgwF5papzgE#TD|GTLEShx41K^T}|zs3}(rR`8L`{6 zx%L+I792@Cv3%dcrIqzy02>yXf=+h^Pg!Ut^Lo%&hcGTZI^0@MveH_A(1~ed9ZzN> zD@zlros-Hs`mrLGt*#sU=p5Gc#ac_BAr0r9YQl=_OH+UTHbV^!_W$^2MQQsZEp%00p0NA zVlcly=`T~dAt~}wzOASVptm*clF)RHaFs66VI#)krB$8P<0j3ZA&QNcLu71&hoVBJ|NKGY_%`Qy?~*0ffP^uEfug)7n<`k{h?e_lR&6J@=d(5 zBdgMn_qmIRQ$o;#wt22<&}X_yKM?py1)gdL-5QKx5|PPMZ}w=_nxg%(e<-4SyS=Ds ztV{aKr-P?$|AU?0FzL>OD=q_5IBr#r7}t= zo+M8fE6tUJMJgm=NTz=6d6%X&kCY7O@%hPQH3Z3R16d>X9539Pi^*uvtB10HzPirC zItsE0IKx6Z4ro$n-cKfvX2W{ui4Avk^hhO3VF#Q}CJM!R*fD2A4R|z9X8V)glALaH z8nNZRk($S&F|?Q`E3s)<^$cpO5S^lQ)x`j@2P3wjkypBgCIv?d^n%U4rt?M|&ke|6pGVcFV-)Dofhl#o6<9%x#FJLe_T9AHKwDS zFKRtpI~s{CdQBcpW%w3>uV>X;j;jLd)PpaUv`k{>)Ae0MFjQ8%O7^b4*kNjeO~@6- z35N)*Bv8Y9bjnKRl#<*hZLDBebw$U?`nXn_Nmth&Li+f1rQnk)ANRY9u4-Zt zCRLU6qOJD}>O;j%L+I(3LpW?9v$?M?d1xP9NPX9+_qI`Bx=U&6h5gWN;O9skIhm$z zF}91<99>+n6pqAwO!CAX+|;SwoQtti&)|BZ5uJ6HLsX!fPLpvzpu?jqSTE zE)Xi~WAy9fN|N$*H_(Vm2J3vvxVwB>bzfr+iO;%243}bk?nvppY0c$U!uiON!J^e( zQ;6~ADNgK|RWlmYA5N|#HQMP9&ZIn3Ayaa|+$rT=tw~}3MvxHAm5gN~ z&2%GtvI=CT4$r`xGVJjW$!gAPRoCr=WEK@q)O0zzpjtAUkd`vEzJ;7b7j=>Ie+D`woW8>&!0W=B zBo6!{un!oz`e6+-#F97l~3v1bL_4qxYc1rdux-`(O8ah(GiG_ zeu8|139c~$50fb%iqlby)bIZa?r0v4PM5rt(?ypjyVIpPjrdHn8EAnlUEJVwIKn0Z z+<4Z-;t8%pb4ZKW!|%pI4r?cNZhEvhs$eAnBTDUsdnV2>nGQBz07xopm*@+=LuM%t ztIBJ}IppJBM@G(VqQrrR-Mxx7jIUL4Q1p5&BMk!ive604a$CWzVZYh9Q zQ^c3uL?K1>MOj4~YF$*Qc0#nHrcmWJL3z(^ezf(e5-njyw67jhf@(Avdzd*-^imZ) zs&RnR8)D69EpN<=g;vWJMLXR|$x05hFoJbsFY+a%hovEoln^d^^CWY#&CI+W{CBIp z___99*v69$_CNsYTaOR(vxbQ+Y(qVx+obh?-LnDY2Q!zo^cvZo5#i}G&3Uu&B z2zIM#D7IxShs-^LOdG$1@^h`M4@_Ju<}{&Fgr#Jw6`}=Fq7qf^}yyI~esj0sX<|2T0fy#=2awC4r*5FW_K$G8jPY;bM`A%#yP1bK4@ zOV`Ee4#KvS>MetqX`jd{RP`q_tOD^mvMQ3${tOE1KbUD9>>Fhf>QboNX%jdER z=$%tc{8)yHj6Z4>kXz(W=4^W7m1O&{7EtW~r`-iYN0z6g__)`qRau`0<=m3Z;iMvB zX3*YL&|1e8%*5DKkolnxLQ5&yJejzF`*PZ451FtaD=}OG;K_HB6E^EtX(zby{glp zv4v_5U#<9NnKqq~09DVQlTc^OipU1_CRVQ}lRzq{&B&X=i0CS$SUHTkO6RW6)eg?C z1hv=2IWe5yZgl5%vQCU3Sy|BK#(h^I0|48>Vz4CkM*Me-jgmFa5&^tg{b&87=-Z0= z0caD;4o+v>=`kEm$Tb{y$9;C;`P{SIeH#_kM%c6R16Fkg>=umL;rcl=U@8~|oy4l4 z)6mF`b=eFhIcW;@5r~#JlMmZ{LACb<*)EHMPsCVME=b=XVeM0}wbDltQQN1EJ5aL> zX?n^AhR@1a6)&z^5j?)H83%-QiXD*<4)O zthbsbcZOh&36%~257kuMgy{mc4f!X6Vq3O2#l+bhm1U6eRNOa_0F z#249l&4^0NSE%BFg&5W0Z-Xsni{u>_WJ6RqiVu(ItJ}1}h=}7sjB2#Jqg%JjS&Z)^ zQ-e4WYGe%V+s2?GPAz{Jt!*(hbyq4vafqM0$xz_rOi zn6xHRI-A6PJDns*5>{Ih7)5TvEuN<{0&2|?WmrkOB`6A->Wk#77D0R;jw2oH%IY;# z*}S^zIJ|G_t~b1R>>{6bRa?hEvHD!YwvkcY^+i2R7=#dMzJzNtBsv#Rhxx3{*ct&g z*d+lJqG(H)FYJC+p}eVT_VYJxRnW-R5mA|tzLwLB=L zaT5Y-jzO7fYcT5|s;%9!Vhe3jsAX@G=I#hyEO5J+^ovA|(u?^V6YVipvKUecsj~Nr zL?vwlhzrcW$wq**0GO9j(^O0361~+G5*~Wjg2{Wjpq8;Kyy@EY!SmS!1s#$Uv~W+G zV8LNSQX;HYN8*5rxbD+zZs|<-I%2%Uv6@<7-IF**KlKaFT3uKdpFo-_54Z1}LBk|7 zig)llL7f3%2xRt$chqLI>P@XxtGw?z$d*VIm!;Rd%Z+5JI7FnXRMuM;$Ct~;)Rtc4DF zD^!}l;(OkB}{ z)>FJwT5DyI^C6?CXx0@c9_j!Fwk)KCoC1X4!5ye6r02?`cEqVQO=mDeN+yHwIBwDH z_mL$$pPbdpy@9yXacs-$UB?|GMQ7gWuv)ZECpR=K|2c0!dlkiHZ*+pjIY?G-T^Fbx zRhR~o-OScb>sRdUT<{XRN=5c9k}|bqueB%HV&;g&jX?KM`g}kMS3t-cdu#RUllcw< zuUFYowcHI$Q*wKqRbmm)cC8gxH0Frc3mkGk5g}ePWN&JFb2LC^yIIthsvy~>R!81_ zWg|waG0wfR)x9GJbha3q}CUvHB z16NCJlt0s1R~I+>&c2mvwjwUI7Q5LoZ_#a{Y=@c9RUMFdkt>+qCUOPpdoN_H)v0rn zD6;FAzqH@qx}T1+n`-rtFAShl$_h2L#A6=OAdd~vtevF^|3E6-N6t^-CeRe)t2i3b z&Pa}-eKGrd+;i?Kq&OJhS#W`)9fpKMETpi!N61tz;4PMbO=!MjY<#P86 zq2pajCmkj`XWbr-;B4v>jLz4Q`Wp8=^^@Kuj#&?SByUEi^95z1E$D23jKOcR`i zyLdjs6&5(hI8X8#5(+(^9kC%(HJq48e#x!iIha(`Va_EC?0Jc(_tLojLNw}9A z@y+owu7XHeZ{1!G#-UEC3qJ(T+p#)C&lCXV`QWAJiAjD*wc*1i`L}=(Q>I%R}F^)~jqRyxN<4;w+;Eb{o9Zp}U9{xXx@9$QGKN~GEYv?va*?v0`-+Qx7Dp8b#(1)LmLP%W>h z*Z`un){&zPI6mH8Ch>GJs|=F3K^5}qBkvd0Gf=S$;5GZL34H;7@6pMfXm>H$lSjpm zl)zk1ucmCkdf@NjnmDRJf^&g95Iwv+PQSt&I9m))@f9{eYz+hfP;srFxq^?q3F{d^ zw1Fd^BRvM%0W}7BV+dB$=Hea^_`WxNhC4vclB1riEf{SH(SX|SsC+uB4c*e$UqDf_ zLL#iWrCv7-sCPJCoJ^=0|)&L*rzSolp9uliZHy+22j_SLZWQMCXk9q@~)E%56(e_N%zd5{f3JHt`q?D$=v)lP zd@VtXuY;g>AERCsZh$nGzS+CtCe+J8FP`&Ehp)|Ia?_ruYQeHrS_hEw&lpfIi}esc z8hSKLTC?jm*o6VwL^h_;!yADnl$!`L?MX5od?pcMte*IiR%jD=`O4B5pY|$i$%6b4 zE)OA>nm}0zzm4N$+8xYD8=|@i@T%59SKyUWy7ve9S~uB&)DW`1f_c1&B0XGD8rW_l z{I?w+?GIoS$v_~lH)Zp(?q7t4hZ6M|if|Ex&^lyE8I0w7laF1lKxgOWik5Q-S zTjz%Qu+=BlPh1kd4bJRIMVmoRx!ZO0$2*L*$ zYaGT_WovCBj$QvQO4~az)-7ofzuZE1>xce946fb4r53G zx-O$g?;-Vq;V+90>8+u;8L~FE=73^lx_2u8+rl?95i&>B_mL6nCnZ&KGptKHLN$>~4g8 zfCBW}P(FUk$kz=9#6A8()y^AzZ2O(Tvqgk=@a4o{ESZhQ+N zILv$c-Wg0IRoBA~y1<`gR$|wk2UtZR4{{!WiJLc1o3_rLVe3=D3iP zD#enZAm$NfFP+$Hw|B(7BJ@Fg{Sf7iuutO*k=VA3-Dr}7aM>16rMoQA$=L+#coI|M z&xx>s^BM{xSv4R`%aJwDoZQYaCoOkF6PbN0n~*vYrNQ74mRI!~C3A!fCdJ9%kkSg= zVoBcy)qLlOGS_XC_8Po0u{^?EGrd$)O6FCky+ZZk40*1k|9_T_X~yV+q{_c@v<{={ zp!lj6m9Eseza~yIWV4FlSsU%QPL& zf3XFVS0;;G!8GM$ksjH#_+{FWaf(7)mX%!VbPo(#Z33rpfIV{`AhMJ4>#(bn1S5)Z>Czcd)|9496|q_i)k?C-z}59mBRh9-ZiG7Ryt@lQnZy zn-CbTtCs7;YNRW#Oo*N$#8r7h_)S9&X~OIkCLymStKz_2VE`Uc4FRU8wHpXaI8V{W zRi!#+3&=R$BaK{MrM^dWPi7A>t>l5`^54W4r7TZ6PSP7r#)yL2K~VT0 z*z9b^X+YMktV`u~11xiUu(Y5?%v))mHVoD=@Q$zoOfc?6Rp?r;jwqZ`jaJl5m#}C? zu`oAjP$;Fswf1%N>2})`=px}SXT1>x35$>R5OvHQ`T^|7vXyZ$b}DDseS+i-Ujwb}!Y@`KN6S`hq-dQ{ z^2t_GbW$!^l{p?=(ytIVh*io9oJC|8;(@FAFSJYx65@ zwd4@1c#^@48@CoHC0A(f8uTg!@Av?cjciin=+R}OpfQSc)P|*_*<=4jEP`oD%fIOI zl;EY5Fo!YUgxG7_iGmyP0Yt5+4?uFfvafflaSW^RN zjObQhd}L=$*%(watWrA0U73$zEqk9aQa2oqe!T zr{*&tjEHl0mf*ql++qB8rP0L;`#Z?%y;9iKu0}|o<`3oXZ5D|++YF92EZ~=)B_#fkRt4cOFybD&)Ip%x) z0ZO8bdngZw?}=@92C~R+EbmE!V>5eM0;Ok5*9_G;(QW9izw^lq)hP48UC+EvDG&-C z_;4kxaENJlhKvZD>KAoN40?<1x!~O` zj`HEvdZm@HtW+8I7gC!tWBP_yYfug5txlOG>X1Y&IK_u5ly?2CQ&SUS+SV4DvBE@Z zsL3v0*Z$kM@(={rAYHOb11&wr7OtVQdDTd&Lql$H7{p}9IMa}gFcoeM^$uduv8Kk= z1zRHecKUj#I&pV^tz=H~!3U|6(2g_hE_xTFoCw>xn7Yo!D+KaccZkzoq$bfmQ>4z- z)KxG)jq55!^HUGiGV>EuhC=g0yb015Q@3z_>_IoNO&d*sOeAmw7(jWSB zN;>fRwpe34JF}Q0Eh^xY+dTuQ`$|I|3kk+`G4fd$GC)UVR zfxuC{ouj>fG8*)T{l(cd7E(%l*pQ#t6b#)TC$j4wpcpZwOv5@YFo}aAj)_c`UM`XA z$=(Kue05Y4h31LeS*)pyY{GMn!+4Qh-Eo8h*%I%1~F{w1~GeQ_Nj|^>oKIIkC1+yj>Fb6A}yFfDg>o0(wwa6 ziMz|EH1CQMKAkeyN0`#SJ~Xu}^${LNkj>zY*^sH69zRS~_6u`OUO#5fpi@Q}hZyMX zb%=4^utrfXvWMDybIAcmJuFk@f2d5S3`m;rqbmgxvkszU+;H4ANkXp| zu!`HRI_(PGb|=}xu(gix7B$+J#{g+%IL8hP8wv-C2hW0&ve+Z2Q8;NZQ@@&8bU00p z+fqIqe^nW0f2$Jsb}HlROdt6yxowN;Zz=f~H9BVb{4+p2dhZm!MGMi0i>25A( z1a6j`!|gtMmcjvF`CxtMlN&A>qTOg?Z*Oxuie7(xb7KSlk2dHP{C{^FB-n|f%{^}N zQy=;_+xPCga_w46{akDPrIz`mzHPO>{twLGKhA&tc}k|Ml{t-akEfe*dfegFpXaMt||~uYKRad%wx}EBJWD z9>c-&pZxl7GeJOukAVhXe{cDR&+q>su>3j`j0eEO6|WJkzPFe_YFJBG`lbSzt}07n4_M^qqsB{{63moSBh*;q`BP z;~R=(2k(F3$K8)V<$U~k{`mgi<(J;)rZ@i{P14O@rT_Dv3f9kj;g6y1M}LL?`TQST z`)glZeCXH4cIuDA@@c8_gAM(_~>8zC+P0?zJ&h?NuhiA+N=CUaGuq3 zdjh}qmH_fa)tmRF@Amg(2Bcb*AJsuntdYF>1mqgT-tx4X6 z*Go%^Lx{!p=W;fgEA)v?hW-)aSJLfI+kH4sUSmA)*y_qb;d7dw-xouY^h^`&;A=Ni z;s8K@(KI#-9{T{(MokPL$v=6@T_we)>(^O3`@@6xe&ZjuzK!U{VwM|WKmE?0J554~p{C*U_5FX!XeGY%%=g0B;|Iiosq0gZoY7a%Vh2=*}vqkIe1Ni+Q ze#zETcHN)E-`|U0vi+1@_d5RmIDY>Oe#xHuv-tf4et!tRKaAh60_ey79RBzmegi+e zzO843@3+g(3OB-wzT3d>7xBx+B_WLmhmVgt&*qC{6mM*9;;YZ$_j2~hi^(XVf6tN3 z7~^0c($Z%1?#<~Gz5p&HI*&ItuH$XdhTtTN1#b4B@3&e2*&SWZTC?QcA3?z8>mba~$D)BlfV6S^MjXn-sL`{}2gPoHkhlW|`le`~o| zOvWb@)EWnd^VV>3K1?o?VQVn$w@$mgC+D-ta%}(kXrAn2jOdE4?xeb?=C#`x^sIZ3 z49+hW*4Om@akoEM&RgfRLI3t-IGMEw^_w_FE zHn;>G@8e|b0ENZ`A?B^+91S|t1Sh3t^VVGcf%`VDy0iYLyH^j-&gRKtKRKTz$sFj+ z6S{;A7$4D%ETXJKO6VNT;J*T zlZWG5-TsNBQEN0H56|O4a@8U#-Am59y=V8`FRhQ}^?kuH_i^Ql1*HAV{`6*o*@BD6 zdO>}4zx#ABLLOkByFE%~XK&8B(+jXH99Z`!sOdYI-NBtk;G}z9+}|Rf+@6f46Wl`P zeYoG9Uz|=bVV;IW6yg#vCOy@!wnPH)0T9Kr*6nA#VRB3J>fs1Xb21p=?z0|N(V{yT z?kA%OakSuw78UEb>X@m!GZ^R5@pQSkh3AB0fAV0mAf`B(ya|@U5W#9QvGi2u=wBe*VP7Hf;Sw_BE&LzX><|?B z7`H@mn<=iJ0|yezp5YAo#WB`fYuKGH9)rKZxae}w^L(>U@4@FNNx)0@&F)})?ECUf z-&g z!l_B(n`0)-U&bur%a~*|{hZ>)#wQPZOI*#<*}wa6{1E=y$H#(SA5M9#reA?@6wk5Z z;l-sJi$}DC1Pxm~NXSJi=@0skF&*^p5&rG7xQ>S;3oj;1IGrJpX=x8eOY2W@uoD!7 zI73s&lGDNYl0^`|Wj?ZmZ%t=|QFr#tl4h;`=>?p+$bFUw-5M?vxN{d5Elbe#E!j2? zJ^+yp$1HC_GFn5ZmH>)7ZN;b$N6R~4ev_+k-yv6yM2xL-4bBApVvQ<`AsoK8u3KBpy#DM;8<9UNkAZ6W*acGa2`uDU2?# z)0~rt8uW;~SmIdcbc1J$r2KMzb9mK#Hh+lyZ`!(#n&c$hP9~7E&sql%#z&Lsayoze zA^~I4>*^KAzaI9KF@)~|dw~A?gtG5Y25)etcKX&nEmkZJT;X-vdXhY2QP)xefg~gD z0mS;6w|M{fl=$b#5-7ODfC;j$z;Sky#OhCF_<6AuF~JX8TcO3mQhQ;f7AKCv%tbT$HG*-i|Otz z`-2Hq_~PMwKRN3{9i!N(!&|KLm?h`*f=y zK6QlnlES_vzcp++S5Kfyp~cDMZOT^ePtMi%l8?Jka>Oo)OsVeZ@iBB(HZE|p?R?&v zb|HX`Cisv<>bQRjQLPj}wVL$j?yQF;FVqv#A0dpO4$Yq|CR3qo>!woorrl-^D+0g}>fYi3u?IrZ8@q%6eDJ}=l1?cYw2^2%z$4Q!u0)p)V z(z-id9Dp_{O{K*q5?MN^Nv>-7@gE>@- zx4W}3me0H;uo_}(Ik~_#J%?iVip4NrCPrZBMQY)HRB$4ekxSlj`q^$`Ff;xicLctFai z-eU2HRlCpOvHE=-f8#xxC9FsE#W=~21RjmHTIc=V=0>!`mSGE)B~s|r z!mj~1$E-*)J;_Grq3{KZF!4a&Dfa;c@hUS&(ih@fy(^a(X$$y@-%}d7{z7ab>e3N8 z+#km{=$B&Puj3a#*WjjL_XIj)vmoAx$UUKd==+Daa7}YELuW$k#dp|L7f{S@!YZTW z0Eq@OyZUf@H~^pChNggTwpx#m#m z5;TPAf1W~oA3+@N>nctv1DS3rSH;(DcrGCKNx30Oyk7_2Uq$<`Doo#N|Iz0^`$x#D zFtMwj4flpe(1$(}A)2%M>EFH9`aiGXFZ$*O@$c~`{)=m^FUfCq-rfAU54Qg4wby?2 z1FfHa<+WeTCbY2U`EttFQge2U=fy^*_G$e|(_z z+aHvm-oU?~ef5{Fwf>$0{=@jD|H{98t@R(NZ@9Zh|HHM`|1Q7z=#Su?=huGZXJ2Xk z&MN}YAN$w;oomluY5k)7_>mvN*FW){|L(QcFDWSQH}=dTJLM0U%FiGD!2!a$G_}uL zie{h!=QJul@H{q?^5*T^Klb`3-h`?*nILoXjmgWvwM&^#%}l78ujax7anKk~7^{>trt=>tE37x0mu{RR3SKcA%ksps#Q z=YNI1$4}__Ulorz*HgEDWZM7x1<(J1eEtUgtNI_9_Fs|Dzu$iT*gXFu`TWE7^Eb_N z`uf^uj_xsKKKQrk<$77YUxC%WwPO{knno&n3M7-1pvp zV&40(#Q*>Dz4r&^y>0p4UrE!0@OyZTU;I;mv7p#0e%_`3DVn`9`RBjH|G$m?Qm}~r|Czz-cS^iRczu|H)cB!Tw1#yo;L!6QkWNey!X8zwBKJd{xEuegPN6B~ejvt8vE-5 z&+N;cnLBgt3HH8FnSK(r^zc+(8go3}N4NyzBvxpX1j<28q7pzx*7( zH~Dbk^#sN(yR zFIN00^2aLvZ1STNe>M4&6@NeZ(TabI{CLH$kGd=IoTT`@$h$tu<=ZgwrAmJa`7*^{ zNq(l{?;?M`;-4d5q4+P!&ry7LL`>pet@wfDFH`(D^0kV;ocvtH-$A}k@h_0SPVq53 z^(8*_ikD}<@V6*_82S0+yAY?6U!eH8;?E}kn&N*)zD4nWC;zVESCVg4{2tgaB=KCX_@U%iD87{Z=Ze3Xe23y+ zAiq-aa@jeyG1(9{K?de{yvxrXhVL57Lw_JYm!C&b-|0D=Nz0t=)E`MfBN4c{(rQ_~c zJlyEZ=^guv>dQ%==&#)9hx~Tl?apSGm`6bTgV8r9ZOjd){|O>BIs75_`}wTi!re4XN#lCM|%$K>ZLeg{-p$%h4sA4Yz$;>*Z4 zDE>C`jf#Jse3Rn0z-C7Yw^{K=l5bIbihQf$?<2oL@gI`!Q2fqlS`se)Grumpe-!yH zil0N?^)pWYUh>_Q{y)g)EBgNi*DUE> zq4)#IcPM@md9zvAt8Z75?}Blw{9HY3AfKoB&&YRI{2n+wD)Grz{0ZcHD88C}f#UBa zFXMMVJ|B}WQv7b1Xi2yU#UDeySn&LcN=c0;twQ0Q}N@; zS17)Qe6`{ikgrwztK{nxpNoy%rv58_5c&CvpGkg!;_o28Sn)5CZ&3UO7#K*njfx*g zzDe=3$TutgLGmq%|Ac(2;y1&hlZ3lM@duFaP<#n_vr!%e@9OzQf_s5#&cJ zelGb*ihqQBsp3B;KU4ABVbMmytx)_C}6u;%}Ha?AtKb(A%;%Ad@R{SFJEsFn`e5>Mj z+rx&tLh+}N?@)XVd098|>+OT&yD0t(@_CBidruo~cg3GbK406dia(9KIoONxb?vu?e3uPP zu?PH}bCi-1F!3OX$yh6>c@d?V-ZGgM5MF zmyz$U_zw)fO;AoQ-1YXCbZukyC`*(apHCjse)Dtu0K<2Ub=ku5IlO-q`Hd8R68Wx* zKa>2%imxEQiQ*-g&gK+31N5M?u^#3T5U(`;Y!r|#{`1MZYljaS-d)-A=;HV#>a!UI z{hQqD9K)nj{gzWd-|?<;Dz<8wb#g(?^J4Fdzb!umfJe8>j3V`pdKFU!KmG8*`VMbV>r&zLr}ckk0naJ0=FfaB5mVPj64 zI?a5!EStjQDXUjFw0!az;{zWG`ydE=T<9pA!wUF51*eykPl1gFd(Ry0!7-y!94?+P zLcZP<#Ic_!@}v?^65_1k%n}?h43+k$ZxOvga@0N4IUut~N6QDzL#+XswT4W=7v3g& zA@+yf8Dwz~8K;@c&XIG7INIoYha4`SqSTHZGcgPg`4jkK^Fof(o#ADG$*IF|9uPJI zY&a1Q%x#UdH<-@VFTG$avd0 zA3PP7WyJ)G$)iZzP1&L#hmAoHGy7zWVehC?-^@y;0>G!^VDDh+v_2U_i|VY6Kbf=C zlqtf3u?8H`%#bV_(B$zr5-UbyGU}MDDTb9>TiipYoH{jDg>UJla^qFsEZ-ECgN1glRKymKFzgr-g0b zrZbCbe2UksO}3(2a!IsxKiVVtP1eRxH(9B&u5$>|pp~RQa!O%AYAxw!ymRE|a2o{f-h6C=f zgD^eN?rl2L@Th3!Ap7i(BbDJP+TjyQ13OH^CyYV)mkcT`5ByxSHV*NI+67ttHpXs3 z#lozL!;G1uK(qG&5lx(b9zWS+z_2mXPY<=Ci8^-Dw5erfXH1Cb^cfKG$xpZqvxEn> z17G`QPYzueTQcKu9Ns+{`}SQ^Ah0*&q8C>2!UN=htu+S5hkoFtEml;2xO4`VtTA;Y=^_Vl$#_XyJg; z$rHv+ID0a_6b4f&)61rnk1IpkPaIm#&oWI%=9(%5H9FSo)0Qu5Axo0r?x13Yo0&^R6}fk7&1{6Ts3QTK-jCg0#h1_+@h zi{JTVYpxyKAXaJW=uiECtva5snRHboc%a>$43|+%7zy-HzOP0Fy}C0wx29P5K94Ff zJR<1diutv}RWliGFYN`@XZGQzs4;Q+LYu-YOKqvN(++geh%G)mmM2bFeXhtjAcJARs3RHE z_(>e;TMdk=?ym~g*%n0e$z)Pct>CSvj?f0abMN$!x%Xis5{nzq;}dz zIfVf+YsxHJ>iekJnb}Du8!%($9fh&gZipR zhi15CX0@~g8ffaWG)4zQ3!#CYe%f2RMs`FYokgIiOT}hyHd~^BGyNE+Gujvp)Y8Th z8ElV+%BrNr)&&~ZgAG$%#noUbgOkI*yOTqe z6a91^6t#|;)^V!#Y1Mt>soI4eTZRFcN@*>Ut;vyTJcnntzZ&GRE@<|Aw%XAyYoM%0 zL5IpzaJ63OOJz{e=E%j`;YvHuFcDp~jI?wHz%=YRmNe|s7)U)dwO==-4_ffF&n_j!v zHS%U?0$9h~J*teNv8ZQF1*hq;Q5rq_oYYGOuF`uddZoa%TTjK<6;_!MiIfeD6YOZ+ zi+E>yu{C;U)iQeLI${$$bUB%g8|%jdNASiGpICw2W2NhsGC0l{HaxA|+$a-mbsEx& zK{t#er)jx}DlKCq(KDeOtuJnX9(6PaD7Nr%QplajfT83mT?Q#=8SddwCs0}(Lf=C`RFi?94`gR z)~@s#?w=6e=VLT*?^&V_l{h(3O4dYmsHGETz4F3hfd}3M6aK&t*Xzi9Fg;_~>zJFt zjL{gsj%Kl212T$c=wi)a8?)F-mF>$0s10UEb$hcLHoDG?wr+#0WJbrgu&umef2_vUAvKGLYniAI&i~p?Z7wkt#UG3 z7@_TN?I25@B1~rzT;-VSvvjON7l(gm7l(dl7Xy`xY2Ml7R~g~@_aLTXnLaF= z;onU?tti>^W$`_&99OTd3(>8-MSRCw9`hbhN1Pp}$_-~n5bbVWT%4BWYGZe3q z#zOOxrW|BR8;is`%;rQVE)rT6N10ORh7f)TyGki#xOWL8lt6--ELl+mFV@wNEoEOlzNRVruW2|1n0g_W7g!xDvLS$7V9!ubzIc z?MGasoAuYOIDE9Ouqd3#qwqf0fE&J@>0Z7YC>!>)(*8!rL;N~;I(tCP_vc-iO zd`P;F3Pe40`5&qe48A!K)pXS()WlXS^GSjrMQ(N&s?bos8G#3C!Rk*CrNBW{(WUlG z_gRCq)CQ5VpBl1BjmBH{Aj$K=juJ}DqS%D-hn_P6i?ZUe(q`#Xd#Lxp1ohmJErjB) z{~3k!_%U$r^9pG?ZdB*%n024<6AUVj3^|hn`9_0^sLO8m4m#-G^_a-DZoHQ%;R3t+ zECW8*FaiekC(qQKhHI6c8~c`TVDXU5F5L6ZbHR7~W@SISJC4{qcj0#>vIND#^qhF# zpIEb-OdqJAtH@*D)q4rY|9*uk2)D>$q7zx$jh3&Q4%>al_*8)|DAz86&tPQL2tJRI zrr~N`s39NB@IIiCR?^JOr~_%4*)*{>6aDZ;S|r@F!IXU3T{r5tcjZe^>7V7$9Wf(m zotWA98r`@twRID!yU%>6AYAFVkAI{^yLSP0M1`LNN!t>&zkeG$r|@x*G@U}x2{$>W z-N)Fae2VvV5WH13>u^CID;=ZOuuE{EitR=`U-)(cixHtxZ^Xn?NslTPLdwm@@!a=F zj-4>GOty?gHr)4xH__#wv^1fsEXQ}~7zy}*c<4=nh;md%#%M~(?gWN=`V`&ND&3FS z(#E@H&2PHhmL}URWhos`wHXuCX4u01NCDlXXM*GsZ<@UjI&r})GWhmYi7DPG*v?XN z_~1eE6_y~+-7`5Hs(8w>#vf|BS!^b6u}vman*j1 zr!Y7pOjD5(@Ygxh6r@##-<(OiEkW3azWV}Anu=+3s8@FLb%vT}PZb0jXxo{TOv?h+fCSxylWaBk@F;honM|B1-q{o_KV}USO@9e8c_jM<%G6$uwHtJ)%P1^`P^xb*r zHo^NI7fRvTZZj>jq?rX9(fKtVwGG{D9Sy$JqkWKJOW;G~2!QgYw{)lxh4gA>VrpNe z>2P|RzBc^uk9U74AGE_!IM|jf87*I^J#LKI0n7&hn$)S2C#rjVuwjE`^oDFf?lT4( zL+~BssnbfvOq+F?enQnKZqsZ_{R0geG_OlzH z;TB0ed_vg}e8ATvT(0H9JRNWZq<3ua@jbCgqbK%j&zxCOien2?oq zFvtZQgX=B1D$|RgWL#J#C58R$UX!7d$Cix5o^Turk_4_zZVxULA4X0&8=o63L9>;Q z=at}tY}lh)GH%l8C8y$Zz&d?$Jz`RM89u*@gJpONhQ!(64k#%ZH*;oTVPWsFW2R3Y z2Y+N+_Kh6=wDJiqO9Kxb2Mwni2X|tJpPYM{Vwb$A(RZ6 zZub}9lUu`&{62x19FSDGM1A)N!zCg+{Kye~r1lOl@j7BEcGi5a2-(z+`+g;3>jkQi zq=*+kLWE3gj{NR9v%jfJwzBsPE4!I-A33i0G$gWjVaTJ}1V@KvAWPX|@evPvXmy;a zv;2@D%00MbXO7cs_#Uye>FKf%HVp^5@V#Pl&5msd&Vry{#<%>ydYv7E@fozj?~&ZT z(`7s?O{1_7&0$=r{VrqixHH4V$isAUnK}75aQcXI&Kx^c8e!o8>6r%O1%h{9`uoD( zagQ;dsDq|Q4V)gIG7;aborH>$)pl@Smtyb?ZD?bv2QKrDF2|0BIQ94+8=;#BKObh{|CxpFLQ_53pKY@6MOpY`J>D;u(H`%|v&`dt{VI?5^?&2> zzW(hV@9W=}g?}as|3()6qb$6$k0|-(_hbL^^!hXTMJ|nNw^^K?Rr>hg~<%qtYuC220J7nPp zkrzMwbWO;@%lBsFC;EQ6%01ps*A3)#x_V9`BdeH{@M?+d&Fdeza>P`6gpySKoFgul0*Oec%7H zJl-$In?2qymq$F_FPGOn{$ejapJw5^(VmvX-yc`(6^jf%gB ze3RnccVwCs@4o-iqImb+mR7}oO8-|VUcPTBzYYsQ{UUv&JN^*z zd5S-te0RlYhTs}+AK`C7&Qo_w9+|4hDK@%NFR zuXy>Mr~DQu{$uis6~6)JV-1SWC*P>}q2!wsKaqU1;?E)9qWC2FR>jwoU!nL1$#*FJ zY4S0)8@VmiJLJ14{tNPXir<*?vF?h`C!eqQ{mJ)G{1M~}6n`T5{)#`7yz94I{42>P zl>W8kixuzew2xB!tJHV>ob&%H@{^Q)XU>;O72lQoOvO9<=M{=~_Rp&o@9c`#D!w=U zuT%WN`o&OWa zyLDQ}Pb1%7`EwchBE?@%KB4#p^@?}%CQ``6k6* zMZQ__H20VTzPfjJT_19dy((1_`}KP zD}F5b9*Vz!e1YQY$oE(L-Q~UiZ3Kzs`v!? znTmJw^9se6Qoma9)#Pgx@8;)qieF6qdc`-9pRf4$$S+X*XXFE6LAS{FUSvDBg|h7AyXG z>NhCUd8$gfcRhPk#}IuySpd6@P$KUY7uC*MW! zdy&smd|&e26<$hOBgywr`eVr#DE=(+{S|*M`69*3_p#-dQ2gcOixqzZ`B93$ zmHcSM-$UNL7jx-)kbJ4qf06u5#mjfOB_f zmylne_?hGvE54q5gW~^0zESZHlW$V|6Xcr}{|xyS#s8grtKwfHze4e?$WFR!WzNGimEb%|e)8E6>pWx}c?~;f=6Fr{l zCjMthr1;Axy8L&1k;fnINZ@FXAL8*99)G0A*L(ahk8kk!qrLdFczm(Pn~39{izhz! zYkvDsNBGk`{UVQ-d;3`R*bt8&>FH1Mc+oH5b+zK%cZK}@Y~l~M&jjmoE}rgtN&dby z(cg{naqDSL-+h1QEiYWrcl#hs2EeV;cm32xLXa2zsrE9~!{bGC-|H##c+tO*`o$hE zqWg}|2_7%{S5bea$BXE`?^CCE_kEw6JYM|yJ^g9$coE%qd>;3B(O*b?x2__$<3w?CN9Xg3bAd_Nv#-!)OapOuR z80�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

aE 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

$6L6LqAXO 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�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 c47E*~5YaoBV@W PathBuf { + let openvr_path = alvr_filesystem::deps_dir() + .join(if cfg!(target_os = "linux") { + "linux" + } else { + "windows" + }) + .join("openvr"); + openvr_path +} + fn main() { let openvr_driver_header_string = - fs::read_to_string("../server/cpp/openvr/headers/openvr_driver.h").unwrap(); + fs::read_to_string(get_openvr_path().join("headers/openvr_driver.h")).unwrap(); let property_finder = Regex::new( r"\tProp_([A-Za-z\d_]+)_(Bool|Int32|Uint64|Float|String|Vector3)[\t ]+= ([0-9]+)", diff --git a/alvr/xtask/src/build.rs b/alvr/xtask/src/build.rs index fb6183ca67..b83560001f 100644 --- a/alvr/xtask/src/build.rs +++ b/alvr/xtask/src/build.rs @@ -184,7 +184,7 @@ pub fn build_streamer( if cfg!(windows) { command::copy_recursive( &sh, - &afs::crate_dir("server").join("cpp/bin/windows"), + &afs::deps_dir().join("windows/openvr/bin/win64"), &build_layout.openvr_driver_lib_dir(), ) .unwrap(); diff --git a/alvr/xtask/src/dependencies.rs b/alvr/xtask/src/dependencies.rs index 9a4030466a..7179bb2686 100644 --- a/alvr/xtask/src/dependencies.rs +++ b/alvr/xtask/src/dependencies.rs @@ -11,6 +11,21 @@ pub fn choco_install(sh: &Shell, packages: &[&str]) -> Result<(), xshell::Error> .run() } +pub fn prepare_openvr_sdk(deps_path: &Path) { + command::download_and_extract_zip( + &format!( + "https://github.com/ValveSoftware/openvr/archive/refs/tags/{}", + "v1.16.8.zip" + ), + &deps_path, + ) + .unwrap(); + + let final_path = deps_path.join("openvr"); + + fs::rename(deps_path.join("openvr-1.16.8"), &final_path).unwrap(); +} + pub fn prepare_x264_windows(deps_path: &Path) { let sh = Shell::new().unwrap(); @@ -90,6 +105,7 @@ pub fn prepare_windows_deps(skip_admin_priv: bool) { .unwrap(); } + prepare_openvr_sdk(&deps_path); prepare_x264_windows(&deps_path); prepare_ffmpeg_windows(&deps_path); } @@ -101,11 +117,12 @@ pub fn prepare_linux_deps(nvenc_flag: bool) { sh.remove_path(&deps_path).ok(); sh.create_dir(&deps_path).unwrap(); - build_x264_linux(&deps_path); - build_ffmpeg_linux(nvenc_flag, &deps_path); + prepare_openvr_sdk(&deps_path); + prepare_x264_linux(&deps_path); + prepare_ffmpeg_linux(nvenc_flag, &deps_path); } -pub fn build_x264_linux(deps_path: &Path) { +pub fn prepare_x264_linux(deps_path: &Path) { let sh = Shell::new().unwrap(); // x264 0.164 @@ -138,7 +155,7 @@ pub fn build_x264_linux(deps_path: &Path) { cmd!(sh, "make install").run().unwrap(); } -pub fn build_ffmpeg_linux(nvenc_flag: bool, deps_path: &Path) { +pub fn prepare_ffmpeg_linux(nvenc_flag: bool, deps_path: &Path) { let sh = Shell::new().unwrap(); command::download_and_extract_zip(