【发布时间】:2015-10-17 08:05:31
【问题描述】:
我正在使用SwapChainPanel 来呈现控件。渲染方法附加到CompositionTarget.Rendering 事件。
另外,RenderTarget.CreateCompatibleTarget 被调用来创建一个离屏目标。调用compatibleTarget.Bitmap 属性来创建一个缓存的位图,该位图可以在屏幕上显示。
在每一帧中:
-
在屏幕上的目标上调用
BeginDrawing()。 如果场景已被程序逻辑无效,则将其重绘到离屏目标。
使用背景颜色清除屏幕上的目标。没有这个,连续的帧会以某种方式相互混合。
- 屏幕外位图(上面缓存)使用
onscreenTarget.DrawBitmap(cachedBitmap)绘制到屏幕目标上,不透明度设置为1。 -
调用
onScreenTarget.Flush()刷新内容。 -
在屏幕上的目标上调用
EndDrawing()。
我发现这会产生非常低的帧速率。
与 WindowRenderTarget 的比较
为了比较,我使用WindowRenderTarget 在 WinForms 应用程序中测试了完全相同的场景代码。 (SharpDX 使这成为可能,因为它可以在 UWP 和桌面上运行。)这提供了更高的帧速率和零稳态 CPU 消耗。
问题:
- 与
WindowRenderTarget相比,为什么SwapChainPanel产生如此低的帧速率? - 为什么在不透明度为 1 的情况下,在第 4 步中绘制位图之前,必须每帧清除屏幕上的目标?
- 如果没有任何变化,我可以避免步骤 1-6 吗?这会消耗大约 7% 的 CPU。
【问题讨论】:
标签: c# performance uwp direct2d sharpdx