Directx 用数据填充立方体结构

Directx 用数据填充立方体结构,directx,directx-11,Directx,Directx 11,我不明白这为什么不起作用 我正在尝试向每个立方体纹理面添加纹理数据。出于某种原因,只有第一个(+x)起作用。MSDN文档非常稀少,但看起来应该这样做: // mip-level 0 data // R8G8B8A8 texture uint32_t sizeWidth = textureWidth * sizeof(uint8_t) * 4; if (isCubeTexture) { for (uint32_t index = 0; index < gCubemapNumTextu

我不明白这为什么不起作用

我正在尝试向每个立方体纹理面添加纹理数据。出于某种原因,只有第一个(+x)起作用。MSDN文档非常稀少,但看起来应该这样做:

// mip-level 0 data
// R8G8B8A8 texture
uint32_t sizeWidth = textureWidth * sizeof(uint8_t) * 4;
if (isCubeTexture)
{
    for (uint32_t index = 0; index < gCubemapNumTextures; ++index)
    {
        const uint32_t subResourceID = D3D11CalcSubresource(0, index, 1);
        context->UpdateSubresource(mTexture, subResourceID, NULL, &textureData.at(sizeWidth * textureHeight * index), sizeWidth, 0);
    }
}
然后上传数据后,我生成mip链,如下所示:

context->GenerateMips(mShaderResourceView);

同样,它工作良好,但仅适用于第一个(+x)面。

通过将纹理描述置零,创建具有“0”mip级别的纹理。零表示“请完整mip链”,表示超过1 mip(除非您的纹理为1x1)

您对D3D11CalcSubresource的参数有第三个参数“1”,表明只有一个mip,这似乎不是真的。请确保将正确数量的MIP传递给此帮助器函数,否则它将无法计算正确的子资源索引


创建纹理后,可以通过调用GetDesc()获取mip计数。

创建纹理时使用的参数是什么?
context->GenerateMips(mShaderResourceView);