我创建了一个D3D11设备,最新版本的Windows 10和一个ID3D11Texture2D *创建的GPU内存。我想将此Texture2D的内容拉伸并绘制到HWND的区域上。我不想使用顶点缓冲区,我想使用“其他”。我不想将这些位复制到CPU,然后再将它们重新备份到GPU。 StretchDIBits或StretchBlt会太慢。
让我们假装我想使用D2D1 ...我需要一种方法来将我的D3D11 texture2D复制或共享到D2D1。然后,我想使用D2D1渲染目标将其拉伸到HWND。
我已经阅读了MS文档,但它们没有多大意义。 想法?
答案 0 :(得分:1)
如果您已经有了ID3D11Texture
,为什么不只使用Direct3D将其渲染为纹理呢?这就是硬件的设计目的,可以非常快速地实现高质量。
DirectX Tool Kit SpriteBatch
类是开始普通Sprite渲染的好地方,并且确实在内部使用了VB,着色器等。
Direct2D确实最适合于您绘制经典矢量/表示图形的场景,例如圆形,椭圆形,弧形等。它还可用作将DirectWrite用于高质量,高可伸缩字体的一种方式。对于矩形绘制,只要使用Direct3D,无论如何Direct2D都必须使用Direct3D。
请注意,如果您需要Direct3D硬件功能级别10.0或更高版本,则可以使用依赖于顶点着色器中Vertex_ID
的常见技巧,因此无需VB即可自行生成几何图形或IB。参见this code。