Can a DirectX surface be plotted to a WPF control?
Yes it can. It's usually quite smooth, because WPF itself is an implementation of DirectX.
See MS' Greg Schechter blog:
You can also have a sample of D3DImage on a surface on WPF from Codeproject:http://www.codeproject.com/KB/WPF/D3DImage.aspx
Yes. You use D3DImage
, Texture (SharpDX
or SlimDX
) and Surface
. You need create texture outside your application and update its conent by video driver or by another way. In WPF you create D3DImage
:
Texture = new Texture(Device.DeviceEx, width, height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default, ref handle);
Very important is that you foram must be Format.A8R8G8B8
(it is restriction of WPF):
using (var surface = texture.GetSurfaceLevel(0)) { var handle = surface.NativePointer; Lock(); SetBackBuffer(D3DResourceType.IDirect3DSurface9, handle); Unlock(); }
And after each updating of frame you need only
Lock(); AddDirtyRect(new Int32Rect(0, 0, PixelWidth, PixelHeight)); Unlock();
It's better, if you will put your D3DImage
in separate Dispatcher