Windows runtime 如何使用SurfaceImageSource创建保留图形?

Windows runtime 如何使用SurfaceImageSource创建保留图形?,windows-runtime,directx,winrt-xaml,Windows Runtime,Directx,Winrt Xaml,我想创建一个XAML应用程序,它在屏幕的一部分逐步显示一些图形。我可以有大量的元素,所以我希望保留已经绘制的元素,并且只绘制新的元素。但不幸的是,我无法从SurfaceImageSource访问交换链(告诉我是否可能),因此我不能在每次draw调用中复制缓冲区 如何在表面图像源上绘制新元素,同时以高效的方式保留旧元素?我认为交换链是屏幕上使用的东西,而不是像表面图像源那样的表面,因此我认为它根本没有交换链-它只是一个纹理。我没有尝试过,但是我假设如果在渲染调用之间(使用ClearRenderTa

我想创建一个XAML应用程序,它在屏幕的一部分逐步显示一些图形。我可以有大量的元素,所以我希望保留已经绘制的元素,并且只绘制新的元素。但不幸的是,我无法从SurfaceImageSource访问交换链(告诉我是否可能),因此我不能在每次draw调用中复制缓冲区


如何在表面图像源上绘制新元素,同时以高效的方式保留旧元素?

我认为交换链是屏幕上使用的东西,而不是像表面图像源那样的表面,因此我认为它根本没有交换链-它只是一个纹理。我没有尝试过,但是我假设如果在渲染调用之间(使用ClearRenderTargetView方法)不清除它,那么内容应该保持原样。如果只想重用内容的一部分,可能应该创建一个单独的纹理和渲染目标视图,用于渲染该纹理,然后以某种方式将该纹理的内容复制到SurfaceImageSource。我不确定最好的方法是什么-可能是内存映射纹理并在它们之间执行memcpy,或者将一个渲染为纹理四边形(两个三角形)到另一个。

我认为交换链是一种可以与屏幕一起使用的东西,而不是与SurfaceImageSource一起使用的曲面,所以我认为它根本没有交换链——它只是一个纹理。我没有尝试过,但是我假设如果在渲染调用之间(使用ClearRenderTargetView方法)不清除它,那么内容应该保持原样。如果只想重用内容的一部分,可能应该创建一个单独的纹理和渲染目标视图,用于渲染该纹理,然后以某种方式将该纹理的内容复制到SurfaceImageSource。我不确定最好的方法是什么-可能是内存映射纹理并在它们之间执行memcpy,或者将一个渲染为纹理四边形(两个三角形)到另一个。

我是DirectX的新手,但在我的测试中,我调用BeginDraw/DrawLine/EndDraw,这足以完全清除前一行…如果您使用D2D,并且基于SurfaceImageSource的渲染目标在不调用clear()的情况下被清除,那么您可以创建一个单独的位图渲染目标并绘制到它,然后,稍后将生成的位图绘制到基于SurfaceImageSource的目标-检查使用SharpDX的答案,并查看如何从另一个渲染目标创建bitmapRenderTarget,然后将一个位图渲染到另一个。我是DirectX的新手,但在我的测试中,我调用BeginDraw/DrawLine/EndDraw,这足以完全清除前一行…如果您使用D2D,并且基于SurfaceImageSource的渲染目标在不调用clear()的情况下被清除,那么您可以创建一个单独的位图渲染目标并绘制到它,然后,稍后将生成的位图绘制到基于SurfaceImageSource的目标-检查使用SharpDX的答案,并查看如何从另一个渲染目标创建bitmapRenderTarget,然后将一个位图渲染到另一个位图。