2014-07-25 97 views
2

我在閱讀 DX11的教程,但我主要通過metro風格的應用程序學習了DX11.1的編程。 隨着我繼續學習,我發現DX11.1中的一些功能不再適用於DX11.1,例如D3DX11CreateShaderResourceViewFromFile,該教程用於加載紋理,但在DX11.1中我們沒有這個功能! 我的問題是如何在DX11.1中加載DDS紋理? 我要替換的功能在這個代碼,這樣我可以加載DDS質地:在directX中加載紋理11.1

hr = D3DX11CreateShaderResourceViewFromFile(d3d11Device, L"braynzar.jpg", 
     NULL, NULL, &CubesTexture, NULL); 

    // Describe the Sample State 
    D3D11_SAMPLER_DESC sampDesc; 
    ZeroMemory(&sampDesc, sizeof(sampDesc)); 
    sampDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; 
    sampDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; 
    sampDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; 
    sampDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; 
    sampDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; 
    sampDesc.MinLOD = 0; 
    sampDesc.MaxLOD = D3D11_FLOAT32_MAX; 

    //Create the Sample State 
    hr = d3d11Device->CreateSamplerState(&sampDesc, &CubesTexSamplerState); 

回答

-1

DirectxTK在DDSTextureLoader看看。

編輯他明確詢問如何加載DDS紋理。請在投票前仔細閱讀問題。

+0

由於它是一個.JPG,他應該在[DirectXTK](http://go.microsoft.com/fwlink/?LinkId=248929)中使用WICTextureLoader,但是......這是一個很好的去處。一定要看看[沒有D3DX的生活](http://blogs.msdn.com/b/chuckw/archive/2013/08/21/living-without-d3dx.aspx)。 –

10

「Direct3D」和「D3DX」之間總是存在區別,但它並不一定對每個人都很明顯。 D3DX的所有版本現在爲deprecated,不在Windows 8.x SDK中,並且不能用於Windows應用商店應用,Windows Phone 8.x應用或Xbox One應用。請閱讀Where is the DirectX SDK?瞭解更多信息。

D3DX的主要替換庫是​​,DirectXTexDirectXMesh。這些支持所有Direct3D 11.x平臺,包括Windows 8.0的Windows Store應用程序,Windows 8.1的Windows應用商店應用程序,Windows Phone 8.x,Xbox One以及Windows Vista,Windows 7和Windows 8.x的Win32桌面應用程序。

與D3DX的許多功能一樣,D3DX11CreateShaderResourceViewFromFile是一款一應俱全的廚房接收工具,它意味着很難知道它何時會是一個非常快速的功能或極慢的功能。

有兩種不同的選項可以替代此功能:DDSTextureLoader和 WICTextureLoader。這些都是DirectXTK的一部分,DirectXTex包中也有「獨立」版本。

  • DDSTextureLoader是一個非常輕量級的DDS文件加載器。它非常高效,但不會執行運行時轉換或調整大小 - 這意味着如果它實際上是一個具有24-bpp格式數據的舊Direct3D 9 DDS文件,則無法加載並且必須轉換爲現代格式。它可以通過「剝離」更高級別的mipchains來處理mipmapped DDS文件的功能級別限制。這非常適合加載完全「熟化」的預製紋理。 DirectXTex是一個用於執行「烹飪」的庫,但Visual Studio 2012/2013內容管道也可以生成DDS文件。
  • WICTextureLoader是一款使用WIC的標準圖像文件的「較小重量」加載程序,它內置了對BMP,JPG,PNG,TIF和GIF的支持。它只能加載2D紋理,並且可以嘗試使用GPU的自動生成mipmap(如果支持給定格式)。它可以在運行時進行圖像大小調整,以實現功能級別限制。理想情況下,您可以使用在構建時創建的DDS文件,但在無法將映像文件預先轉換爲DDS的情況下,WICTextureLoader非常有用。

請參閱this博客文章瞭解更多詳情。

查看Living without D3DX博客文章,瞭解D3DX11推薦替代品的完整表格。

請注意,如果您使用的是Direct3D 10和D3DX10,建議移至Direct3D 11。

+0

圖片真的有必要嗎? –

+0

好。沒有幽默堆棧溢出。得到它了。 –

+0

它佔用了你答案的幾乎50%的屏幕空間。沒有人會抱怨一句笑話,但我認爲一張大圖應該是一個能夠大幅提高對答案理解的插圖。 –