我是DirectX技術的新手用戶。ID3D10Texture2D滾動內容
如何滾動ID3D10Texture2D的內容?使用bitblt。像GDI設備上下文中的src和dst hdc相同的BitBlt。
我ID3D10Texture2D從IDXGISurface滾動是我的真正目標,但在dxgi api中找不到任何東西。
我是DirectX技術的新手用戶。ID3D10Texture2D滾動內容
如何滾動ID3D10Texture2D的內容?使用bitblt。像GDI設備上下文中的src和dst hdc相同的BitBlt。
我ID3D10Texture2D從IDXGISurface滾動是我的真正目標,但在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
你會發現現在的質地了一半的寬度向右srolled。
希望有幫助!如果你不能做到以上的事情,你可能會有點卡住,因爲你無法讀取和寫入相同的紋理(以及一些驅動程序,你可以但未定義的行爲)。所以你有2個選擇。
1)創建一個渲染目標紋理,然後使用你的偏移量渲染(如上)原始紋理到新的渲染目標。然後用渲染目標紋理進行紋理處理。
2)鎖定(映射)紋理並將各個字節複製到新位置(由於PCIe總線副本,這將非常緩慢)。
因此,理想情況下,您應該按照我在1中的建議進行操作。爲獲得最佳性能,您可以設置「滾動紋理頂點着色器」,將滾動量設置爲常量,然後偏移每頂點的紋理座標如最初所述。這將是迄今爲止最高性能的方法。
我問過如何滾動紋理內容,而不是如何在另一個位置繪製它。 – Roman 2012-04-17 11:34:51
@Roman ......你到底是什麼意思?上面的描述會將其寬度的一半滾動到右側?將紋理設置爲自動換行模式也意味着右邊的數據「脫落」會左移「換行」......如果您想滾動實際的紋理數據,那麼我不得不提醒您。它會產生一個可怕的管道泡泡,因爲您需要通過PCIe總線將數據從圖形卡複製到圖形卡。 – Goz 2012-04-17 11:36:47
@羅曼:好吧,我已經更新了我的答案,但你會發現最好的方法仍然像我最初描述的那樣。 – Goz 2012-04-17 11:46:07