无法在DirectX11上创建1D纹理

时间:2015-11-10 06:18:59

标签: c++ directx-11

出于某种原因,当我尝试创建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是ID3D11Device。我能够创建3d和2d纹理,但制作1d纹理会导致程序崩溃。任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:3)

USAGE_STAGING纹理不能有任何BindFlags,因为它无法在图形上下文中设置以用作SRV,UAV或RTV。如果你想要一个STAGING纹理,可以将BindFlags设置为0;如果你只想要一个正常的纹理,可以将Usage设置为D3D11_USAGE_DEFAULT。可以绑定到上下文的纹理。

USAGE_STAGING资源要么是CPU在复制到USAGE_DEFAULT资源之前填入数据,要么是GPU副本的目标,以便将数据从GPU传回CPU。

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