CSharp - SurfaceImageSource和IDXGISurface的缓冲大小不匹配

  显示原文与译文双语对照的内容

我遇到一个奇怪的问题,IDXGISurface缓冲区描述与创建它的SurfaceImageSource的大小不匹配。 我找不到任何关于这种情况的文档,但是我看到了细微的差异( 例如: 1 1024x768变为 1024x768,2560 x1440变成 2592 x1440等等) 。

我这里有一个独立重现的来源: https://skydrive.live.com/redir?resid=16E5F6030DCB899125573&authkey=AF0Y3h0-ufLPubs&ithint=file%2c.zip!

有什么想法吗?

时间: 作者:

这是预期的使用SurfaceImageSource时,获取的DXGI曲面通常是对 atlased 曲面的引用。 XAML这样做可以提高性能并减少内存开销( 尤其对于使用许多小SurfaceImageSource元素的应用) 。

应用程序将根据 BeginDraw 返回的offset 值,呈现为该区域的一个子集。 还要注意,不应该缓存这里值或者 IDXGISurface*,因为XAML可以能会给你一个不同的偏移量或者图表。

因为你只有一个 SurfaceImageSource,所以地图通常与请求的大小相匹配。 但是,如果每个SurfaceImageSource个对象,x768,很可能会返回一个 IDXGISurface,其中一个调用BeginDraw返回( 0,0 ),另一个返回other返回( 0,768 ) 。 这些点作为你应该绘制到表面的起点。

另一件事- 考虑到你尝试的大小,看起来像是在创建一个全屏 SurfaceImageSource 。 根据场景, SwapChainPanel,可以能更合适,实际上给你提供了适当的缓冲交换链。

作者:
...