UWP SwapChainPanel内容模糊/缩放

时间:2017-02-28 17:46:49

标签: c# uwp directx opengl-es-2.0 skiasharp

我正在使用skia来绘制SwapChainPanel(通过ANGLE),一切顺利。但是,我遇到的一个问题是内容是在高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

1 个答案:

答案 0 :(得分: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);

我不确切知道如何通过您正在使用的库获取swapchain对象引用。