ID3D10Texture2D滚动内容

时间:2012-03-21 12:24:40

标签: direct3d direct2d dxgi

我是DirectX技术的新手。

如何滚动ID3D10Texture2D的内容?使用bitblt。类似于GDI设备上下文中的BitBlt,其中src和dst hdc是相同的。

我有来自IDXGISurface的ID3D10Texture2D,滚动是我的真正目标,但在dxgi api中找不到任何内容。

1 个答案:

答案 0 :(得分:0)

滚动相当容易。要绘制整个纹理,纹理从0,0到1,1。现在改为向每个x坐标添加0.5,以便得到以下结果:

0.5, 0.0----------------1.5, 0.0
   |                       |
   |                       |
   |                       |
   |                       |
   |                       |
0.5, 1.0----------------1.5, 1.0

现在您将发现纹理已经向右滚动了一半宽度。

希望有所帮助!

编辑:如果你不能做到这一点,那么你可能会有点卡住,因为你无法从相同的纹理读取和写入(在某些驱动程序上你可以,但它的未定义行为) 。所以你有两个选择。

1)创建渲染目标纹理,然后使用您的偏移将原始纹理渲染(如上所示)到新渲染目标。然后使用渲染目标纹理进行纹理。

2)锁定(映射)纹理并将各个字节复制到新位置(由于PCIe总线复制,这将非常慢)。

理想情况下,你会像我在1中所做的那样做。为了获得最佳性能,你要设置一个“滚动纹理顶点着色器”,你可以将滚动量设置为常量,然后将每个顶点的纹理坐标偏移为最初描述。这将是迄今为止最高效的方法。