【问题标题】:Copy D3D11 Texture2D to D2D1 Bitmap将 D3D11 Texture2D 复制到 D2D1 位图
【发布时间】:2018-09-11 00:31:58
【问题描述】:

我创建了一个 D3D11 设备,Windows 10,最新版本,并创建了一个 ID3D11Texture2D * GPU 内存。我想将这个 Texture2D 的内容拉伸并绘制到 HWND 的一个区域上。我不想使用顶点缓冲区,我想使用“其他东西”。我不想将这些位复制到 CPU,然后再次将它们带回 GPU。 StretchDIBits 或 StretchBlt 太慢了。

假设我想使用 D2D1... 我需要一种方法将我的 D3D11 texture2D 复制或共享到 D2D1。然后,我想使用 D2D1 渲染目标将 blit 拉伸到 HWND。

我已经阅读了 MS 文档,但它们没有多大意义。 想法?

【问题讨论】:

    标签: direct3d


    【解决方案1】:

    如果您已经拥有ID3D11Texture,为什么不直接使用 Direct3D 将其渲染为纹理?这就是硬件的设计初衷,它可以快速且高质量地完成。

    DirectX Tool KitSpriteBatch 类是开始一般精灵渲染的好地方,它确实在内部使用了 VB、着色器等。

    Direct2D 非常适合绘制经典矢量/演示图形的场景,如圆形、椭圆、弧线等。它还可以用作使用 DirectWrite 制作高质量、高度可扩展字体的一种方式。对于 blitting 矩形,只需使用 Direct3D,这是 Direct2D 无论如何都必须使用的。

    请注意,如果您需要 Direct3D 硬件功能级别 10.0 或更高版本,您可以使用依赖于顶点着色器中 Vertex_ID 的常用技巧,这样您就可以自行生成几何图形,而无需任何 VB 或 IB .见this code

    【讨论】:

    • SpriteBatch 是一个绝妙的答案。我不想使用 Direct3D 将其渲染为纹理,因为顶点缓冲区代码、创建渲染目标、着色器资源视图等都是“不可维护的”。必须处理此代码的其他人不是 D3D 专家,但他们确实了解 SpriteBatch.Blit(destinationRectangle)。我很惊讶,很难找到如何将 Texture2D 拉伸到窗口的答案,但至少有一个答案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2010-09-25
    相关资源
    最近更新 更多