在directX 11.1中加载纹理
Load texture in directX 11.1
我正在阅读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纹理。请在投票前仔细阅读问题
- 在 OpenGL 中加载纹理C++
- 从文件问题加载纹理 Android NDK 和 OpenGL
- 是什么导致 glTexSubImage1D() - 加载纹理时在此示例中出现GL_INVALID_VALUE错误?
- Directx11 加载纹理
- 如何在单独的线程上加载纹理到主内存并使用它在另一个线程上渲染
- 如何加载纹理Opengl
- DirectX9 C++ - 在窗口最小化时加载纹理
- 渲染时加载纹理 (OpenGL)
- 使用 Openscenegraph 加载纹理时出错
- SDL2和GLFW3:加载纹理;违反访问
- 使用opengl和opencv加载纹理
- 加载纹理无法正常工作的功能
- 仅使用 alpha 值加载纹理
- OpenGL 更改/重新加载纹理
- 在DirectX9/C++中为OBJMesh加载纹理坐标
- OpenGL在没有或有静态设备上下文的情况下加载纹理
- 使用 OpenCV 为 OpenGL 加载纹理
- c++ OpenGL/SDL 2.0加载纹理失败
- 我如何使用FreeImage库加载纹理到OpenGL
- 使用SOILs OGL函数和OpenGL加载纹理