有一個帶有自己的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在這裏說的好例子???
是你的拖曳表面是創建兩個進程還是一個進程? – RolandXu
單一進程中,我從回調中啓動了自己的線程,以便在用戶發送特定命令打開它時啓動並顯示窗口。 – Deamonpog
我試着鎖定紋理表面(0級)和其他表面並複製數據。那麼,那工作。但我想知道'CreateTexture'有多好。根據MSDN頁面,我必須傳遞一個指向像素數據的'void *'作爲'CreateTexture'函數的最後一個參數rite? 例如: 'void * _pt;創建紋理(Width,Height,1,D3DUSAGE_DYNAMIC,Format,D3DPOOL_SYSTEMMEM,&mytexture,(HANDLE *)_pt);' – Deamonpog