2012-06-05 31 views
0

有一個帶有自己的Direct3D設備的窗口,可以將其稱爲mainWindow。 mainWindow和它的東西是由其他人創建的。他們給了我一些他們在mainWindow上繪製的Direct3D曲面(IDirect3DSurface9指針)。
我從其中一個回調中啓動了一個線程,並使用winAPI創建了自己的窗口。 (我在this問題上有點類似的情況)
我想在窗口上繪製那些RTT輸出。所以我試圖將表面複製到我在自己的directx設備中繪製的表面/紋理中,該設備繪製在我的窗口上。
將IDirect3DSurface的數據複製到使用兩個directx設備創建的另一個IDirect3DSurface

一些東西,我發現在試圖做到這一點,

  • 這可以很容易地使用D3DXSaveSurfaceToFileInMemory(...)D3DXCreateTextureFromFileInMemory(...)函數來完成。
  • StrechRect(...)功能不適用於使用兩個設備創建的兩個表面。

我試圖鎖定表面並將數據從一個複製到另一個,但它似乎沒有工作。但我會再試一次。 (從兩個不同的設備鎖定表面是非法的?)

有沒有什麼方法可以讓人們知道或建議這樣做?

---編輯---
MSDN說(link to the page

在Windows Vista中CreateTexture可以從系統 內存指針創建一個紋理允許應用程序更多的靈活性比使用, 分配和刪除系統內存。例如,一個 應用程序可以傳遞一個GDI系統內存位圖指針,並在其周圍獲得一個Direct3D紋理接口。使用帶有CreateTexture的系統內存指針 有以下限制。

  • 紋理的節距必須等於寬度乘以每個像素的字節數。
  • 僅支持具有單個mipmap級別的紋理。級別參數必須爲1.
  • 池參數必須爲D3DPOOL_SYSTEMMEM。
  • pSharedHandle參數必須是指向緩衝區的有效指針,緩衝區可以保存系統內存點; * pSharedHandle必須是有效的 指向系統內存的指針,其大小以紋理寬度的字節爲單位* 紋理高度*字節/紋理格式的每個像素。

我無法找到這種方式創建質感的任何例子,但我試圖做到這一點,我得到的是一個充滿噪音,沒有其他的輸出。如果有人可以幫助我,我想我的問題將在一定程度上得到解決...... 是否有任何msdn在這裏說的好例子???

+0

是你的拖曳表面是創建兩個進程還是一個進程? – RolandXu

+0

單一進程中,我從回調中啓動了自己的線程,以便在用戶發送特定命令打開它時啓動並顯示窗口。 – Deamonpog

+0

我試着鎖定紋理表面(0級)和其他表面並複製數據。那麼,那工作。但我想知道'CreateTexture'有多好。根據MSDN頁面,我必須傳遞一個指向像素數據的'void *'作爲'CreateTexture'函數的最後一個參數rite? 例如: 'void * _pt;創建紋理(Width,Height,1,D3DUSAGE_DYNAMIC,Format,D3DPOOL_SYSTEMMEM,&mytexture,(HANDLE *)_pt);' – Deamonpog

回答

相關問題