Windows 8商店不想在我的應用中看到d3dx9
,這是寫在DirectX 9
。但我需要D3DXCreateTexture
函數。我被發現DirectXTex
,但它需要DirectX 11
。有沒有什麼辦法可以避免在DirectX 11
中全部重寫?如何在不使用d3dx9的情況下在DirectX 9中創建紋理?
1
A
回答
3
首先你必須加載原始位圖數據。有很多種方法:
- 寫自己的裝載機(未在21世紀OO)
- 使用庫您需要的格式。如libpng,libjpeg,google上更多=)
- 使用多格式庫(C/C++ Image Loading)。 FreeImage是我的最愛。
然後,你必須創建通過D3DXCreateTextureFromFileInMemory或D3DXCreateTextureFromFileInMemoryExIDirect3DTexture9,你準備去=)
更新:
好。我們不能使用它D3DXCreateTextureFromFileInMemory
。所以......我們可以實施它。 如前所述,我們必須以某種方式將位圖加載到內存中(我更喜歡使用FreeImage)。然後我們創建空IDirect3DTexture9*通過CreateTexture()方法。然後,我們使用LockRect()/UnlockRect()將位圖的內容複製到該紋理。那次我們準備好了,因爲我已經測試過了! =)測試VS2012解決方案,包括用於FreeType:link(髒亂,改寫它,請在一類包裝) 核心功能:
void CreateTexture(const wchar_t* filename)
{
unsigned int width(0), height(0);
std::vector<unsigned char> bitmap;
LoadBitmapFile(filename, bitmap, width, height); // Wrapped FreeImage
// Create empty IDirect3DTexture9*
pDevice->CreateTexture(width, height, 1, 0,
D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &pTexture, 0);
if (!pTexture)
{
throw std::runtime_error("CreateTexture failed");
}
D3DLOCKED_RECT rect;
pTexture->LockRect(0, &rect, 0, D3DLOCK_DISCARD);
unsigned char* dest = static_cast<unsigned char*>(rect.pBits);
memcpy(dest, &bitmap[0], sizeof(unsigned char) * width * height * 4);
pTexture->UnlockRect(0);
}
希望它能幫助。
P.S.其實還有另一個問題:投影矩陣。您將需要手動創建它或使用一些數學庫,因爲您無法使用D3DXMatrix ..()函數。
0
看來DirectX 9
代碼必須與DirectX 11
被rewriten,引起DirectXTK
,DirectXTex
,DirectXMath
庫僅適用於DX11。更多的信息我發現在http://social.msdn.microsoft.com/Forums/en-US/wingameswithdirectx/thread/c082b208-0d95-4c41-852f-9450340093f4/
相關問題
- 1. 如何在DirectX 9中創建Cubemap 9
- 2. 如何在我的DirectX 9中的紋理不透明度?
- 3. 如何在不使用opengl或directx的情況下在java中填充和紋理一個圓柱體
- 4. C++ directx 9網格紋理
- 5. 如何在不使用Membership.CreateUser()的情況下創建用戶?
- 6. DirectX 9 - 創建設備並渲染紋理裏面的DLL?
- 7. 如何在不創建NaN的情況下處理數據框?
- 8. 如何在不創建目錄的情況下處理URL
- 9. 如何在不使用Shadow DOM的情況下創建組件?
- 10. 如何在不使用文件的情況下創建鬍鬚?
- 11. 如何在不使用String的情況下創建JSON對象?
- 12. 如何在不使用事務的情況下創建死鎖?
- 13. 如何在不使用`-`或`--`的情況下創建參數?
- 14. 如何在不使用JFreeChart的情況下創建圖形?
- 15. 如何在不使用xcode的情況下創建.xcappdata?
- 16. 在directx中應用紋理時存在巨大問題9 C++
- 17. 在不使用foreach的情況下在數組中創建鍵?
- 18. 在不使用塊ROM的情況下在verilog中創建ROM
- 19. 在不使用kibana的情況下在kibana中創建索引
- 20. 如何在不創建目錄的情況下創建鏈接?
- 21. 如何在不使用GUI的情況下創建SQL Server代理?
- 22. 如何在不使用django管理員的情況下創建userprofile表單?
- 23. DirectX 9的固定功能紋理
- 24. 的DirectX 9 HLSL紋理採樣問題
- 25. 如何在不使用指紋捕捉設備的情況下創建指紋登錄?
- 26. 紋理在以下情況下如何被破壞?
- 27. OpenGL - 如何在不影響紋理的情況下在單個TRIANGLE_STRIP中跳轉?
- 28. 在不使用任何外部庫的情況下創建JSON?
- 29. 如何在不使用Javascript的情況下在HTML中創建菜單?
- 30. 如何在不使用插件的情況下在WordPress中創建圖庫?
D3DXCreateTextureFromFileInMemory在'd3dx9.lib',我不能使用它 – hoody 2013-04-24 06:07:49
那麼,我的回答是完全錯誤的,對不起。 – Drop 2013-04-24 06:45:38
我已經更新了我的答案:我們可以在沒有D3DXCreateTextureFromFileInMemory的情況下創建紋理資源。 – Drop 2013-04-24 11:58:23