2014-07-25 94 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%的屏幕空间。没有人会抱怨一句笑话,但我认为一张大图应该是一个能够大幅提高对答案理解的插图。 –