gpt4 book ai didi

c# - 在 C# WPF 或 Windows 窗体应用程序中使用 DirectX c++ DLL

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:46 25 4
gpt4 key购买 nike

我使用 C++ 编写了一个 DX11 渲染器。我现在正在寻找一种为其实现编辑器/GUI 的方法。

由于我非常习惯 Windows 窗体和 WPF C# 应用程序,我正在考虑将我的渲染器放入 dll 中,从 c# 应用程序加载 dll 并使用它绘制到窗体的定义部分。这甚至可以与托管 C# 应用程序传递的窗口句柄一起使用吗?如果可以,性能如何?

根据我的理解,由于与 DX11 API 的实际通信仍然直接在 C++ 中进行,而 C# 部分只会告诉 dll 做什么,因此性能损失应该几乎没有。或者这通常是个坏主意,使用库或 D2D 直接在 C++ 中实现 GUI 是更好的方法。

最佳答案

在 WPF 中,您可以使用 D3DImage这就像您的 xaml 中的一个简单图像。总体原则如下:

  • 分配一个 Direct3D 9 纹理,这将是您的渲染目标。
  • 将其交给 D3DImage.SetBackBuffer。
  • 将渲染代码放入 CompositionTarget.Rendering 事件处理程序中。

        RenderStuffToTexture();
    d3dImage.Lock();
    d3dImage.AddDirtyRect(new Int32Rect()
    {
    X = 0,
    Y = 0,
    Height = d3dImage.PixelHeight,
    Width = d3dImage.PixelWidth
    });
    d3dImage.Unlock();

由于您使用的是 Direct3D 11,因此您必须使用 DXGI surface sharing与 D3D11 共享 D3D9 文本。我知道有两个例子可以说明如何做到这一点。微软D3D11Image和D3DImageEx(个人喜好,网上多处可以找到)。

关于性能,一旦您使用 WPF,您就不再需要自己进行演示。您实际上是在基于 WPF D3D9 的渲染器中编写一个小的渲染到纹理逻辑。因此,并非一切都可以控制,包括演示时间。根据我的个人经验,您绝对可以以不错的帧率渲染简单的场景。对于真正的图形密集型应用程序和严格的 FPS 要求,我会使用更轻量级(且侵入性更小)的 UI 解决方案。

请注意,您还可以使用 WinformHost 控件获取 HWND 并呈现给它。如果您想将 UI 控件覆盖在渲染的帧上,这将有一个严重的缺点 - 据我所知,您根本做不到。

关于c# - 在 C# WPF 或 Windows 窗体应用程序中使用 DirectX c++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54767732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com