gpt4 book ai didi

wpf - 使用 DirectX 11 在 WPF 控件上渲染

转载 作者:行者123 更新时间:2023-12-04 19:30:18 35 4
gpt4 key购买 nike

我正在尝试创建一个基于 WPF 的 map 编辑器。目前我正在使用 hack 来呈现 DirectX 内容。我创建了一个 WinFormsHost 并在 WinForms-Panel 上呈现。

这一切都是因为 DirectX(我使用 DirectX 11 和 Featurelevel 10)需要一个句柄(别名 IntPtr)来渲染。我不知道如何在没有 handle 的情况下初始化和使用 DX 设备。

但是 WPF 控件没有句柄。所以我刚刚发现,有一个名为“D3DImage”的互操作类。但我不明白如何使用它。

我目前的系统是这样工作的:

内部循环遍历“IGameloopElement”列表。对于每个,它呈现其内容调用“Draw()”。之后,它调用交换链的“Present()”来显示更改。然后它重置设备以将句柄切换到下一个元素(大多数情况下只有一个元素)。

现在,因为 D3DImage 没有句柄,我该如何渲染它?我只知道我必须使用“Lock()”然后“SetBackBuffer()”、“AddDirtyRect()”然后“Unlock()”。

但是如何在不指定设备句柄的情况下渲染到 DirectX11.Texture2D 对象上?

我真的迷路了......我刚刚在codeplex上找到了“DirectX 4 WPF”示例,但这实现了所有版本的DirectX,管理设备本身并且有如此巨大的开销。
我想留在我目前的系统中。我自己管理设备。我不希望 WPF 控件处理它。

循环只应调用“Render()”,然后将后台缓冲区纹理传递给 WPF 控件。

谁能告诉我如何做到这一点?我完全卡住了...

非常感谢 :)

电阻

最佳答案

WPF的D3DImage只支持Direct3D9/Direct3D9Ex,不支持Direct3D 11。需要使用DXGI Surface Sharing使其工作。

关于wpf - 使用 DirectX 11 在 WPF 控件上渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11794516/

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