我是 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
您现在会发现纹理向右滚动了一半宽度。
希望有帮助!
编辑:如果您不能执行上述操作,那么您可能会稍微卡住,因为您无法从相同的纹理读取和写入(在某些驱动程序上您可以,但它的行为未定义)。所以你有2个选择。
1)创建一个渲染目标纹理,然后使用您的偏移量将原始纹理(如上)渲染到新的渲染目标。然后纹理与渲染目标纹理。
2) 锁定(映射)纹理并将各个字节复制到新位置(由于 PCIe 总线复制,这将非常慢)。
因此,理想情况下,您会按照我在 1 中的建议进行操作。但是,为了获得最佳性能,您需要设置一个“滚动纹理顶点着色器”,在其中将滚动量设置为常数,然后按照最初描述的方式偏移每个顶点的纹理坐标。这将是迄今为止性能最高的方法。