繁体   English   中英

漫反射纹理CreateTexture2D失败?

[英]Diffuse texture CreateTexture2D fails?

我将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
    }

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

你应该也设定值SysMemPitch成员initData如下解释MSDN:d3d11_subresource_data 还要记住, CreateTexture2D需要一个指向D3D11_SUBRESOURCE_DATA数组的D3D11_SUBRESOURCE_DATA (每个D3D11_SUBRESOURCE_DATA级别一个)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM