microsoft / microsoft-ui-xaml

Windows UI Library: the latest Windows 10 native controls and Fluent styles for your applications
MIT License
6.26k stars 673 forks source link

Proposal: Support WPF 3D capabilities on WinUI #4783

Open pjmlp opened 3 years ago

pjmlp commented 3 years ago

Proposal: [3D Support on WinUI]

WPF has support for 3D programming on LOB applications, without having to leave .NET languages.

https://docs.microsoft.com/en-us/dotnet/desktop/wpf/graphics-multimedia/3-d-graphics-overview?view=netframeworkdesktop-4.8

WinUI should provide similar support as upgrade path.

Summary

Basically port the XAML controls and .NET classes from WPF into WinUI, used by the 3D modelling features described on the link provided above.

Rationale

Currently WinUI does not offer anything that is compelling enough to drop WPF and adopt WinUI in regards to 3D support.

Making use of SwapChainPanel is not an option, as it requires learning C++ and DirectX, with the caveats that such learning requires for a .NET focused team, or bringing additional resources into projects with those skills, raising project costs.

Secondly it also requires throwing away perfectly working code for no benefit.

Bringing in .NET based game engines like Unity or Xenko is also not a solution, as these are visualisations for LOB applications, that would suffer from having a game engine pushed into their architecture.

Failing to offer feature parity with WPF will decrease some possible adoption cases, as it has been the case thus far.

StephenLPeters commented 3 years ago

@codendone FYI

sylveon commented 3 years ago

Can't you use one of the managed DirectX libraries available (like Vortice and TerraFX) in combination with SwapChainPanel to avoid dropping down to C++?

pjmlp commented 3 years ago

No, because that is yet another re-write being pushed by Microsoft, the main reason why UWP has failed the market, the majority of us is fed up with the code rewrites being pushed since Windows 8, while the platform keeps lagging behind what WPF and Win32 were capable of in 2011.

Edit if I need to rewrite some of this software, most likely it will end on developer stacks other than Windows desktop technologies like Qt or Web.

GeorgeS2019 commented 3 years ago

@pjmlp There have been attempts but given up @codendone Last demo of this effort

@pjmlp

Bringing in .NET based game engines like Unity or Xenko is also not a solution, as these are visualisations for LOB applications, that would suffer from having a game engine pushed into their architecture.

Failing to offer feature parity with WPF will decrease some possible adoption cases, as it has been the case thus far.

The best chance for 3D WinUI control is to make this 3D framework to support WinUI control

pjmlp commented 3 years ago

@GeorgeS2019 Thanks for the heads up.

I have grown disappointed with all the rewriting efforts, outside Web applications, I am mostly focusing on WPF/Win32 and specially curious what rewrites Windows 11 will be asking of us.

GeorgeS2019 commented 2 years ago

FYI: For discussion/sample (.NET c#) of DirectX 3D renderer using SwapchainPanel in Project Reunion (WinUI 3)

giovanni-a commented 11 months ago

I hope this is an appropriate avenue for sharing, but given the expressed desire for expanded 3D functionality in WinUI and noting the slow progress on the 3D XAML front, I felt some might find our work relevant to the discussion.

Our team, the same behind OpenSilver, is actively developing XR# (see website and twitter), a distinct framework centered around 3D application development with .NET, C#, and XAML/MVVM. It provides a WPF-like experience for developers and facilitates 3D app development for the Web, VR/AR devices, and multiple platforms by incorporating technologies like WebXR, Three.js, and the Microsoft .NET to WASM compiler. Our primary focus is enterprise VR/AR applications with a GUI-centric approach, as we firmly believe that VR/AR has applications beyond just gaming. Also, we're soon unveiling a WYSIWYG 3D XAML designer.

I share this not as an advertisement, but in the spirit of collaboration and hope it contributes meaningfully to the ongoing conversation. If this wasn't the right forum, I apologize and appreciate the understanding.

castorix commented 11 months ago

Making use of SwapChainPanel is not an option, as it requires learning C++ and DirectX,

You can do everything in C# (I had tested with Direct2D, it is as fast as in C++)