C# SharpDx Direct2D在每个图层上绘制图层

C# SharpDx Direct2D在每个图层上绘制图层,c#,sharpdx,direct2d,C#,Sharpdx,Direct2d,我正在使用sharpDx Render Control创建一个应用程序,其中我希望使用Direct2d rendertarget在控制中绘制多个层,并且所有层都应可见。但问题是当我调用rendertarget.Clear(Color.Transparent)时,它会用黑色清除屏幕,而我看不到其他层。若我并没有调用Clear方法,那个么它并没有清除当前图层,我正在使用鼠标移动画线,所以需要清除图层。我不能每次都绘制每一层,因为它可以绘制数千个对象,这会减慢应用程序的速度。 那个么,如何用透明的背景

我正在使用sharpDx Render Control创建一个应用程序,其中我希望使用Direct2d rendertarget在控制中绘制多个层,并且所有层都应可见。但问题是当我调用rendertarget.Clear(Color.Transparent)时,它会用黑色清除屏幕,而我看不到其他层。若我并没有调用Clear方法,那个么它并没有清除当前图层,我正在使用鼠标移动画线,所以需要清除图层。我不能每次都绘制每一层,因为它可以绘制数千个对象,这会减慢应用程序的速度。 那个么,如何用透明的背景清除图层,以便我可以同时看到其他图层呢?还是有其他方法可以做到这一点

//示例代码

if(!newObject)
DrawAllGeometry(renderTarget, strokeWidth);
else
{
    layer = new Layer(renderTarget, renderTarget.Size);
    var layerParam = new LayerParameters() { ContentBounds = RectangleF.Infinite };
    renderTarget.PushLayer(ref layerParam, layer);
    renderTarget.Clear(Color.Transparent); /* This code makes the screen black. I want this layer transparent, so i can see drawings of DrawAllGeometry() */
    renderTarget.DrawRectangle(new RectangleF(canvasSP.X, -canvasSP.Y, width, height), new SolidColorBrush(renderTarget, Color.Green), strokeWidth * 5);
renderTarget.PopLayer();
}

如果你能提供一些源代码,你可能会得到更相关的回应。我也有一些想法,但除非我知道你的代码是如何执行的,否则我无法做出贡献。不确定2d,但在3d中,我在缓冲区上渲染了不移动的对象。缓冲区被渲染得非常快。@Florian Schmidinger-我正在绘制200000多个对象,并在新图层上添加新对象,因为我不想再绘制200000个对象。这是你的案子吗@Kodaloid-我已经用示例代码进行了更新。是的,这是我的情况,但是我使用了sharpdx的前身,用于3d cad应用程序。我想你可以把这些图层存储在一个列表中,然后重新渲染它们?在这种情况下,层是缓冲区的一种形式,你只需要尊重它们的绘制顺序。如果你能提供一些源代码,你可能会得到更相关的响应。我也有一些想法,但除非我知道你的代码是如何执行的,否则我无法做出贡献。不确定2d,但在3d中,我在缓冲区上渲染了不移动的对象。缓冲区被渲染得非常快。@Florian Schmidinger-我正在绘制200000多个对象,并在新图层上添加新对象,因为我不想再绘制200000个对象。这是你的案子吗@Kodaloid-我已经用示例代码进行了更新。是的,这是我的情况,但是我使用了sharpdx的前身,用于3d cad应用程序。我想你可以把这些图层存储在一个列表中,然后重新渲染它们?在这种情况下,层是缓冲区的一种形式,您只需要遵守绘制它们的顺序。