C# SwapChainPanel性能问题
C# SwapChainPanel性能问题,c#,performance,uwp,direct2d,sharpdx,C#,Performance,Uwp,Direct2d,Sharpdx,我正在使用SwapChainPanel渲染控件。render方法附加到CompositionTarget.Rendering事件
另外,调用RenderTarget.CreateCompatibleTarget来创建屏幕外目标。调用compatibleTarget.Bitmap属性来创建一个缓存的位图,该位图可以在屏幕上显示
在每个帧期间:
在屏幕目标上调用BeginDrawing()
如果场景已被程序逻辑失效,则会重新绘制到屏幕外目标
使用背景色清除屏幕上的目标。没有这一点,连续帧以某种方式相
我正在使用SwapChainPanel
渲染控件。render方法附加到CompositionTarget.Rendering
事件
另外,调用RenderTarget.CreateCompatibleTarget
来创建屏幕外目标。调用compatibleTarget.Bitmap
属性来创建一个缓存的位图,该位图可以在屏幕上显示
在每个帧期间:
在屏幕目标上调用BeginDrawing()
如果场景已被程序逻辑失效,则会重新绘制到屏幕外目标
使用背景色清除屏幕上的目标。没有这一点,连续帧以某种方式相互混合
屏幕外位图(缓存在上面)使用屏幕上的目标。DrawBitmap(cachedBitmap)绘制到屏幕上的目标上,不透明度设置为1
调用onScreenTarget.Flush()刷新内容
在屏幕目标上调用EndDrawing()
我发现这提供了一个非常低的帧速率
与WindowRenderTarget的比较
为了进行比较,我使用WindowRenderTarget
在WinForms应用程序中测试了完全相同的场景代码。(SharpDX使这成为可能,因为它可以在UWP和桌面上工作。)这提供了更高的帧速率,零稳态CPU消耗
问题:
为什么SwapChainPanel
与WindowRenderTarget
相比产生如此低的帧速率
为什么在第4步绘制位图之前,即使不透明度为1,也必须清除每一帧的屏幕目标
如果没有任何变化,我可以避免步骤1-6吗?这将消耗大约7%的CPU
我认为SwapChainPanel和WindowRenderTarget之间的性能差异不太大,因为它们几乎都直接基于DirectX组件。您可以比较它们的设置以调查性能差异:SwapChainPanel是否与D2D设备相关?devicecontext、swapchain描述和WindowRenderTarget的renderTargetProperty的配置之间的任何差异;位图处理方法之间有什么区别吗
将为正在绘制的图像设置不透明度。但是,对于整个渲染视图,clear()if将显示
当你的意思是“如果没有改变”,我想你的意思是你没有什么可画的。那你当然什么也做不了。否则,需要执行从1到6的步骤
此外,您可以找到一个很好的文档化SwapChainPanel示例。本例中的某些设置用于提高性能 三,。“如果没有改变”,我的意思是,下一个要绘制的帧与上一个帧相同。合成器仍然每秒回调60次以绘制帧。如何告诉它使用先前绘制的框架?如果我什么也不做,就会出现闪烁。通常,何时调用render()由后端directX函数控制。通常,当应用程序恢复、合成比例更改、大小更改或设备丢失时,会调用它来重新渲染。您可以参考示例代码,找到重新渲染的推荐使用模型。