2017-02-28 5 views
1

Ich benutze skia, um Zeichnung auf einem SwapChainPanel (über ANGLE) zu tun, und alles läuft gut. Das einzige Problem, das ich habe, ist, dass der Inhalt auf High-DPI-Bildschirmen skaliert wird.UWP SwapChainPanel Inhalt Unscharf/Skaliert

Ich habe hier eine hi-res (x2) und eine normale (x1) Bildschirm auf meinem Rechner. Der Inhalt des Bedienfelds sieht auf dem 1x-Display gut aus, aber wenn ich es übergebe, ändert sich das Fenster und skaliert den Inhalt. Wie sage ich dem Panel, dass es den Inhalt nicht skalieren soll, sondern dass ich meine Seite anpassen soll?

Meine aktuelle Lösung ist mein renderbuffer in der gewünschten Skala zu erstellen (zB: panel.Width * 2) und verwenden Sie dann die RenderTransform Eigenschaft und stellen Sie die ScaleTransform (zB: 0.5).

Der Inhalt erscheint jetzt glatt und klar, aber jetzt ist das Layout betroffen. Da die Render-Transformation das Panel "skaliert" hat.

Was ist der richtige Weg, dies zu tun?

EDIT

Dies ist, was ich den Puffer zu schaffen mache:

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

Antwort

1

Sie im wesentlichen Maßstab gesetzt haben auf DXGISwapChain Inverse von Swapkette Panel Zusammensetzung Maßstab sein IDXGISwapChain2.SetMatrixTransform mit Methode:

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); 

ich nicht k Nun aber genau, wie man die Referenz der Swapchain-Objekte über die verwendete Bibliothek erhält.