在directX 11.1中加载纹理

use*_*301 3 c++ directx-11

我正在阅读针对DX11的http://www.braynzarsoft.net/教程,但我主要是使用metro风格应用程序在DX11.1上学习编程.随着我继续学习,我发现Dx11中的一些功能在DX11.1中不再存在,就像D3DX11CreateShaderResourceViewFromFile用于加载纹理的教程一样,但在DX11.1中我们没有这个!我的问题是如何在DX11.1中加载DDS纹理?我想在此代码中替换该函数,以便我可以加载DDS纹理:

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 );
Run Code Online (Sandbox Code Playgroud)

Chu*_*urn 11

"Direct3D"和"D3DX"之间始终存在区别,但对每个人来说并不一定是显而易见的.所有版本的D3DX现已弃用,不在Windows 8.x SDK中,并且不能被Windows应用商店应用,Windows Phone 8.x应用或Xbox One应用使用.阅读DirectX SDK在哪里?欲获得更多信息.

D3DX的主要替换库是DirectXTK,DirectXTexDirectXMesh.这些平台支持所有Direct3D 11.x平台,包括适用于Windows 8.0的Windows应用商店应用,适用于Windows 8.1的Windows应用商店应用,适用于Windows Vista,Windows 7和Windows 8.x的Windows Phone 8.x,Xbox One和Win32桌面应用.

像许多D3DX函数一样,D3DX11CreateShaderResourceViewFromFile是一个全有的厨房接收工具,这意味着很难知道它何时会成为一个非常快速的函数或一个非常慢的函数.

替换此函数有两种不同的选项:DDSTextureLoader和WICTextureLoader.这些是DirectXTK的一部分,DirectXTex包中也有"独立"版本.

  • DDSTextureLoader是一个非常轻量级的DDS文件加载器.它非常高效,但不执行运行时转换或调整大小 - 这意味着如果它实际上是一个旧的Direct3D 9 DDS文件,例如24-bpp格式的数据,它就无法加载,必须转换为现代格式.它可以通过"剥离"更高级别的mipchains来处理mipmap DDS文件的功能级别限制.这非常适合加载完全"熟化"的预制纹理.DirectXTex是用于执行"烹饪"的库,但Visual Studio 2012/2013内容管道也可以生成DDS文件.
  • WICTextureLoader是一个"重量较轻"的加载器,用于使用WIC的标准图像文件,内置支持BMP,JPG,PNG,TIF和GIF.它只能加载2D纹理,如果支持给定格式,可以尝试使用GPU自动生成mipmap.它可以在运行时为功能级别限制进行图像大小调整.理想情况下,您使用在构建时创建的DDS文件,但在无法将图像文件预转换为DDS的情况下,WICTextureLoader非常有用.

有关详细信息,请参阅博客文章.

请参阅Living without D3DX博文,了解D3DX11推荐替代产品的完整表格.

请注意,如果您使用的是Direct3D 10和D3DX10,建议转到Direct3D 11.

  • 美好的。Stack Overflow 上没有幽默感。知道了。 (2认同)
  • 我认为这个图像恰当地传达了D3DX的本质以及它被弃用的原因.在任何情况下,它看起来像SO的标记语言不会让你调整图像引用的大小... BTW,对于那些问"什么图像?"的人.这是[这个](http://theawesomer.com/photos/2008/12/122908_wenger_1.jpg)之一. (2认同)