WPF与DirectX 11

3

现在我有一个用c++/cli编写的封装器,它被用在c#(WPF)中。这个封装器将本地c++图形引擎封装为能够理解的c#代码。但这不是问题(等一下……)。所以在WPF中,我有一个Windows控件(是的,这是可能的),我从中接收句柄(HWND)。所有这些都很好,并且帧正在渲染,唯一的问题是性能。渲染按照以下方式触发:

        ...
        System.Windows.Media.CompositionTarget.Rendering += new EventHandler(Render);
    }

    private void Render(Object sender, EventArgs e)
    {
        EngineWrapper.RenderFrame();
    }

所以fps非常低,这意味着对Render()的调用速率非常低(因为我的应用程序最初是在MFC中,帧速率要高得多!)。所以我想问你,有什么方法可以提高它吗?一种新的方式,另一个线程?(一定有办法……)

编辑: 我是通过以下方式创建Windows控件的:

        System.Windows.Forms.Integration.WindowsFormsHost host =
            new System.Windows.Forms.Integration.WindowsFormsHost();

        System.Windows.Forms.Panel panel = new System.Windows.Forms.Panel();

        host.Child = panel;

        this.RenderCamera_WorkareaGrid.Children.Add(host);

Thank You


你考虑过使用 SlimDX 或 SharpDX (.NET DX 封装器)吗?你得到了多少帧率? - Alan
你是否对代码进行了分析,看看哪一部分现在变慢了? - Ani
Alan:我现在对.NET DX包装器没有兴趣... - Miguel P
Render() 是我自己创建的函数,不是预先存在的函数。而且这个函数调用了 Wrapper 的函数:EngineWrapper.RenderFrame(); - Miguel P
Windows控件的hwnd(句柄)被发送到引擎(包装器)。 - Miguel P
显示剩余3条评论
1个回答

2
你需要获取渲染场景的Surface,并将其句柄发送到WPF系统的D3DImage中。看看CodePlex上是如何实现的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接