JosefNemec / Playnite

Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games.
https://playnite.link
MIT License
9.18k stars 495 forks source link

Add in-game overlay #1390

Open poperigby opened 5 years ago

poperigby commented 5 years ago

To have an overlay in a non-Steam (or another launcher with an overlay) game, you have to add every single game as a shortcut to get the overlay. This makes it frustrating for people who want an overlay in every game, but don't want to fiddle with another launcher's overlay. So a built-in Playnite overlay with the time, a web browser and #1264 integrated would be super useful.

poperigby commented 5 years ago

I think using Firefox (or a version of it) would be a good idea for the browser. Gecko is very fast.

illnyang commented 5 years ago

@PopeRigby Playnite already uses CefSharp, why introduce GeckoFX as second dependency for the same tasks? Also, CefSharp claims to have superior performance.

poperigby commented 5 years ago

Why help the Chromium monopoly? Also, you could probably used a very stripped down version of Gecko for better performance?

JosefNemec commented 5 years ago

CefSharp is by far more mature project with superior WPF integration (at least it was when I was integrating it into Playnite), which is critical for Playnite.

Overall don't expect in-game overlay any time soon since it's quite complex feature and I don't have necessary OpenGL, DirectX and Vulkan knowledge to implement it reliably and efficiently (and currently I don't have enough time learn it, although I would like to). Somebody else would have to do it.

illnyang commented 5 years ago

@PopeRigby That's opinionated. I'm not necessarily saying that CefSharp is faster than GeckoFX. It would just take a tremendous amount of work to use it, because Playnite already uses CefSharp. If anything, this should be made a seperate issue, since it's not much related with in-game overlays.

poperigby commented 5 years ago

I'll admit I don't know much about web rendering engines. I was suggesting Gecko because it seems to be very fast and Chromium has a monopoly on the engine market.

trymeouteh commented 5 years ago

If you do go down the Chromium path, please use ungoogled-chromium since it removes the tracking and all the google spyware

darklinkpower commented 5 years ago

The best way to go for this in my opinion would be to implement a way to use the steam overlay for all games in a similar approach to this https://forums.launchbox-app.com/topic/43142-steamlauncher/

Mantaining, bug fixing and developing for all the different Graphics APIs would be a nightmare, why not just use something that already exists and is developed by another party and has all the features people want? An exclusive Overlay, while a good idea, would be a waste of resources considering Crow is almost the sole developer of Playnite.

JosefNemec commented 5 years ago

Launching all games via Steam would come with some serious disadvantages (mainly in terms of play time tracking). I also don't like an idea of some Playnite feature being directly tied to another launcher (unless it's a game import).

poperigby commented 5 years ago

I also don't like an idea of some Playnite feature being directly tied to another launcher (unless it's a game import).

Yeah. Also, Steam's overlay isn't that good. An open source overlay would be better. How difficult would this be to develop? I'm working on learning some Python and I could take a crack at it at one point.

darklinkpower commented 5 years ago

Yeah I agree, an exclusive overlay would be the best option. I was just thinking that developing a new one from scratch would be fairly difficult, maybe you would need a dedicated developer focused exclusively at least for a while in the overlay and with enough knowledge of Graphics API to make one and mantaining it. I mean, games can run in vulkan, the different DirectX versions, OpenGL and that means a whole lot of issues. I don't know anything about coding but that's just my guess.

illnyang commented 5 years ago

@darklinkpower It might be worth to take a look at existing projects which already utilize multiple Graphics API hooking.

ImGUI contains a bunch of examples, excluding the actual hooking

ReShade's code contains pretty much everything what's needed

I'm not exactly sure how would hooking work in a managed process. Would a library such as EasyHook be enough to accomplish this or it would be needed to implement a native helper binary?

poperigby commented 5 years ago

Mumble has an open source overlay. I haven't ever taken a look at it, but could it be used for reference?

gagrecco commented 3 years ago

It would be cool to have the ability to close the game when you launch the overlay. Also have the ability to load/save state

Leomm04 commented 3 years ago

Is there any progress?

JosefNemec commented 3 years ago

Is there any progress?

No, my original comment is still relevant https://github.com/JosefNemec/Playnite/issues/1390#issuecomment-528863373

jmvallejo commented 2 years ago

I'd love to have an overlay, mainly because I want to use playnite for emulators and having an overlay for closing the emulator / terminating the process would be awesome in fullscreen mode.

JosefNemec commented 1 year ago

Update on the overlay situation. Since there are no devs available with enough expertise to implement this reliably, I decided to implement this as Xbox Game Bar widget. This gives us reliable way of injecting overlay into games (not having to bother with custom injection, which can be problematic, especially in games using anti-cheat system) and any Playnite related functionality (for example to close running emulator, which seems to be the most requested use for an overlay) can be relatively easily added via custom widget. Still no ETA on when the widget will be ready.

ZazaMastro commented 1 year ago

Update on the overlay situation. Since there are no devs available with enough expertise to implement this reliably, I decided to implement this as Xbox Game Bar widget. This gives us reliable way of injecting overlay into games (not having to bother with custom injection, which can be problematic, especially in games using anti-cheat system) and any Playnite related functionality (for example to close running emulator, which seems to be the most requested use for an overlay) can be relatively easily added via custom widget. Still no ETA on when the widget will be ready.

This is a fantastic news. At least we will get the needed functionalities directly from gamepad.

Tyestor commented 1 year ago

@poperigby don't worry, josef knows even less than you "cefsharp is more mature" lmao gecko has been around since 1997 mate and anyone with a brain should trust mozilla over alphabet.

"Launching all games via Steam would come with some serious disadvantages" yeah no shit, that would defeat the purpose of playnite. but most people are doing that anyway, so why use playnite again? lmao. at least you know that much though. what are you doing about the fact you need 2-3 extra programs to use playnite properly? ds4windows/rewasd/special k/controller companion/joytokey/joyxkey/dualsensex/xpadder/hidhide/x360ce/GlosSI.

JosefNemec commented 1 year ago

@Tyestor 1) I was not talking about CEF vs Gecko, I was talking about CefSharp and GeckoFX, which are wrappers for those frameworks to be usable in .NET via WPF or WinForms. CefSharp is way more usable in that sense, that's just the fact.

2) Most people by what metric? Even I don't have any numbers for that. Obviously, long term plan is to have more things integrated for ease of use (like DirectInput support), but this a project still maintained primarily by a single person and it's already quite big to maintain. So if there's usable 3rd party solution, I will not rush to create different implementation for Playnite.

3) Please stay on topic related to this issue. I would also try less condescending tone in future if you want your feedback to be actually taken seriously.