gpt4 book ai didi

c# - 如何将 WPF 窗口渲染到 DirectX 缓冲区中?

转载 作者:行者123 更新时间:2023-11-30 15:51:14 29 4
gpt4 key购买 nike

我想将 WPF 窗口渲染到我自己的缓冲区中,并将其添加到我的渲染循环中,渲染到我自己的场景中,对其进行操作等。

是否有内置方法来捕获 WPF 窗口的底层 DirectX 缓冲区/交换链?

最佳答案

可能但不容易。

Jeremiah Morrill 在尝试实现这一目标时发现了两篇很棒的文章。

A Critical Deep Dive into the WPF Rendering System

How to get access to WPF’s internal Direct3D guts

Jeremiah 使用用 C++ 编写的动态链接库 (DLL),它挂接 DirectX 函数并导出 C# 调用的 initialise 函数。

这仍然不会阻止您使用 Easyhook并使用 C# 而不是 Jeremiah 的方式来完成。

当我自己这样做时,这是我的流程:

  1. Hook DirectX 9/10/11(EndScene、Present)..
  2. .NET 域中的回调并使用 PInvoke 编码缓冲区数据
  3. 操纵缓冲区返回操纵缓冲区返回到 C++ 库
  4. 显示最终图像缓冲区屏幕即 WPF...

我的经验:在速度上有妥协,但我相信优化可能是可行的解决方案。

另一种解决方案您可以 EAT Hook D3D11CreateDeviceAndSwapChain,它是 d3d11.dll 的导出。这将不起作用,因为 WPF 在底层使用 DirectX 9。

更新:

在周末逆向 WPF 之后,我发现了非托管的 wpfgfx.dll,其中包含 milcore,它至今仍是 DirectX 9 的包装器。您可以在下面的 WPF 体系结构图中看到这一点。

WPF Architecture

在模块 wpfgfx.dll 中,它包含 MILCore DirectX 包装器。更多关于 WPF Architecture

关于c# - 如何将 WPF 窗口渲染到 DirectX 缓冲区中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57652450/

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