【问题标题】:Resize Texture2D SharpDX调整 Texture2D SharpDX 的大小
【发布时间】:2017-11-20 02:53:21
【问题描述】:

如何调整 SharpDX 的 texture2d 大小?我正在使用 SharpDX 复制屏幕,并使用 MediaFoundation 将纹理编码为视频文件。我的问题是,当我以全屏模式打开应用程序并且分辨率与系统分辨率不同时,我的录音出现空白屏幕。有没有更好的方法可以在编码到 mediafoundation 之前调整纹理大小而不会影响性能?我正在使用硬件加速。谢谢。

【问题讨论】:

    标签: directx sharpdx ms-media-foundation dxgi


    【解决方案1】:

    这取决于您如何使用 Media Foundation,但您可以明确使用 Video Processor MFT。如果使用 IMFMediaSession/IMFTopology,则需要将此 MFT 添加到拓扑中。或者,如果您使用 Sink Writer,则使用此 MFT 初始化和处理示例。在这种情况下,您需要使用 MFT_MESSAGE_SET_D3D_MANAGER 将 DX 管理器提供给 MFT。

    此 MFT 仅适用于 Windows 8 及更高版本。因此,如果您需要支持较旧的 Windows 版本,您可以使用Video Resizer,但它不是硬件加速的。

    调整纹理大小的另一个选项是创建所需大小的渲染目标并将纹理绘制到它。之后,您需要将该渲染目标提供给编码器。

    【讨论】:

    • 嗨,Vulvrit 感谢您的回复。最后一个选项正是我所追求的,但我在网上找不到任何关于如何正确执行的源代码。我是这个 d3d 编程的新手,还在学习。有时我发现用 c++ 编写的代码,我只是将其转换为 c#。
    • 是的,我使用 MFT_MESSAGE_SET_D3D_MANAGER。
    • 您在实现中使用 IMFMediaSession/IMFTopology 吗?
    • 我不完全确定,但这就是我初始化接收器编写器的方式。请看链接pastebin.com/te5wHTtX
    • 我已经看到您提供的链接,但它只支持调整大小为 2 的幂,并且不允许将较小的纹理调整为较大的纹理。我打算使用渲染目标,但我找不到有关如何使用它以及如何从渲染目标中获取纹理并将其传递给我的纹理分配器的教程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    相关资源
    最近更新 更多