1

我正在使用skia (通过ANGLE)进行绘图SwapChainPanel,一切顺利。但是,我遇到的一个问题是内容正在高 DPI 屏幕上缩放。

我的机器上有一个高分辨率 (x2) 和一个普通 (x1) 屏幕。面板的内容在 1x 显示器上看起来很棒,但是当我将它拖过来时,窗口会调整大小并缩放内容。我如何告诉面板不要缩放内容,而是让我调整我的一侧?

我当前的解决方案是以所需的比例(例如:)创建我的渲染缓冲区,panel.Width * 2然后使用该RenderTransform属性并设置ScaleTransform(例如:)0.5

内容现在看起来流畅清晰,但现在布局受到影响。由于渲染转换已“调整大小”面板。

这样做的正确方法是什么?

编辑

这就是我正在做的创建缓冲区:

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

4

1 回答 1

1

您基本上必须使用IDXGISwapChain2.SetMatrixTransform方法将 DXGISwapChain 上的比例设置为与交换链面板组合比例相反:

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

不过,我不知道如何通过您正在使用的库获取交换链对象引用。

于 2017-03-01T22:50:55.210 回答