Can a DirectX surface be plotted to a WPF control?
Can DirectX be used to plot a set of points on a WPF control (or something that can be used by WPF).
I need to implement a control in WPF that should plot 16k points with an update rate of 30 Hz, and i'm running out of s开发者_运维知识库olutions rigth now.
This idea is from a comment in this question.
Any help would be very appreciated.
Yes it can. It's usually quite smooth, because WPF itself is an implementation of DirectX.
See MS' Greg Schechter blog:
Redirecting GDI, DirectX, and WPF applications
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
精彩评论