可以将DirectX表面绘制到WPF控件吗?

时间:2011-09-09 04:42:54

标签: c# wpf controls directx rendering

可以使用DirectX在WPF控件上绘制一组点(或者WPF可以使用的东西)。

我需要在WPF中实现一个控制,该控制应绘制16k点,更新速率为30 Hz,现在我的解决方案已经用完了。

这个想法来自this问题中的评论。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

是的,它可以。它通常非常流畅,因为WPF本身就是DirectX的实现。

见MS'Greg Schechter博客:

  

Redirecting GDI, DirectX, and WPF applications

您还可以在Codeproject的WPF表面上获得D3DImage的示例: http://www.codeproject.com/KB/WPF/D3DImage.aspx

答案 1 :(得分:0)

是的。您使用D3DImage,纹理(SharpDXSlimDX)和Surface。您需要在应用程序外部创建纹理,并通过视频驱动程序或其他方式更新其内容。在WPF中,您创建D3DImage

Texture = new Texture(Device.DeviceEx, width, height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default, ref handle);

非常重要的是,您的论坛必须为Format.A8R8G8B8(这是WPF的限制):

using (var surface = texture.GetSurfaceLevel(0))
        {
            var handle = surface.NativePointer;
            Lock();
                SetBackBuffer(D3DResourceType.IDirect3DSurface9, handle);
                Unlock();
        }

每次更新框架后,您只需

Lock();
                AddDirtyRect(new Int32Rect(0, 0, PixelWidth, PixelHeight));
                Unlock();

最好将D3DImage放在单独的Dispatcher