【发布时间】:2012-03-21 12:24:40
【问题描述】:
我是 DirectX 技术的新手。
如何滚动 ID3D10Texture2D 的内容?使用bitblt。 GDI 设备上下文中的 BitBlt 之类的东西,其中 src 和 dst hdc 相同。
我有来自 IDXGISurface 的 ID3D10Texture2D,滚动是我的真正目标,但在 dxgi api 中找不到任何东西。
【问题讨论】:
我是 DirectX 技术的新手。
如何滚动 ID3D10Texture2D 的内容?使用bitblt。 GDI 设备上下文中的 BitBlt 之类的东西,其中 src 和 dst hdc 相同。
我有来自 IDXGISurface 的 ID3D10Texture2D,滚动是我的真正目标,但在 dxgi api 中找不到任何东西。
【问题讨论】:
滚动相当容易。要绘制整个纹理,您的纹理从 0、0 到 1,1。现在改为将 0.5 添加到每个 x 坐标,这样您就会得到以下结果:
0.5, 0.0----------------1.5, 0.0
| |
| |
| |
| |
| |
0.5, 1.0----------------1.5, 1.0
您现在会发现纹理向右滚动了一半宽度。
希望有帮助!
编辑:如果您不能执行上述操作,那么您可能会稍微卡住,因为您无法从同一纹理读取和写入(在某些驱动程序上您可以,但其行为未定义) .所以你有两个选择。
1) 创建一个渲染目标纹理,然后使用您的偏移量将原始纹理(如上)渲染到新的渲染目标。然后使用渲染目标纹理纹理。
2) 锁定(映射)纹理并将单个字节复制到新位置(由于 PCIe 总线复制,这将非常慢)。
因此,理想情况下,您会按照我在 1 中的建议进行操作。但是,为了获得最佳性能,您需要设置一个“滚动纹理顶点着色器”,在其中将滚动量设置为常数,然后将每个顶点的纹理坐标偏移为原来描述的。这将是迄今为止性能最高的方法。
【讨论】: