无法在 DirectX11 上创建一维纹理

Cannot create a 1D Texture on DirectX11

出于某种原因,当我尝试创建 1d 纹理时,下面的代码崩溃了。

D3D11_TEXTURE1D_DESC desc;
ZeroMemory(&desc, sizeof(D3D11_TEXTURE1D_DESC));
desc.Width = 64;
desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_SNORM;
desc.Usage = D3D11_USAGE_STAGING;
desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE | D3D11_CPU_ACCESS_READ;

HRESULT hr = D3DDev_0001->CreateTexture1D(&desc, NULL, &texture); //crashes here
assert(hr == S_OK);

其中 D3DDev_0001 是 ID3D11 设备。我能够创建 3d 和 2d 纹理,但是创建 1d 纹理会导致程序崩溃。谁能解释一下为什么?

USAGE_STAGING 纹理不能有任何 BindFlags,因为它不能在图形上下文中设置以用作 SRV、UAV 或 RTV。如果您想要 STAGING 纹理,请将 BindFlags 设置为 0,或者如果您只想要可以绑定到上下文的 'normal' 纹理,请将 Usage 设置为 D3D11_USAGE_DEFAULT。

USAGE_STAGING 资源要么供 CPU 在复制到 USAGE_DEFAULT 资源之前用数据填充,要么,它们是 GPU 副本获取数据的目的地从 GPU 回到 CPU.

此错误的确切原因已在 "D3D11's Debug Layer" 打印的消息中进行了解释;以后用它来查找这些错误的原因。