-1

我是 DirectX 技术的新手。

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

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

4

1 回答 1

0

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

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

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

希望有帮助!

编辑:如果您不能执行上述操作,那么您可能会稍微卡住,因为您无法从相同的纹理读取和写入(在某些驱动程序上您可以,但它的行为未定义)。所以你有2个选择。

1)创建一个渲染目标纹理,然后使用您的偏移量将原始纹理(如上)渲染到新的渲染目标。然后纹理与渲染目标纹理。

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

因此,理想情况下,您会按照我在 1 中的建议进行操作。但是,为了获得最佳性能,您需要设置一个“滚动纹理顶点着色器”,在其中将滚动量设置为常数,然后按照最初描述的方式偏移每个顶点的纹理坐标。这将是迄今为止性能最高的方法。

于 2012-03-22T18:25:47.050 回答