我遇到了一个奇怪的问题,即IDXGISurface BackBuffer描述与创建它的SurfaceImageSource的大小不匹配。我找不到有关为什么会出现这种情况的任何文档,但我看到了细微的差异(例如:1366x768变为1376x768,2560x1440变为2592x1440,依此类推)。
我在这里有隔离的复制源:https://skydrive.live.com/redir?resid=16E5F6030DCB8991!25573&authkey=!AF0Y3h0-ufLPubs&ithint=file%2c.zip
有任何想法吗?
最佳答案
这是预期的。使用SurfaceImageSource时,您获得的DXGI曲面通常是对atlased曲面的引用。 XAML这样做是为了提高性能并减少内存开销(尤其是对于使用许多小的SurfaceImageSource元素的应用程序)。
期望应用程序根据返回的BeginDraw的offset
值呈现到该区域的子集中。还要注意,您永远不要缓存该值或IDXGISurface*
,因为XAML在后续调用BeginDraw时可能会给您带来不同的偏移量或地图集。
在您的情况下,由于只有一个SurfaceImageSource,因此地图集通常与请求的大小大致匹配。但是,如果每个都有1366x768的两个SurfaceImageSource对象,则很可能会返回一个单独的IDXGISurface
,即1376x1536,其中对一个返回值(0,0)调用BeginDraw,对其他返回值(0,768)调用BeginDraw。这些点是您应绘制到曲面中的原点。
另一件事-考虑到您尝试过的尺寸,似乎您正在尝试创建全屏SurfaceImageSource。根据情况,SwapChainPanel可能更合适,并且实际上为您提供了适当缓冲的交换链。