我正在使用skia来绘制SwapChainPanel
(通过ANGLE),一切顺利。但是,我遇到的一个问题是内容是在高DPI屏幕上缩放的。
我的机器上有一个高分辨率(x2)和一个普通(x1)屏幕。面板的内容在1x显示屏上看起来很棒,但当我将其拖过时,窗口会调整大小并缩放内容。我如何告诉小组不要缩放内容,而是让我调整一边?
我目前的解决方案是以所需的比例创建我的渲染缓冲区(例如:panel.Width * 2
),然后使用RenderTransform
属性并设置ScaleTransform
(例如:0.5
)。
内容现在显得平滑而清晰,但现在布局受到影响。由于渲染变换已“调整”了面板。
这样做的正确方法是什么?
修改
这就是我正在创建的缓冲区:
答案 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对象引用。