将D3D11 Texture2D复制到D2D1位图

时间:2018-09-09 15:50:05

标签: direct3d

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

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

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

1 个答案:

答案 0 :(得分:1)

如果您已经有了ID3D11Texture,为什么不只使用Direct3D将其渲染为纹理呢?这就是硬件的设计目的,可以非常快速地实现高质量。

DirectX Tool Kit SpriteBatch类是开始普通Sprite渲染的好地方,并且确实在内部使用了VB,着色器等。

Direct2D确实最适合于您绘制经典矢量/表示图形的场景,例如圆形,椭圆形,弧形等。它还可用作将DirectWrite用于高质量,高可伸缩字体的一种方式。对于矩形绘制,只要使用Direct3D,无论如何Direct2D都必须使用Direct3D。

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