在directX 11.1中加载纹理

时间:2014-07-25 14:35:29

标签: 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 );

2 个答案:

答案 0 :(得分:11)

总是区分" Direct3D"和" D3DX",但它并不一定对每个人都很明显。所有版本的D3DX现在都是deprecated,不在Windows 8.x SDK中,并且不能被Windows应用商店应用,Windows phone 8.x应用或Xbox One应用使用。请阅读Where is the DirectX SDK?以获取更多信息。

D3DX的主要替换库是DirectXTKDirectXTexDirectXMesh。这些平台支持所有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桌面应用。< / p>

与许多D3DX功能一样,D3DX11CreateShaderResourceViewFromFile是一个全有的厨房水槽工具,这意味着很难知道它何时会成为一个非常快速的功能或极其缓慢的功能。

替换此功能有两种不同的选项:DDSTextureLoader和 WICTextureLoader。这些是DirectXTK的一部分,并且有独立的&#39; DirectXTex包中的版本。

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

有关详细信息,请参阅this博文。

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

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

答案 1 :(得分:-1)

DirectxTK中查看DDSTextureLoader。

编辑他明确询问如何加载DDS纹理。请在投票前仔细阅读问题。