Win2D에 대한 개인적인 생각(feat. UWP와 WinUI3)

Win2D는 UWP용 GPU 가속 2D 그래픽 렌더링 윈도 런타임 API입니다. Win2D 샘플 갤러리를 보면 상당히 괜찮은 성능을 제공하고 있고, 간단히 샘플을 만들어 테스트한 결과 윈폼이나 WPF에서는 체험할 수 없는 굉장히 고성능의 결과를 만들 수 있는것을 확인할 수 있었는데요,

이 라이브러리가 무려 6년전에 나왔다는 사실…
UWP가 데스크톱 앱 개발에 맞지 않게 폐쇄성 (심지어 초기에는 Microsoft Store에만 배포가 가능!) 데스크톱 어플리케이션 개발자가 UWP로 어플리케이션을 개발하기가 참 어려웠는데요, 한마디로 윈도에서 제공하는 윈도 런타임 API를 제대로 쓸 수 있는 환경이 아니였습니다.

시간이 흘러 정책도 바뀌고 환경도 좋아졌지만, 이미 개발자를 UWP에 안착시키는게 실패한 듯 해보이고요, 이것은 국내 뿐만 아니라 해외의 분위기도 마찬가집니다. 결국에 모바일을 잡으려다가 데스크톱 생태계까지 망가진 샘이죠.

윈도 앱 SDK가 망가진 데스크톱 생태계를 다시 통합하려는 시도로 이해하면 될 것 같고요, 데스크톱 개발자는 윈폼이나, WPF에서 윈도 앱 SDK에서 제공하는 WinUI3 환경으로 넘어가는 시기라고 이해하면 될 것 같습니다. 개인적으로는 데스크톱 앱을 개발하는 목적성으로만 봤을 때 사실 윈폼이나 WPF로도 충분히 가능하기도 하고, 어떻게 보여지는가? (최신의 UX 디자인 적용 유무)는 사실 큰 이슈는 아니라 이미 시기가 많이 늦은 감이 있지 않나 생각하지만, 어쨌든 MS입장에서는 필요한 작업인 샘입니다.

MS는 자신들의 생태계를 지키고 다음을 바라보기 위해 Blazor Desktop 및 MAUI, WinUI3 Desktop 프로젝트를 진행하고 있는데요, 이중에서 WinUI3 Desktop에서 사용할 수 있는 Win2D가 다시 부활합니다.

위 갤러리를 실행해 보셨고, 자신이 데스크톱 어플리케이션 개발자라면, 바로 활용 요소가 보이셨을 것 같습니다. 물론, 샘플은 UWP로 개발된 거라 실제로 WinUI에서 동작하는 Win2D의 동작과는 사뭇 다르긴 합니다만, WinUI3의 현대의 UX와 Win2D의 성능을 더해서 현대적이고 고성능의 데스크톱 앱을 개발할 수 있습니다.

WinUI3에서의 Win2D는 아직은 불안합니다. 윈도 앱 SDK 0.8 기준 패키지를 배포하고는 있지만, 메모리 릭이 발생한다는 보고가 있고, 제가 직접 테스트한 결과 어떤 이유인지는 모르겠지만, 모니터에서 제공하는 주사율과 다른 fps를 보여주고 있습니다. 예) 모니터 주사율이 240hz일 경우, UWP Win2D는 240 fps에 근접하게 나오는 반면, WinUI Win2D는 60 fps에 근접하게 나옴

WinUI3용 Win2D가 안정화가 되어 UWP Win2D의 성능이 나와준다면, 저는 앞으로 자주 이용하게 될 라이브러리가 될 것 같습니다.

WinUI3 Desktop는 WPF와 유사한 느낌으로 개발이 가능합니다. XAML시스템이 사실 WPF → UWP → WinUI3로 발전한 거니까요. 그래서 WPF 개발자라면 미리 WinUI3를 경험 해보시는 것도 나쁘지 않고요,

혹시 윈폼으로 개발하고 계신 개발자가 있으시다면 MS는 XAML기반으로 계속 성장할 것으로 보이니, XAML에 익숙해지는 경험으로 WinUI3를 접해 보시는 것도 나쁘지 않을 것 같습니다.

5개의 좋아요

아… 이 내용도 다루기 위해 글을 썼는데 쓰다가 잊었습니다 ㅎㅎ;

제안: Win2D 윈도 앱 SDK에 대한 로드맵 · 문제 #1150 · 마이크로소프트 / 윈도우 앱 SDK (github.com)

2개의 좋아요

성능 좋게 잘 나오고, winform/WPF에서 마이그레이션 가능한 방침을 MSDN을 통해 알려준다면 한 번 시도해볼 것 같습니다. 저는 DevExpress를 사용하니 여러 서드파티 개발사에서도 WinUI3를 지원해주면 좋겠네요…ㅎㅎ 이미 지원하고 있으려나…

2개의 좋아요

윈도 기반 서드파티 개발사는 당연히 WinUI3을 이미 대응하고 있을것 같아요.

2개의 좋아요

속도는 윈폼, 디자인은 WPF가 담당하고 있는데, WINUI3가 들어올 구석이 있을까요?
윈폼은 디폴트라 못 건들고, WPF를 죽여야 WINUI3가 성공할 수 있는데, WINUI3가 WPF보다 월등히 나은점이 없고, 국내외 반응도 미직지근해서 사실상 WINUI3는 사망선고를 받는거나 마찬가지 상황이죠.

1개의 좋아요

글쎄요, 개인적인 생각은 WinUI3의 등장이 시기적으로는 많이 늦은 감 (대략 6년;)은 있지만, 윈도 데스크톱 어플리케이션은 윈도가 망하지 않는 한 존재해야 하는 영역이라, WinUI3가 자리를 잡으면 괜찮아지리라 생각됩니다.

속도는 윈폼이라는 의견에 다른 이견은 있고요, WPF를 죽여야 WinUI3가 성공할 수 있다는 의견에도 다른 이견이 있습니다만… 과연 WinUI3가 윈도 데스크톱 개발자가 보편적으로 사용할 환경이 될 것 인가는 저도 회의적이긴 합니다.

개인적으로는 UWP 가 참 안습 이였는데 그나마 win32 호환(?) Windows 11 대응 데스트톱용 어플리케이션을 개발할 수 있다는데 높은 점수를 줍니다.

3개의 좋아요

속도는 윈폼… 은 잘 몰겠어요.(?ㅅ?) 개별 컨트롤을 모두 Window 로 사용하는 윈폼이 DirectX 로 Element 를 렌더링하는 WPF 보다 빠른가요?
DataBinding 이 없다면 WPF가 더 느릴 일은 없을 거라고 생각합니다.(경험상 실제로 그랬기도 했구욤. 여기에 할많하않… ;ㅂ;)

저는 개인적으로 WinUI3 라는 별도의 플래폼에 대한 필요성에 의문이 듭니다.
구조적 한계 때문일 거라고 추측은 되지만, WinUI3 역시 어차피 윈도우 의존성을 가진 데스크탑 응용프로그램 개발 플랫폼인데
이걸 계속 파편화하는 것이 맞는가… 하는 걱정이 되는 것이죠.
게다가 WinUI3 역시 xaml 기반의 MVVM 을 지원하는 형태라면, 그냥 WPF 를 더 확장 / 발전시켜나가는 게 낫지 않을까 싶어요. (WinUI3 가 크로스플랫폼이라면 모를까…)
괜히 선택지와 공부해야하는 것만 더 늘리는 게 아닌가… 하는 생각도 들구요.

또, 뭐 현실적으로는… (적어도 국내 한정)웹과 모바일이 세상에서 점점 설자리를 잃어가는 데탑 프로그램인데
과연 제대로 정착될 수 있을까 하기도 하고… 뭐 그렇네요.

1개의 좋아요

WinUI3는 Windows Forms, C++ 등에서도 사용이 가능하도록 개발이 되고 있는 UI 입니다.
또 멀티 플랫폼용의 MAUI도 WinUI3를 이용해서 개발되고 있으니 어느정도의 호환성이 있지 않을까?
생각을 하고요. 어느정도만 호환성이 있다 하더라도 매우 가치가 있죠.

그리고 WPF 랜더링 속도 느린것 맞습니다.
제공되는 컨트롤만 사용하면 문제 없는데. 동영상 플레이어 같은것을 개발해보면 이게 태생적으로 한계가 있음을 알 수 있습니다.
4K 모니터 두개를 풀로 사용하면서 동시에 4K 랜더링을 한 4개정도 걸어보면 WPF는 느려서 못 써먹을 수준으로 랜더링 속도가 떨어집니다. MediaElement 사용한거 아니고 동영상용으로 개발된 여러 라이브러리와
직접 개발한 플레이어 엔진 d3d9, d3d11, d2d 전부 테스트 한 결과 입니다.

뭐 그렇다고 Windows Forms가 빠르다는건 아니고요.
랜더링 측면에선 좀 나은건 맞으나 결국 최대한의 성능을 뽑을려면 Win32를 쓰거나 꼭 C#써야 한다면 Unity 쓰는게 좋습니다. Unity는 어차피 랜더 관련된건 지들이 전부 만든거라…

2개의 좋아요

그렇군요. 그럴 수 있다고 생각합니다.
근데 말씀하신 상황은 좀 극단적인 상황 같아욜. 그게 그 4k 4개를 돌리는 상황을 Win32 말고 커버할 수 있는 환경이 있을까 싶은데요? (윈폼이나 WPF 나 이 상황에서는… ~ㅁ~)
속도냐 디자인 이냐 하는 말에서 시작된 이야기라, 이런 극단적인 상황 말고 일반적인 사용자 앱 차원에서 체감할 수 있는 속도를 얘기해봐야 하겠죠.
화면에서 컨트롤 500개 올려놓고 실시간으로 업데이트하고 애니메이션 돌리는 상황 같은, (에… 뭐 제가 생각하는 일반적인 앱 입니다.)
윈폼은 뚝뚝… 그리고 그걸 MVVM 없이 윈폼으로 만들 생각하면… 크흐… ;ㅂ;
그리고 어차피 WPF 가 느려서 못 써먹을 상황이라면 윈폼도 도움이 안 되는 상황이라고 봐야하지 않을까해요.

WinUI3 얘기하다가 멀리 갔네욜ㅋㅋㅋㅋㅋㅋㅋㅋ

1개의 좋아요