对于其他的两个维度,Direct3D11为我们准备了D3D11_TEXTURE1D_DESC用于1D纹理,D3D11_TEXTURE3D_DESC用于3D纹理。
作为最常见的纹理,二维的
D3D11_TEXTURE2D_DESC声明形式如下:
[cpp] view plaincopyprint?
1. typedef struct D3D11_TEXTURE2D_DESC { 2. 3. UINT Width; 4. 5. UINT Height; 6. 7. UINT MipLevels; 8. 9. UINT ArraySize; 10. 11. DXGI_FORMAT Format; 12. 13. DXGI_SAMPLE_DESC SampleDesc;
14. 15. D3D11_USAGE Usage; 16. 17. UINT BindFlags; 18. 19. UINT CPUAccessFlags; 20. 21. UINT MiscFlags; 22. 23. } D3D11_TEXTURE2D_DESC;
三、DirectX11 2D纹理映射demo的创建
这里,我们先介绍一下这个demo的组成结构: 如图,头文件有Dx11DemoBase.h以及Texture2DDemo.h
源文件有 Dx11DemoBase.cpp,Texture2DDemo.h以及main.cpp
在之前的TriangleDemo的基础上,我们再添加一个叫做TextureDemo的类,以及添加一个叫做colorMap_的D3D11ShaderResourceView类型的
着色器资源视图和一个D3D11SamplerState类型的唤做colorMapSampler_ 的采样状态。 着色资源视图简单的来说是一个用于访问资源的对象。当我们加载纹理到内存中的时候,必须创建一个着色器资源视图来通过着色器获取数据,而这些数据会被绑定到输出程序集当中。着色器资源视图也有其他的作用,比如为DirectCompute提供异步运算时需要的数据,本节我们主要是介绍其在纹理方面的运用。ID3D11Texture2D代表数据的缓存,而着色器资源视图允许我们在着色器中查看这个缓存的各项数据。
采样器声明(sampler state)允许我们访问的纹理采样的状态信息。后面将对其做更多更详细的讲解。
TextureDemo类的头文件代码书写风格如下:
代码段一 TextureDemo.h 对TextureDemo类的轮廓书写
[cpp] view plaincopyprint?
1. #ifndef _TEXTURE_2D_DEMO_H_ 2. #define _TEXTURE_2D_DEMO_H_ 3. 4. #include\ 5. 6. 7. class TextureDemo : public Dx11DemoBase 8. { 9. public: 10. TextureDemo( ); 11. virtual ~TextureDemo( ); 12. 13. bool LoadContent( ); 14. void UnloadContent( ); 15. 16. void Update( float dt ); 17. void Render( ); 18. 19. private: