2017-02-28 4 views
1

J'utilise skia pour dessiner sur un SwapChainPanel (via ANGLE), et tout va bien. Cependant, le seul problème que j'ai, c'est que le contenu est mis à l'échelle sur des écrans à haute résolution.UWP SwapChainPanel Contenu Floue/Échelle

J'ai ici un écran haute résolution (x2) et un écran normal (x1). Le contenu du panneau est superbe sur l'affichage 1x, mais lorsque je le fais glisser, la fenêtre redimensionne et redimensionne le contenu. Comment puis-je dire au panneau de ne pas mettre à l'échelle le contenu, mais plutôt de me laisser ajuster mon côté?

Ma solution actuelle est de créer mon renderbuffer à l'échelle souhaitée (par exemple: panel.Width * 2), puis utiliser la propriété RenderTransform et définissez le ScaleTransform (par exemple: 0.5).

Le contenu apparaît désormais lisse et net, mais la mise en page est désormais affectée. Depuis la transformation de rendu a "redimensionné" le panneau.

Quelle est la bonne façon de faire cela?

EDIT

C'est ce que je fais pour créer le tampon:

https://github.com/mono/SkiaSharp/blob/master/source/SkiaSharp.Views/SkiaSharp.Views.UWP/AngleSwapChainPanel.cs#L199-L285

Répondre

1

Vous avez essentiellement à mettre l'échelle sur DXGISwapChain être inverse de l'échelle de la composition du panneau de la chaîne d'échange en utilisant IDXGISwapChain2.SetMatrixTransform méthode:

SwapChainPanel panel = ...; 
IDXGISwapChain2 swapChain = ...; 

DXGI_MATRIX_3X2_F scale; 
inverseScale._11 = 1.0f/swapChainPanel.CompositionScaleX; 
inverseScale._22 = 1.0f/swapChainPanel.CompositionScaleY; 
var hr = swapChain.SetMatrixTransform(ref scale); 
if (hr < 0) 
    Marshal.ThrowExceptionForHR(hr); 

Je ne sais pas Maintenant, exactement comment obtenir la référence d'objet swapchain à travers la bibliothèque que vous utilisez, cependant.