我使用SwapChainPanel
渲染控件。 render方法附加到CompositionTarget.Rendering
事件。
此外,调用RenderTarget.CreateCompatibleTarget
来创建屏幕外目标。调用compatibleTarget.Bitmap
属性来创建可以在屏幕上显示的缓存位图。
在每个框架中:
BeginDrawing()
在屏幕目标上调用。如果场景已被程序逻辑无效,则会重新绘制到屏幕外目标。
使用背景颜色清除屏幕上的目标。如果没有这个,连续的框架会以某种方式相互融合。
onscreenTarget.DrawBitmap(cachedBitmap)
将屏幕外位图(上方缓存)绘制到屏幕目标上,并将不透明度设置为1. onScreenTarget.Flush()
来刷新内容。EndDrawing()
在屏幕目标上调用。我发现这会产生非常低的帧速率。
与WindowRenderTarget比较
为了进行比较,我使用WindowRenderTarget
在WinForms应用程序中测试了完全相同的场景代码。 (SharpDX使其成为可能,因为它适用于UWP和桌面。)这提供了更高的帧速率和零稳态CPU消耗。
问题:
SwapChainPanel
与WindowRenderTarget
相比产生如此低的帧速率?答案 0 :(得分:0)
我认为SwapChainPanel&和SwapChainPanel之间的性能差异太大了。 WindowRenderTarget,因为它们几乎都直接基于DirectX组件。您可以比较他们的设置以调查性能差异:SwapChainPanel与D2D设备有关吗? devicecontext,swapchain description和WindowRenderTarget的renderTargetProperty配置之间的任何差异;位图处理方法之间有什么区别吗?
为您正在绘制的图像设置了不透明度。但是,对于整个渲染视图,clear()if。
当你的意思是"如果没有改变",我认为你的意思是你没有什么可画的。那当然你什么都不能做。否则,从1到6的步骤是必要的。
此外,您可以找到一个很好的SwapChainPanel示例here。此示例中的某些设置用于提高性能。