在directX 11.1中加载纹理

Load texture in directX 11.1

本文关键字:加载 纹理 directX      更新时间:2023-10-16

我正在阅读http://www.braynzarsoft.net/DX11教程,但我主要学习DX11.1与metro风格的应用程序编程。随着我继续学习,我发现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 );

"Direct3D"answers"D3DX"之间一直存在区别,但并不一定对每个人都很明显。所有版本的D3DX现在都已弃用,不在Windows 8中。Windows Store应用程序、Windows phone 8无法使用。x应用程序或Xbox One应用程序。阅读DirectX SDK在哪里?查看更多信息。

D3DX的主要替代库是DirectXTK, DirectXTex和DirectXMesh。这些支持所有Direct3D 11。包括Windows 8.0的Windows Store应用程序,Windows 8.1的Windows Store应用程序,Windows phone 8。Windows Vista、Windows 7、Windows 8.x、Xbox One和Win32桌面应用程序

像许多D3DX函数一样,D3DX11CreateShaderResourceViewFromFile是一个无所不用其极的工具,这意味着很难知道它将是一个非常快的函数还是一个非常慢的函数。

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

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

详情请看这篇博文

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

注意,如果你正在使用Direct3D 10和D3DX10,建议移动到Direct3D 11。

看看DirectxTK中的DDSTextureLoader。

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