use*_*037 4 c++ directx shader hlsl
我只是想知道如何在HLSL中使用Texture2DArray.
我正在尝试实现一个模型加载器,其中模型具有不同的纹理量.目前我的HLSL使用尺寸为2的Texture2D(纹理和普通纹理),但由于我的模型具有不同数量的纹理,我希望使用Texture2DArray但不知道从哪里开始.我一直试图在互联网上找到例子,但没有运气:(
我加载纹理,编译为'ID3D11ShaderResourceView*'所以我应该创建一个变量ID3D11ShaderResourceView**我创建一个点到纹理的点数组,然后将其传递给着色器或什么?
有帮助吗?
您只需在创建时设置ArraySize字段即可D3D11_TEXTURE2D_DESC.
一个人ShaderResourceView查看整个数组,您不需要多个视图.如果您没有D3D11_SHADER_RESOURCE_VIEW_DESC在创建时提供自己的(而是传递nullptr),那么您已经设置好了.
如果你是通过你自己D3D11_SHADER_RESOURCE_VIEW_DESC然后设置ViewDimension字段D3D11_SRV_DIMENSION_TEXTURE2DARRAY,然后填写的所有4名成员Texture2DArray的描述来看(场MostDetailedMip,MipLevels,FirstArraySlice,ArraySize).
在HLSL中,您只需指定:
Texture2DArray myTexture;
代替
Texture2D myTexture;
当采样时,uv坐标是三维的.x和y正常,但z是要读取的数组切片的索引.
如果你在创建时使用D3D11_SUBRESOURCE_DATA结构初始化纹理,那么你只需要将一个指针传递给一个数组D3D11_SUBRESOURCE_DATA,一个用于数组中的每个切片.