-
-
Notifications
You must be signed in to change notification settings - Fork 515
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(client): ✨ Make lobby use passthrough #2485
Conversation
Tbh I would quite like a toggle. But there's no real way to implement that ig |
Personally i'd do without toggle, because that's simpler. I think passthrough is an improvement from the previous lobby in any way, except maybe contrast of the text that can be improved. Any specific reason you prefer a toggle to switch to the previous lobby? |
It's a weird personal preference for no passthrough, but tbh that's not a real reason not to do it, as generally it's more practical |
Ok, green light then? |
yes but not a pr review lol |
Ok then, I'll wait your review when you can |
Yes I would like a toggle too, atleast on the AVLR settings, defaulted to passthough ? |
@ShootingKing-AM for PhoneVR you could have your own background. You can for example have a draw pass where you clear with a set color, then draw on top the texture from client core lobby. I would be fine with just leaving it as it is with black background for the headsets that don't support passthrough. |
As far as i understand, i(client_core implementation) make the texture and give it to client_core to render lobby on that. Pass the texture to Carboard API to distort and render onto screen. This shader code is not exposed to client_core implementation. Where should the draw pass come it. How would you know whether a headset supports passthrough or not and what is the passthough specification, what do you need from client implementation ? I mean i can give the camera frames to client_core to draw the ALVR lobby text on. |
The way I implemented it is that client core does not deal with passthrough. In fact OpenXR apps don't have access to the passthrough data, but they can tell OpenXR where and how to draw it as a separate layer. While OpenXR provides a compositor, for cardboard you will have to provide your own. It doesn't have to be anything fancy, just draw full screen textures on top of each other. So basically you have to make a render pass that first draws a camera surface, then draws the texture provided by client core. You cannot draw on the client core texture directly because we clear it every time before rendering (to avoid the classic trippy ghosting) |
So i need to make a texture draw camera image per eye and pass the texture to alvr_client_core and it will write lobby text on it ? I can only transfer textures, presently drawing is solely done by client_core. Cardboard API takes a texture as input. |
No, I said the opposite. You should not pass the camera texture to alvr client core because it would be overwritten. Also, the camera texture would have a private format (Android Surface) which requires the special |
956e2cb
to
314788f
Compare
Oh so I have to get the lobby text from alvr, discard its lobby gfx part, and write the text onto camera frame and pass this texture to cardboard. So now the client_core lobby gfx is of no use, am i correct ?
|
@ShootingKing-AM i mean you can, but the lobby code is still available if you implement a compositor. I highly suggest you implement the compositor because i will do the same thing with the stream view (i will add some config so you know when to activate the camera view). More precisely, you need to create a render pass that samples first the camera pass, then sample the lobby texture, and use the alpha channel of the lobby texture to do the blending (0 alpha means only passthrough, 1 alpha means only lobby). You will be able to reuse the same compositor shader once we implement the stream chroma keying, because i will pre-apply the color keying |
@zmerp Are you sure that all headsets that alvr supports have passthrough quality that's good enough to warrant this? Quest 1 looks pretty damn awful, so maybe the old lobby would be prettier? |
It could be a toggle |
Fwiw I really think we should keep the code for the old lobby in the codebase and architect it so that we can change a single parameter to switch it. What we do with that we can decide later, maybe we'll just make a normal setting that gets cached on the client upon first connection. Then we could also just have it as a fallback if we don't get the passtrough permissions (not sure if the user can actually disable that tho). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgmt, see my objections about keeping both possibilities tho
@The-personified-devil Man, i know you're in favor of no passthrough but i'm strongly in favor on passthrough. So what should we use as default? |
I'm not seeing this a matter of how pretty the passthrough is, but how the user feels when entering ALVR. I feel like passthrough is more welcoming regardless |
@zmerp I already conceded that passthru is the better default. The matter is more whether to keep the old lobby in the codebase |
Sure, pretty moot point from me |
So, i can keep the code, add an option to in client core, and leave integration as todo (with passthrough default)? Or you want to have the switch in this PR? |
Yes, that'd be great |
314788f
to
96b8551
Compare
96b8551
to
34e3c1c
Compare
@ShootingKing-AM I've updated the C API: fn alvr_render_lobby_opengl(
view_inputs: *const AlvrViewInput,
render_background: bool,
) Now this function takes a |
@@ -208,6 +209,7 @@ impl Lobby { | |||
.image_rect(rect), | |||
), | |||
], | |||
true, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note to self: Need to change this when adding back some form of toggling
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Technically you don't have to but might be good to set to false if you know the layer is opaque. The runtime might do some optimizations
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm, if you tested background still working if you change the params you can merge
Nice, but when cam feed is available i need compositor to blend in both camera texture and alvr_lobby texture ? |
If render_background is true, nothing changes from before. The lobby texture is opaque and will render the floor and sky. If it's false, there is no floor and the background is transparent |
* wiki updates for flatpak stuff (#2401) * wiki updates for flatpak stuff * explain difference between native and flatpak steam more clearly * give examples of using hybrid graphics with other fixes * notes about wlx-overlay-s testing --------- Co-authored-by: failboat78 <failboat@ocean.world> * refactor: 🚨 Use "crate-type" * ci: ⬆️ Update platform tools to v32 * refactor(streamer): ♻️ Clarify distinction between bitrate and throughput (#2423) * chore: ⬆️ Update some dependencies * fix(client_core): 🐛 Fix potential blank render bug This bug was already mitigated on #2397 but this is the proper fix. Discovered by @nowak-pl * Add Quest 3S support * refactor(client): ♻️ Use VIEW reference space; tweak client API * feat(client): ✨ Add platform vendor shortcuts * refactor(client): ♻️ Move decoder out of ClientCoreContext; fix IDR race condition (#2421) * feat(client_core): ✨ Add `alvr_initialize_logging()` (#2439) * fix(client_openxr): 🐛 Fix crash on Focus 3 with 0 timestamp (#2440) * feat(server_openvr) NVENC AV1 support (#2438) * Initial attempt at AV1, ffplay is happy with the AV1 stream, but the Quest 3 is not. * Trim out IVF bits for NVENC AV1 * Working OSLog for iOS/macOS * Not AMD only any more * One more bounds check * Fix writing AV1 to files * Remove logging changes * No hex * tracking rewrite(1): client API * fix(server): 🐛 Fix IDR resend logic (#2403) Co-authored-by: zarik5 <riccardo.zaglia5@gmail.com> * build: ✨ Support aarch64 Windows host * fix(client_core): 🐛 Fix wrong controller timestamp Fixes #2445 * Revert "chore: ⬆️ Update some dependencies" This reverts commit c08e67e. * fix(server_core): 🐛 Fix tilt mode origin; refactoring * tracking rewrite (2): server API * Negotiated encoding settings for OLED-based headsets (#2442) * fix(server_core): 🐛 Do not crash with Custom controllers profile * fix(client_openxr): 🐛 Fix blank flashes * feat(client): ✨ Add Pico 4 Ultra support (#2466) * fix(client_openxr): 🐛 Fix controllers profile for Pico 4 Ultra (#2470) * feat: ✨ Use generic loader for Pico >= 4 (#2471) * Create iptables folder during firewall set up if it doesn't exist. (#2457) * Publish tracking data through VMC Protocol (#2461) * VMC Protocol implementation * VMC Protocol: add configuration parameters * VMC Protocol: work with id's instead of strings * fix formating * Merge VMCSinkConfig into VMCConfig * Apply bone rotation comply with VMC standard. * VMC: Add toggle for orientation correction * VMC: set the correct default port * VMC: Add hand tracking * VMC: Update rotations * VMC: Weird constant collision error * refactor(server_openvr): ♻️ Refactor around TrackedDevice * refactor(server_openvr): ♻️ Use TrackedDevice for FakeViveTracker * fix(client_core): 🐛 Fix Pico 4 detection; add Focus Vision (#2479) * Fix SteamVR restart loops on AVP (#2484) * feat-fix(server_openvr): Add timewarped compositing to Windows OpenVR compositor (#2472) * WIP * cleanup * done * Fix linux build * nits * take 2 * refactor(client): ♻️ Move platform to alvr_system_info; rename video decoder (#2488) * feat: ✨ Reduce session file length (#2480) * feat(client): ✨ Make lobby use passthrough (#2485) * feat(server_openvr): Add Quest Pro controller and headset emulation; Use VRLink hand tracking icons for the hand tracker controllers; Misc refactoring to reduce prop.rs linecount (#2489) * feat: integrate adb port forwarding (#2451) * fix(server_openvr): Fix CPU/GPU deadlocking at 100% usage before the headset connects (#2495) * Fix CPU/GPU deadlocking at 100% usage before the headset connects * Temporary stats manager and nits * Remove optimize_game_render_latency * fix(server_openvr): 🐛 Fix prop parse fail; use key name for log * refactor: 💄 Fix dashboard spacing; refactor alvr_adb * refactor(client_openxr): ♻️ Remove redundant state and fix potential refactoring pitfall * docs: 📝 Add Steam store link * feat(xtask): ✨ Add Pico store build; fix Pico 4e and G3 * fix(adb): fix device serial parsing and use TCP (#2507) * Fix device serial number parsing * Force stream protocol to TCP when wired * feat(server_openvr): ✨ Add option to disable hand skeleton prediction (#2517) * feat(server_openvr): ✨ Add option to disable hand skeleton prediction * Add `predict` help string * feat(adb): add client flavors and autolaunch (#2515) * Add client flavours * Add client autolaunch * Apply requested changes * Fix wired connection status message * Fix wired client type help string * fix(sockets): 🐛 Ignore error 997 (overlapped IO) (#2522) * refactor(client_core): ♻️ Port FFE to Rust and remove all C++ code (#2523) * build(xtask): 💚 Pin cargo-about (#2524) * build(xtask): 💚 Really fix cargo about (#2525) * feat(client): ✨ Add passthrough alpha support (#2527) * refactor(launcher): refactor client APK installation from launcher (#2531) * Refactor client APK installation from launcher * Apply requested changes * refactor(client_openxr): ♻️ Do not recreate OpenXR session (#2519) * refactor(client_openxr): ♻️ Do not recreate OpenXR session * Address comments * docs(linux): update wiki (#2512) * docs(linux): Updates for linux wiki, make sure user knows where wiki for linux is * docs(linux): finalize wiki update --------- Co-authored-by: Leonhard Saam <leonhard.saam@yahoo.com> * docs: fix wiki breaking yet again (#2540) * docs: temp fix for quest framerate throttling (#2538) * fix(xtask): 🐛 Fix package commands; update release ci (#2545) * build(xtask): 🔧 Fix Flatpak script (#2547) * chore: recreate logos as SVG (#2548) * chore: recreate logos as SVG * fix: update image link in readme to new logos * fix: convert text to paths in SVG logo * fix: 🐛 Fix package-launcher requiring openvr submodule (#2549) * fix: 🐛 Fix package-launcher requiring openvr submodule * Do not delete launch build dir with package-launcher; fix launcher installations dir * fix(dashboard): 🐛 Reject unsupported servers (#2536) * feat(client): ✨ Add reprojection support for C API (#2543) * feat(client): ✨ Add reprojection support for C API * Address comment * chore(ci): update deprecated actions (#2554) * chore(ci): update deprecated actions * chore(ci): Fancy annotations uwu * chore(ci): update ci some more * chore(xtask): Dont run submodule update (#2556) * chore(xtask): Dont run submodule update * fix(linux): Fix compilitation error without jack installed * chore: Add composited background resource (#2561) * docs(linux): fix for no steamvr dashboard on hybrid graphics (#2511) * docs(linux): fix for no steamvr dashboard on hybrid graphics * docs(linux) specify dashboard fix is for nvidia * docs(linux): note to first close the steam client before opening it with render offload * chore(cpp): Fix warnings from openvr headers * chore(xtask): Fully remove windows installer * chore: Bump rust msrv to 1.82 * chore: Fix clippy lints * chore(ci): fix cargo msrv and print clippy output * feat(common): ✨ Add `Pose * DeviceMotion` operator (#2574) * refactor(client_openxr): ♻️ Refactor around reference spaces (#2576) * refactor(client_openxr): ♻️ Refactor around reference spaces * Fix clippy * fix(client_openxr): 🐛 Fix head angular velocity (#2577) * chore: 💚 Fix CI build (#2578) * fix launcher on deck (#2585) * Made the dashboard and launcher report respective appids to the system (#2595) * fix(server_openvr): 🐛 Fix tracked toggle for controllers (#2604) * fix(server_core): 🐛 Don't trigger ALVR gestures if holding controllers (#2606) * Full range wgpu partial fix (#2597) * Full range HDR works? * Fix full range for non-HDR * Cleanup * Adjust this note * Fix CI * Fix server * Return fractions * fix(server_core): 🐛 Fix controllers disabling with lag (#2609) * fix(server_core): 🐛 Fix controllers disabling with lag * clippy * fix(client): 🐛 Fix controller angular velocity for some devices; show velocities in lobby (#2608) * fix(client): 🐛 Fix controller angular velocity for some devices; show velocities in lobby * Draw velocities only in debug builds * Add push constants consts and bound checks * Add support for Virtual Audio Cable (#2483) * docs: 📝 Mark Vive Focus Vision as supported (#2613) * fix(client): 🐛 Fix Pico wrong prediction; refactoring (#2612) * fix(server_core): 🐛 Fix server locking the session unnecessarily (#2619) * fix(client_openxr): 🐛 Fix crash on unsupported eye tracking permission on Pico (#2618) * feat: Make on connect script toggle only + disable remote dash by default (#2621) * Bump to v20.12.0 * chore: fix prepare-release ci (#2624) --------- Co-authored-by: failboat78 <pwalsh0+github@gmail.com> Co-authored-by: failboat78 <failboat@ocean.world> Co-authored-by: Max Thomas <mtinc2@gmail.com> Co-authored-by: Vixea <112600048+Vixea@users.noreply.github.com> Co-authored-by: Simon Storfors <simon.storfors@gmail.com> Co-authored-by: Grillo <grillo@delmal.cl> Co-authored-by: E1int <110526002+E1int@users.noreply.github.com> Co-authored-by: Meister1593 <leruop@Gmail.com> Co-authored-by: Leonhard Saam <leonhard.saam@yahoo.com> Co-authored-by: Leonhard Saam <54042101+The-personified-devil@users.noreply.github.com> Co-authored-by: Ozzy Helix <ozonehelix@gmail.com> Co-authored-by: Issac Dowling <git@issacdowling.com> Co-authored-by: yobson1 <45133474+yobson1@users.noreply.github.com> Co-authored-by: Kirottu <56396750+Kirottu@users.noreply.github.com> Co-authored-by: Sobble Entertainment Inc. <8494722+DevanWolf@users.noreply.github.com>
Tested on Quest 3 and Focus 3
Maybe should we add a background to the text?