2012-03-21 124 views
-1

我是DirectX技术的新手用户。ID3D10Texture2D滚动内容

如何滚动ID3D10Texture2D的内容?使用bitblt。像GDI设备上下文中的src和dst hdc相同的BitBlt。

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

回答

0

滚动相当容易。绘制从0,0到1,1纹理的整个纹理。现在,而不是添加0.5至各X坐标,所以你得到如下:

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

你会发现现在的质地了一半的宽度向右srolled。

希望有帮助!如果你不能做到以上的事情,你可能会有点卡住,因为你无法读取和写入相同的纹理(以及一些驱动程序,你可以但未定义的行为)。所以你有2个选择。

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

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

因此,理想情况下,您应该按照我在1中的建议进行操作。为获得最佳性能,您可以设置“滚动纹理顶点着色器”,将滚动量设置为常量,然后偏移每顶点的纹理坐标如最初所述。这将是迄今为止最高性能的方法。

+0

我问过如何滚动纹理内容,而不是如何在另一个位置绘制它。 – Roman 2012-04-17 11:34:51

+0

@Roman ......你到底是什么意思?上面的描述会将其宽度的一半滚动到右侧?将纹理设置为自动换行模式也意味着右边的数据“脱落”会左移“换行”......如果您想滚动实际的纹理数据,那么我不得不提醒您。它会产生一个可怕的管道泡泡,因为您需要通过PCIe总线将数据从图形卡复制到图形卡。 – Goz 2012-04-17 11:36:47

+0

@罗曼:好吧,我已经更新了我的答案,但你会发现最好的方法仍然像我最初描述的那样。 – Goz 2012-04-17 11:46:07