C++ 漫反射纹理CreateTexture2D失败?

C++ 漫反射纹理CreateTexture2D失败?,c++,directx,directx-11,C++,Directx,Directx 11,我有一个2d漫反射纹理加载到内存中,并希望从中创建dx11纹理。它不需要修改,所以我使它不可变 DX11Texture::DX11Texture(ID3D11Device* device, const std::vector<uint8_t>& textureData, uint32_t textureWidth, uint32_t textureHeight, TextureType textureType, Logger& logger) : mT

我有一个2d漫反射纹理加载到内存中,并希望从中创建dx11纹理。它不需要修改,所以我使它不可变

DX11Texture::DX11Texture(ID3D11Device* device, const std::vector<uint8_t>& textureData, uint32_t textureWidth, uint32_t textureHeight, TextureType textureType, Logger& logger) :
        mTexture(nullptr), mTextureID(gNextTextureID++)
    {
        D3D11_TEXTURE2D_DESC textureDesc;
        ZeroMemory(&textureDesc, sizeof(D3D11_TEXTURE2D_DESC));
        textureDesc.Width = textureWidth;
        textureDesc.Height = textureHeight;
        textureDesc.MipLevels = 1;
        textureDesc.ArraySize = 1;
        textureDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
        textureDesc.SampleDesc.Count = 1;
        textureDesc.Usage = D3D11_USAGE_IMMUTABLE;
        textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;

        D3D11_SUBRESOURCE_DATA initData;
        ZeroMemory(&initData, sizeof(D3D11_SUBRESOURCE_DATA));
        initData.pSysMem = &textureData.at(0);

        DXCALL(device->CreateTexture2D(&textureDesc, &initData, &mTexture));     // throws E_INVALIDARG result
    }
DX11Texture::DX11Texture(ID3D11Device*设备,const std::vector&textureData,uint32_t textureWidth,uint32_t texturehight,TextureType TextureType,Logger&Logger):
mTexture(nullptr),mTextureID(gNextTextureID++)
{
D3D11_TEXTURE2D_DESC textureDesc;
零内存(&textureDesc,sizeof(D3D11_TEXTURE2D_DESC));
纹理宽度=纹理宽度;
纹理高度=纹理高度;
textureDesc.MipLevels=1;
textureDesc.ArraySize=1;
textureDesc.Format=DXGI_格式_R8G8B8A8_UNORM;
textureDesc.SampleDesc.Count=1;
textureDesc.Usage=D3D11\u Usage\u不可变;
textureDesc.BindFlags=D3D11\u BIND\u SHADER\u资源;
D3D11_子资源_数据初始化数据;
零内存(&initData,sizeof(D3D11_子资源_数据));
initData.psysem=&textureData.at(0);
DXCALL(设备->创建纹理2D(&textureDesc,&initData,&mTexture));//抛出E_INVALIDARG结果
}

我不明白为什么它会导致CreateTexture2D调用的错误结果。例如,我有一个128x128 R8B8G8A8纹理,它抛出了一个坏结果。想知道为什么吗?

您可能还应该设置
initData
SysMemPitch
成员的值,如下所述。还请记住,
CreateTexture2D
需要一个指向
D3D11\u子资源\u数据数组的指针(每个mip级别一个)。

您可能需要在中查看DDSTureLoader的实现。