I recently ported the drawing code to DirectX and was very pleased with the results. Basically, we painted bitmap images using a beat, and we see the visualization time, which can be measured in a few minutes, reduced to 1-2 seconds.
It cannot compare directly with you, as we have switched from a beat in C ++ to Direct3D in C # using SlimDX, but I think you will see the performance benefits, even if they are not orders we see.
I would advise you to take a look at using Direct2D with SlimDX. You will need to use DirectX 10.1, because Direct2D is for some reason not compatible with DirectX 11. If you used the drawing API in WPF, then you will already be familiar with Direct2D, since its API is based on the WPF API, as far as I I can judge. The main problems with Direct2D are the lack of documentation and the fact that it only works in Vista.
I have not experimented with InterX DirectX 10 / WPF, but I believe it is possible (http://stackoverflow.com/questions/1252780/d3dimage-using-dx10)
EDIT: I thought I would give you a comparison with our simple polygon drawing code. First version of WPF:
StreamGeometry geometry = new StreamGeometry(); using (StreamGeometryContext ctx = geometry.Open()) { foreach (Polygon polygon in mask.Polygons) { bool first = true; foreach (Vector2 p in polygon.Points) { Point point = new Point(pX, pY); if (first) { ctx.BeginFigure(point, true, true); first = false; } else { ctx.LineTo(point, false, false); } } } }
Now version of Direct2D:
Texture2D maskTexture = helper.CreateRenderTexture(width, height); RenderTargetProperties props = new RenderTargetProperties { HorizontalDpi = 96, PixelFormat = new PixelFormat(SlimDX.DXGI.Format.Unknown, AlphaMode.Premultiplied), Type = RenderTargetType.Default, Usage = RenderTargetUsage.None, VerticalDpi = 96, }; using (SlimDX.Direct2D.Factory factory = new SlimDX.Direct2D.Factory()) using (SlimDX.DXGI.Surface surface = maskTexture.AsSurface()) using (RenderTarget target = RenderTarget.FromDXGI(factory, surface, props)) using (SlimDX.Direct2D.Brush brush = new SolidColorBrush(target, new SlimDX.Color4(System.Drawing.Color.Red))) using (PathGeometry geometry = new PathGeometry(factory)) using (SimplifiedGeometrySink sink = geometry.Open()) { foreach (Polygon polygon in mask.Polygons) { PointF[] points = new PointF[polygon.Points.Count()]; int i = 0; foreach (Vector2 p in polygon.Points) { points[i++] = new PointF(pX * width, pY * height); } sink.BeginFigure(points[0], FigureBegin.Filled); sink.AddLines(points); sink.EndFigure(FigureEnd.Closed); } sink.Close(); target.BeginDraw(); target.FillGeometry(geometry, brush); target.EndDraw(); }
As you can see, the Direct2D version works a bit more (and relies on a few helper functions that I wrote), but in fact it is very similar.